코딩테스트/SQL

프로그래머스_없어진 기록 찾기

zyin 2021. 1. 22. 09:22

문제

programmers.co.kr/learn/courses/30/lessons/59042

 

코딩테스트 연습 - 없어진 기록 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

풀이

SQL문을 중첩해서 사용하는 것을 서브쿼리라고 하며, 서브쿼리를 괄호로 묶어서 사용해야 하며 서브쿼리 안에서 Order By절은 사용할 수 없다. 

 

SELECT절에서의 서브쿼리/ 스칼라 서브 쿼리

SELECT 컬럼1, 컬럼2, 
AVG(SELECT 컬럼1 FROM 테이블명2 WHERE 조건문)

FROM 테이블명1
WHERE 조건문;

FROM절에서의 서브쿼리/ 인라인 뷰

SELECT 컬럼1, 컬럼2
FROM (SELECT 컬럼1, 컬럼2, 컬럼3 FROM 테이블명 WHERE 조건문)
WHERE 조건문;

WHERE절에서의 서브쿼리/ 중첩 서브 쿼리

SELECT 컬럼1, 컬럼2
FROM 테이블명1
WHERE 컬럼3 IN (SELECT 컬럼1, 컬럼2, 컬럼3 FROM 테이블명2 WHERE 조건문);

코드

-- 서브 쿼리 사용
SELECT ANIMAL_ID, NAME
FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN (
    SELECT ANIMAL_ID FROM ANIMAL_INS
)
ORDER BY ANIMAL_ID;

-- JOIN 사용
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_INS RIGHT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.ANIMAL_ID IS NULL;