[SQL] JOIN
Updated:
모든 문제의 출처는 프로그래머스 SQL 고득점 KIT입니다. (https://programmers.co.kr/learn/challenges)
예제 1
TIP
- ANIMAL_OUTS에는 존재하고 ANIMAL_INS에는 존재하지 않는 데이터를 찾아야 하므로 ANIMAL_OUTS를 기준으로 LEFT OUTER JOIN 사용!
- JOIN을 사용할 경우 SELECT문에서 COLUMN를 명시할때 어느 테이블의 어느 COLUMN인지 명시
- 고유번호인 ANIMAL_ID를 이용해 ANIMAL_OUTS에 존재하는 ID와 동일한 데이터를 테이블 ANIMAL_INS로부터 추출!
- JOIN 기준이 ANIMAL_OUTS이므로 기본적으로 ANIMAL_OUTS에 있는 데이터는 전부 보여짐 -> 따라서 ANIMAL_INS에 존재하지 않는 데이터의 경우 ANIMAL_INS의 COLUMN이 전부 NULL로 출력!
code
SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS AS OUTS LEFT OUTER JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
ORDER BY OUTS.ANIMAL_ID
TIP2
- 위의 3줄만 실행 시 아래와 같이 JOIN!
예제 2
code
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS AS INS LEFT JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME;
예제 3
code
SELECT INS.NAME, INS.DATETIME
FROM ANIMAL_INS AS INS LEFT OUTER JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.DATETIME IS NULL
ORDER BY INS.DATETIME
LIMIT 3
예제 4
code
SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME
FROM ANIMAL_INS AS INS LEFT JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.SEX_UPON_INTAKE LIKE "%Intact%" AND (OUTS.SEX_UPON_OUTCOME LIKE "%Spayed%" or OUTS.SEX_UPON_OUTCOME LIKE "%Neutered%")
ORDER BY INS.ANIMAL_ID
Leave a comment