Data Engineering/MySQL & Oracle

[프로그래머스 MySQL,Oracle] - 없어진 기록 찾기

ddoddo201 2021. 6. 26. 22:57

 

 

MySQLOracle 문법이 헷갈리는 경우가 종종 있다.

같은 조건에 대해서 다른 문법을 이용하는 경우를 정리할 것이다.

 

[ 프로그래머스 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