1. MINUS
2. NOT IN
3. NOT EXISTS
4. OUTER JOIN & IS NULL
INSERT INTO a(pk1, pk2, c1, c2, c3) -- 1. MINUS SELECT pk1, pk2, c1, c2, c3 FROM b WHERE (pk1, pk2) IN (SELECT pk1, pk2 FROM b MINUS SELECT pk1, pk2 FROM a ) ; -- 2. NOT IN SELECT pk1, pk2, c1, c2, c3 FROM b WHERE (pk1, pk2) NOT IN (SELECT pk1, pk2 FROM a) ; -- 3. NOT EXISTS SELECT pk1, pk2, c1, c2, c3 FROM b WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.pk1 = b.pk1 AND a.pk2 = b.pk2 ) ; 4. OUTER JOIN & IS NULL SELECT b.pk1, b.pk2, b.c1, b.c2, b.c3 FROM b , a WHERE b.pk1 = a.pk1(+) AND b.pk2 = a.pk2(+) AND a.pk1 IS NULL ;
-- 보충설명 INSERT INTO TARGET_TABLE -- 인서트할 테이블 WITH A AS ( SELECT 1 RN , 'A' VAL FROM DUAL UNION ALL SELECT 2 , 'B' FROM DUAL UNION ALL SELECT 3 , 'C' FROM DUAL UNION ALL SELECT 4 , 'D' FROM DUAL UNION ALL SELECT 5 , 'E' FROM DUAL UNION ALL SELECT 6 , 'F' FROM DUAL UNION ALL SELECT 7 , 'G' FROM DUAL UNION ALL SELECT 8 , 'H' FROM DUAL UNION ALL SELECT 9 , 'I' FROM DUAL UNION ALL SELECT 10, 'J' FROM DUAL ) , B AS ( SELECT 1 RN , 'A' VAL FROM DUAL UNION ALL SELECT 2 , 'B' FROM DUAL UNION ALL SELECT 3 , 'C' FROM DUAL UNION ALL SELECT 4 , 'AA' FROM DUAL UNION ALL SELECT 5 , 'BB' FROM DUAL ) -- 1.MINUS SELECT VAL FROM B MINUS SELECT VAL FROM A -- 2.NOT IN SELECT VAL FROM B WHERE B.VAL NOT IN ( SELECT A.VAL FROM A ) -- 3.NOT EXISTS SELECT VAL FROM B WHERE NOT EXISTS ( SELECT 'X' FROM A WHERE A.VAL = B.VAL ) -- 4.OUTER JOIN & IS NULL SELECT B.VAL FROM A RIGHT OUTER JOIN B ON A.VAL = B.VAL WHERE A.VAL IS NULL