베지밀
[SQL] 프로그래머스 JOIN 4문제 본문
join 한눈에 정리한 사진
# 없어진 기록 찾기
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS AS A RIGHT JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL;
1. RIGHT JOIN
SELECT <요소>
FROM TABLE A RIGHT JOIN TABLE B
ON A.KEY = B.KEY
WHERE A.ANIMAL_ID IS NULL;
# 있었는데요 없었습니다
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS AS A INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME;
2. INNER JOIN
SELECT <요소>
FROM TABLE A INNER JOIN TABLE B
ON A.KEY = B.KEY;
3. 날짜 대소비교
그냥 DATETIME > DATETIME 쓰면 됨
# 오랜 기간 보호한 동물(1)
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME ASC
LIMIT 3;
4. LEFT JOIN
SELECT <요소>
FROM TABLE A LEFT JOIN TABLE B
ON A.KEY = B.KEY
WHERE B.ANIMAL_ID IS NULL;
5. 상위 N개 출력
LIMIT 3
ORDER DY 절 이후에 사용
# 보호소에서 중성화한 동물
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A INNER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE LIKE "I%" AND (B.SEX_UPON_OUTCOME LIKE "S%" OR B.SEX_UPON_OUTCOME LIKE "N%")
ORDER BY A.ANIMAL_ID;
6. 와일드카드로 문자열 비교
WHERE <컬럼명> LIKE "A%" : A로 시작하는 모든 행 출력
7. AND, OR 우선순위
AND가 OR보다 우선순위가 높기 때문에 괄호를 쳐줘야 함
만약
WHERE A.SEX_UPON_INTAKE LIKE "I%" AND B.SEX_UPON_OUTCOME LIKE "S%" OR B.SEX_UPON_OUTCOME LIKE "N%"
라고 했으면 보호 당시 중성화x면서 입양할 때 중성화한 암컷(S) 또는 입양할 때 중성화한 수컷(N)으로 조회되어서 다라는 결과가 나온다.