문제
다음 중 [주소록] 이라는 연결 테이블의 내용을 [거래처] 테이블에 추가하는 SQL문으로 옳은 것은? (단, 두 테이블은 모두 '거래처번호', '거래처명', '연락처'라는 동일한 데이터 형식과 필드 순서를 갖고 있다. 또한 '거래처번호' 필드를 기준으로 [거래처] 테이블에 존재하지 않는 데이터만을 추가하고자 한다.)
① insert into 거래처(거래처번호, 거래처명, 연락처) set 주소록(거래처번호, 거래처명, 연락처) where 거래처번호 is not null ② insert into 거래처 select * from 주소록 where 거래처번호 not in (select 거래처번호 from 거래처) ③ insert into 거래처 values 주소록(거래처번호, 거래처명, 연락처) ④ insert into 거래처(거래처번호, 거래처명, 연락처) select 거래처번호, 거래처명, 연락처 from 주소록 where 거래처번호 not in (select 거래처번호 from 주소록)
정답
2번
해설
정답: 2. INSERT INTO 거래처 SELECT * FROM 주소록 WHERE 거래처번호 NOT IN (SELECT 거래처번호 FROM 거래처)는 주소록의 데이터 중 [거래처]에 없는 거래처번호만 골라 추가하므로 요구 조건에 맞다.
오답 풀이
- 1번: INSERT 구문에
set ... 주소록(...)형태는 잘못된 문법이다. - 2번: 거래처에 없는 거래처번호만 추가하는 올바른 추가 쿼리이므로 옳다.
- 3번:
insert into ... values 주소록(...)은 VALUES 절 사용이 잘못된 문법이다. - 4번: 하위 쿼리에서
from 주소록을 비교해, 자기 자신과 비교하므로 거래처 중복 제거 목적과 맞지 않는다.
보충 개념
다른 테이블의 데이터를 넣는 추가 쿼리는 INSERT INTO 대상 SELECT ... FROM 원본 WHERE 조건 형태를 쓰며, 중복 방지에는 NOT IN (대상 테이블의 키)를 활용한다.