다른 테이블 기준으로 수정·삭제: 조인 UPDATE·DELETE 와 INSERT ALL
인상률은
raise_rate표에 있고 급여는emp표에 있습니다. 다른 표의 값을 보고 이쪽 행을 고치거나 지우려면 표준은 상관 서브쿼리와EXISTS이고, MySQL·MSSQL 은 조인을 직접 쓰는 방언이 있습니다. 반대로 한 번 읽은 원천을 조건별로 여러 표에 나눠 넣는 Oracle 의INSERT ALL도 함께 봅니다.
1. 왜 배우는가
배치와 운영 작업은 "다른 표에 적힌 기준으로 이 표를 고쳐라" 의 연속입니다. 부서별 인상률 표를 보고 급여를 올리고, 퇴사자 목록에 있는 사원을 지우고, 사원이 없는 부서의 설정을 정리합니다. 한 표만 보는 UPDATE ... WHERE 로는 안 되고 다른 표와 짝을 지어야 합니다.
표준 SQL 에는 조인을 쓰는 UPDATE 가 없어서 상관 서브쿼리를 씁니다. 이때 WHERE EXISTS 를 빼먹으면 짝 없는 행의 값이 NULL 로 바뀌는 사고가 나고, 모든 DB 에서 똑같이 일어납니다. MySQL·MSSQL 은 조인 문법이 있지만 서로 모양이 달라 옮길 때 자주 틀립니다.
INSERT ALL 은 반대 방향의 문제입니다. 원천을 한 번 읽어 조건에 따라 여러 표에 나눠 넣는 작업이 Oracle 에는 한 문장이고, 다른 DB 는 INSERT ... SELECT 를 조건 수만큼 씁니다. 중급 02 EXISTS·IN 과 고급 08 MERGE 를 알면 이 레슨은 그 조합입니다.