ì˜ˆì œë¥¼ 통한 PostgreSQLì—ì„œì˜ ê°„ë‹¨í•œ SQLë¬¸ë²•ì˜ ì´í•´: PostgreSQL 입문 | ||
---|---|---|
ì´ì „ | Chapter 3. SQL문 ì ‘í•˜ê¸° | ë‹¤ìŒ |
INSERT는 í…Œì´ë¸”ë‚´ì— ë ˆì½”ë“œë¥¼ ìž…ë ¥í• ë•Œ 사용한다.
INSERT INTO table [ ( column [, ...] ) ] { VALUES ( expression [, ...] ) | SELECT query }
ì•žì„œë„ INSERTë¬¸ì€ ì‚¬ìš©í–ˆìœ¼ë¯€ë¡œ 기본ì ì¸ ì‚¬ìš©ë°©ë²•ì€ ë‚¯ì„¤ì§€ëŠ” ì•Šìœ¼ë¦¬ë¼ ìƒê°ëœë‹¤. 하지만 여기서 ì§šê³ ë„˜ì–´ê°€ê³ , ë˜ ì¢€ ë” ì‹¬í™”ëœ ì¿¼ë¦¬ë¥¼ 연습해 ë³´ë„ë¡ í•˜ê² ë‹¤. ëª¨ë‘ ì˜ˆì œë¥¼ 통해서 살펴보ìž.
ì˜ˆì œ 3-10. 기본ì ì¸ INSERT문 ì˜ˆì œ
INSERT INTO student_new (std_id, std_sex, std_name, std_addr, std_tel, std_handphone, std_birthday) VALUES ('9744290', 'F', '진혜ì˜', '서울시가 다 내꺼', '02-XXX-XXXX', '011-XXXX-XXXX', '1979-05-14');
그림 3-11. INSERT를 ì´ìš©í•´ì„œ ë°ì´í„°ë¥¼ ìž…ë ¥í•´ë³´ìž.
ì´ì „ì— ë§Œë“¤ì—ˆë˜ student_newë¼ëŠ” í…Œì´ë¸”ì— ë°ì´í„°ë¥¼ ìž…ë ¥í•˜ëŠ” 쿼리ì´ë‹¤. INSERT INTO ë’¤ì— í…Œì´ë¸” ëª…ì´ ë”°ë¼ ì˜¤ë©° ë’¤ì— ê´„í˜¸ë¡œ êµ¬ë¶„í•˜ê³ ìž…ë ¥í• ì»¬ëŸ¼ëª…ì„ ì¼ì¼ížˆ ê¸°ìˆ í•œ ë’¤ì— ê´„í˜¸ ë‹«ê³ VALUESë¼ëŠ” 키워드 ë”°ë¼ì˜¤ê³ 다시 괄호 ì—´ê³ ê°’ë“¤ì„ ìˆœì°¨ì 으로 ê¸°ìˆ í•˜ê³ ë‚œ í›„ì— ë§ˆì§€ë§‰ìœ¼ë¡œ 괄호 닫는 것으로 마ê°í•˜ê³ 있다.
ì´ëŸ¬í•œ 구조는 ì•žì— ì»¬ëŸ¼ì„ ì¼ì¼ížˆ ê¸°ìˆ í•´ì£¼ì§€ ì•Šì•„ë„ í…Œì´ë¸”ì˜ êµ¬ì¡°ì— ë”°ë¼ ë“¤ì–´ê°€ê²Œ í• ìˆ˜ ë„ ìžˆë‹¤. 예를 들어 다ìŒì„ ë³´ë„ë¡ í•˜ìž.
ì˜ˆì œ 3-11. 조금 다른 INSERT문 ì˜ˆì œ
INSERT INTO student_new VALUES ('9944000', 'M', 'ì˜ê°€ë¦¬', '노숙', '없어', '없어', '1979-01-01');
그림 3-12. INSERT를 ì´ìš©í•´ì„œ ë°ì´í„°ë¥¼ ìž…ë ¥í•´ë³´ìž.
위와 ê°™ì´ ì»¬ëŸ¼ëª…ì„ ê¸°ìˆ í•˜ì§€ 않으면 í…Œì´ë¸”ì˜ êµ¬ì¡°ì— ë”°ë¼ ì°¨ê³¡ì°¨ê³¡ 순서대로 필드가 대ì‘ë˜ì–´ì„œ 들어가게 ëœë‹¤.
ê·¸ë ‡ë‹¤ë©´ ì‘용하는 방법으로 넣어야 하는 필드만 ë”°ë¡œ 콕 집어서 ë„£ì„ ìˆ˜ ë„ ìžˆê² ë‹¤. 다ìŒê³¼ ê°™ì´ í•´ë³´ìž.
ì˜ˆì œ 3-12. ì›í•˜ëŠ” í•„ë“œì—만 ë°ì´í„°ë¥¼ ìž…ë ¥í•˜ëŠ” ì˜ˆì œ
INSERT INTO student_new (std_id,std_name, std_addr, std_birthday) VALUES ('9644021', '누구지', '서울시 ë™ìž‘구 ìƒë„ë™', date(now()));
그림 3-13. INSERT를 ì´ìš©í•´ì„œ ë°ì´í„°ë¥¼ ìž…ë ¥í•´ë³´ìž.
잘~ 들어갔다. ìœ„ì˜ í…Œì´ë¸” 구조ì—ì„œ NOT NULLì¸ í•ëª©ë§Œ 콕 집어서 ìž…ë ¥ì„ í•œ 것ì´ë‹¤. 나머지 ì»¬ëŸ¼ì€ defaultê°’ì„ ì„¤ì •í–ˆë‹¤ë©´ defaultê°’ì´ ë“¤ì–´ê°”ì„ í…Œê³ , defaultê°’ì„ ì„¤ì •í•˜ì§€ ì•Šì€ ì»¬ëŸ¼ì€ NULLì´ ë“¤ì–´ê°€ê²Œ ëœë‹¤.
ìœ„ì˜ ì˜ˆì œì—ì„œ 처ìŒë³´ëŠ” ê²ƒì´ ë“±ìž¥í–ˆì„ ê²ƒì´ë‹¤. 바로 date(now()) ì¸ë°, ì´ê²ƒì€ SQLì—ì„œ 지ì›í•˜ëŠ” 함수ì´ë‹¤. \df하면 SQLì—ì„œ 지ì›í•˜ëŠ” 함수가 주욱 나타나게 ë˜ëŠ”ë° ê·¸ì¤‘ì—ì„œ í•˜ë‚˜ë¡œì¨ now()는 현재 ì‹œê°„ì„ ë°˜í™˜í•´ì£¼ë©° date()는 date형으로 형변환(type cast)를 해주는 것ì´ë‹¤. 여기서는 ì ì ˆí•œ ì˜ˆì œê°€ ë 수 없지만 (ìƒì¼ì´ 현재 ì‹œê°„ì´ ë˜ëŠ” 경우는 드물다.) 매번 ìž…ë ¥í• ë•Œ 현재 ì‹œê°„ì„ ë„£ì–´ì•¼ 한다면 위와 ê°™ì´ ìž…ë ¥ì„ í•´ì£¼ë©´ ë˜ê² 다. 아니면 아예 DEFAULTë¡œ ìœ„ì˜ í•¨ìˆ˜ë¥¼ 호출하ë„ë¡ ë§Œë“¤ ìˆ˜ë„ ìžˆê² ë‹¤.
ì˜ˆì œ 3-13. INSERT와 SELECTì˜ ì¡°í•©ì„ ìœ„í•œ ë°ì´í„° ìž…ë ¥ ì˜ˆì œ
ìš°ì„ ì‹¤ìŠµì— ì‚¬ìš©ë í…Œì´ë¸” ìƒì„±ì„ 위해 다ìŒì˜ 쿼리를 주ìž.
create table a (c1 int, c2 varchar(10)); create table b (num int, description varchar(30), category varchar(10)); insert into b values (1, '메롱', '놀림'); insert into b values (2, 'C8', 'ìš•'); insert into b values (3, '비행기', '명사'); insert into b values (4, 'ë¼ì§€', 'ë™ë¬¼'); insert into b values (5, '피ìž', '먹ì„것');
그림 3-14. ì‹¤ìŠµì„ ìœ„í•œ ë°ì´í„°ë¥¼ ìž…ë ¥í•˜ìž.
열심히 쿼리를 넣어서 bí…Œì´ë¸”ì— ê°’ë“¤ì„ ì§‘ì–´ 넣었다. 그러면 bì— ë„£ì€ ê°’ë“¤ì„ aí…Œì´ë¸”ì— ë„£ì„ ìˆ˜ ì—†ì„까? ê·¸ 해답 바로 INSERT와 SELECT를 ê°™ì´ ì“°ëŠ” 것ì´ë‹¤. 다ìŒê³¼ ê°™ì€ ì¿¼ë¦¬ë¥¼ 넣어보ë„ë¡ í•˜ìž.
ì˜ˆì œ 3-14. INSERT와 SELECTì˜ ì¡°í•© ì˜ˆì œ
INSERT INTO a SELECT num, description FROM b;
그림 3-15. INSERT와 SELECTì˜ ì¡°í•©.
위ì—ì„œ ë³´ì´ëŠ” 것과 ê°™ì´ b í…Œì´ë¸”ì— ìžˆë˜ ê°’ë“¤ì´ aí…Œì´ë¸”ì— ë¬´ì‚¬ížˆ 넘어갔다. 다ìŒê³¼ ê°™ì€ ì¿¼ë¦¬ë¥¼ 다시 한번 줘 ë³´ë„ë¡ í•˜ìž.
ì˜ˆì œ 3-15. INSERT와 SELECTì˜ ì¡°í•© ì˜ˆì œ 변형
INSERT INTO a (c1, c2) SELECT num+5, category FROM b;
그림 3-16. INSERT와 SELECTì˜ ì¡°í•© 변형.
ì´ë²ˆì—는 bí…Œì´ë¸”ì— ìžˆë˜ categoryì»¬ëŸ¼ì´ aí…Œì´ë¸”ì— ë“¤ì–´ê°”ë‹¤. 단, num를 ê°€ì ¸ì™”ì„ ë•Œ 5ì”©ì„ ë”í•´ì„œ aí…Œì´ë¸”ì—서는 ì¤‘ë³µì´ ì¼ì–´ë‚˜ì§€ 않게 했다.