LIKE 앞에 NOT을 붙여 종합운동장역이 아닌 데이터만 조회하도록 해서 데이터가 정상적으로 입력되었습니다. 특정 데이터를 걸러내는 형태가 아닌 기본 키와 충돌하지 않는 방법으로 데이터를 입력하는 방법도 소개하도록 하죠.
쿼리 11-6 기본 키와 충돌하지 않게 데이터 입력
INSERT INTO subway_dml_test SELECT a.* FROM subway_statistics a WHERE NOT EXISTS ( SELECT 1 FROM subway_dml_test b WHERE a.seq_id = b.seq_id ); -- 0개 행 이(가) 삽입되었습니다.
쿼리 11-6을 차근차근 살펴봅시다. 우선 subway_statistics 테이블에 a란 별칭을 주었습니다. 그리고 WHERE 절에서 NOT EXISTS와 중첩 서브쿼리를 이용해 subway_dml_test 테이블의 seq_id 값과 같은 건이 아닌, 즉 subway_dml_test 테이블에는 없는 seq_id 값만 읽어오도록 했습니다. 이런 식으로 쿼리를 작성하면 기본 키가 충돌할 염려가 없죠. 이전에 이미 모든 데이터를 입력했기 때문에 최종 결과는 0건이 입력되었다고 나오는군요.
INSERT 문을 설명하는 절인데 오히려 조인, 중첩쿼리에 대해 더 설명한 것 같네요. 사실 INSERT 구문은 입력할 테이블과 컬럼만 명시하면 됩니다. 보시다시피 어떤 데이터를 어떻게 입력할 것인지는 SELECT 문에서 결정합니다. 그래서 DML 중 SELECT 문장의 사용이 압도적으로 많으며 다른 문장에 비해 사용법이 복잡한 것입니다.