Database

오랜 기간 보호한 동물(1) - LEFT JOIN, SUB QUERY

리차드 2020. 11. 24. 02:47

문제

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

 

코딩테스트 연습 - 오랜 기간 보호한 동물(1)

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

programmers.co.kr

 


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
-------------------------------------------------------------
1단계 : INS를 기준으로 OUTS를 LEFT JOIN 한다
-------------------------------------------------------------
SELECT * FROM ANIMAL_INS A 
 
    LEFT JOIN ANIMAL_OUTS B 
        ON A.ANIMAL_ID = B.ANIMAL_ID
 
 
-------------------------------------------------------------
2단계 : IS NULL 조건을 추가해서 OUTS 테이블에 없는 행만 추린다
-------------------------------------------------------------
SELECT * FROM ANIMAL_INS A 
 
    LEFT JOIN ANIMAL_OUTS B 
        ON A.ANIMAL_ID = B.ANIMAL_ID
 
    WHERE B.ANIMAL_ID IS NULL
 
 
-------------------------------------------------------------
3단계 : 출력해야 하는 컬럼 조건과 정렬 조건을 추가한다
-------------------------------------------------------------
SELECT A.NAME, A.DATETIME FROM ANIMAL_INS A 
 
    LEFT JOIN ANIMAL_OUTS B 
        ON A.ANIMAL_ID = B.ANIMAL_ID 
 
    WHERE B.ANIMAL_ID IS NULL 
    ORDER BY A.DATETIME ASC
 
 
-------------------------------------------------------------
4단계 : 서브쿼리 처리 및 ROWNUM 조건 추가
-------------------------------------------------------------
SELECT * FROM (
 
        SELECT A.NAME, A.DATETIME 
            FROM ANIMAL_INS A 
 
            LEFT JOIN ANIMAL_OUTS B 
                ON A.ANIMAL_ID = B.ANIMAL_ID 
 
            WHERE B.ANIMAL_ID IS NULL 
            ORDER BY A.DATETIME ASC
 
    ) WHERE ROWNUM <= 3
cs