Programmers SQL 고득점 Kit - JOIN편

1 minute read

JOIN

programmers SQL 고득점 Kit - JOIN 편

1. 없어진 기록 찾기

  • OUTER JOIN ~ ON 조건

    => SELECT ~ FROM (TABLE 명 A) LEFT(RIGHT) OUTER JOIN (다른 TABLE명 B) ON A.(COLUMN)=B.(COLUMN) WHERE (조건절) ORDER BY (ASC DESC)
  • 계속 틀린 이유 -> COLUMN명을 ANIMAL인데 ANIMALL로 잘못 씀

    SELECT O.ANIMAL_ID, O.NAME 
    FROM ANIMAL_OUTS O 
    LEFT OUTER JOIN ANIMAL_INS I
    ON O.ANIMAL_ID = I.ANIMAL_ID
    WHERE I.ANIMAL_ID IS NULL
    ORDER BY O.ANIMAL_ID
    

2. 있었는데요 없었습니다

  • INNER JOIN 과 OUTER JOIN의 차이
    • INNER JOIN : 교집합
    • OUTER JOIN : 합집합
  • ANIMAL_OUT에 있는 DATE가 ANIMAL_INS보다 빠를때 O.DATE < I.DATE

    SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME
    

3. 오랜 기간 보호한 동물 (1)

  • 합집합을 위해 (OUTER JOIN)과 IS NULL함수 활용

    => 구현 전략

    ​ - 입양 기록이 NULL이고 가장 오래 보호소에 있었다면 ORDER BY INS.DATETIME ASC로

    ​ - LIMIT는 3

  • LIMIT

    원하는 숫자 N만큼 데이터 출력

    • LIMIT 3 -> 상위 3번째까지 출력
    • LIMIT 5, 3 -> 5번째부터 3개 출력
    SELECT INS.NAME, INS.DATETIME
    FROM ANIMAL_INS INS 
    LEFT OUTER JOIN ANIMAL_OUTS OUTS
    ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
    WHERE OUTS.ANIMAL_ID IS NULL
    ORDER BY INS.DATETIME
    LIMIT 0, 3
    

4. 보호소에서 중성화한 동물

  • 교집합이기 때문에 (INNER JOIN)과 LIKE 함수 활용

    => 구현 전략

    ​ - 같은 INNER JOIN 인데 조건이 INS에 LIKE ‘%Intact%’

    ​ - WHERE 절에서 OUTS.SEX_UPON_OUTCOME 이 ‘%Spayed%’나 ‘%Neutered%’

    SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME FROM ANIMAL_OUTS O INNER JOIN ANIMAL_INS I ON I.SEX_UPON_INTAKE LIKE '%Intact%' AND I.ANIMAL_ID = O.ANIMAL_ID
    WHERE O.SEX_UPON_OUTCOME LIKE '%Spayed%' OR O.SEX_UPON_OUTCOME LIKE '%Neutered%'
    

Leave a comment