5. 자주 하는 실수 (Tip)
실수 1: 상관 서브쿼리 UPDATE 에 WHERE EXISTS 가 없다
예제 2 가 그 사고입니다. 짝 없는 행이 NULL 이 되고 NOT NULL 컬럼이면 오류로 문장 전체가 실패합니다. WHERE EXISTS 를 항상 함께 쓰고, 실행 전에 SELECT COUNT(*) 로 대상 건수를 확인합니다.
실수 2: 원천 키가 유일하지 않다
상관 서브쿼리와 MERGE 는 오류로 알려 주지만 MSSQL UPDATE ... FROM 은 오류 없이 임의의 한 행을 씁니다. 원천을 GROUP BY 나 ROW_NUMBER()(고급 01 순위 함수)로 키당 한 행으로 만든 뒤 조인합니다.
실수 3: 조인 UPDATE 문법을 다른 DB 에 그대로 옮긴다
MySQL 의 UPDATE a JOIN b ... SET 은 MSSQL 에서 문법 오류이고, MSSQL 의 UPDATE a SET ... FROM a JOIN b 는 MySQL 에서 오류입니다. Oracle 은 23ai 이전에는 둘 다 안 됩니다. 여러 DB 를 지원해야 하면 표준 상관 서브쿼리나 MERGE 를 씁니다.
실수 4: NOT IN 으로 삭제한다
DELETE ... WHERE dept NOT IN (SELECT dept FROM emp) 에서 서브쿼리에 NULL 이 하나라도 있으면 결과가 비어 아무 행도 안 지워집니다. NOT EXISTS 를 씁니다.