[SQL] JOIN

Updated:

모든 문제의 출처는 프로그래머스 SQL 고득점 KIT입니다. (https://programmers.co.kr/learn/challenges)

JOIN_DIAGRAM

예제 1

1-1 1-2

TIP

JOIN

  • 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!

join_Ex

예제 2

2-1 2-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

3-1 3-2

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

4-1 4-2

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

Tags:

Categories:

Updated:

Leave a comment