베지밀

[SQL] 프로그래머스 JOIN 4문제 본문

취준기록/코딩테스트

[SQL] 프로그래머스 JOIN 4문제

vegimil 2024. 7. 25. 15:03

 

 

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)으로 조회되어서 다라는 결과가 나온다.