Data Engineering/MySQL & Oracle
[프로그래머스 MySQL,Oracle] - 없어진 기록 찾기
ddoddo201
2021. 6. 26. 22:57
MySQL과 Oracle 문법이 헷갈리는 경우가 종종 있다.
같은 조건에 대해서 다른 문법을 이용하는 경우를 정리할 것이다.
[ 프로그래머스 JOIN - 없어진 기록 찾기 ]
MySQL
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS A LEFT OUTER JOIN ANIMAL_INS B
ON A.ANIMAL_ID=B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.ANIMAL_ID
1. INNER JOIN, LEFT JOIN, RIGHT JOIN ... ON
2. 단, OUTER JOIN이 없어서 LEFT, RIGHT를 같이 사용해야 한다.
ORACLE (방법1)
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS A, ANIMAL_INS B
WHERE A.ANIMAL_ID=B.ANIMAL_ID(+) AND B.ANIMAL_ID IS NULL
ORDER BY A.ANIMAL_ID;
1. FULL OUTER JOIN
2. LEFT, RIGHT JOIN 대신에 (+) 기호 또는 ON 조건을 사용한다.
LEFT JOIN: 오른쪽에 (+)
(MySQL) ANIMAL_OUTS A LEFT OUTER JOIN ANIMAL_INS B
(Oracle) A.ANIMAL_ID = B.ANIMAL_ID(+)
RIGHT JOIN: 왼쪽에 (+)
(MySQL) ANIMAL_OUTS A RIGHT OUTER JOIN ANIMAL_INS B
(Oracle) A.ANIMAL_ID(+) = B.ANIMAL_ID
그리고 이 문제는 아래 처럼
Oracle에서 아주 단순하게 풀 수도 있다.
ORACLE (방법2)
SELECT ANIMAL_ID, NAME FROM ANIMAL_OUTS
MINUS
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
UNION, UNION ALL, INTERSECT, MINUS