Programmers SQL 고득점 Kit - JOIN편
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