본문 바로가기
Computer/Algorithm_SQL

[Algorithm_SQL] 오랜 기간 보호한 동물(1) (Success)

by HJ0216 2023. 10. 15.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

🙂 확인 사항

1. ANIMAL_INS, ANIMAL_OUTS 테이블

2. 아직 입양을 못 간 동물

3. 가장 오래 보호소에 있었던 동물

4. 3마리

5. 이름과 보호 시작일 조회

6. 보호 시작일 기준 오름차순 정렬

 

 

📝 Language: Oracle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT * 
  FROM (
        SELECT NAME, 
               DATETIME
          FROM ANIMAL_INS
         WHERE ANIMAL_ID NOT IN (
                                SELECT ANIMAL_ID 
                                  FROM ANIMAL_OUTS
                             )
      ORDER BY DATETIME
  )
 WHERE ROWNUM<=3
;
 
 

1. NOT IN

    - ANIMAL_OUTS에 없는 ANIMAL_ID 조회

2. ROWNUM

    - ORACLE 내장 가상 컬럼으로 RECORD의 SEQ 부여

    - WHERE가 ORDER보다 실행순서가 빠르므로 INLINE VIEW 활용

 

1
2
3
4
5
6
7
8
9
10
   SELECT AI.NAME, 
          AI.DATETIME
     FROM ANIMAL_INS AI
LEFT JOIN ANIMAL_OUTS AO
       ON AI.ANIMAL_ID = AO.ANIMAL_ID
    WHERE AO.ANIMAL_ID IS NULL
 ORDER BY AI.DATETIME
    FETCH FIRST 3 ROWS ONLY
;
 
 

1. LEFT JOIN + IS NULL

    - ANIMAL_OUTS가 NULL 값 조회

2. FETCH FIRST

    - ORACLE 12C부터 사용 가능

 

* FETCH FIRST

    - 주로 Oracle, PostgreSQL, IBM Db2, Apache Derby와 같은 데이터베이스 시스템에서 지원

* FETCH NEXT

    - 주로 SQL Server, Sybase, MySQL와 같은 데이터베이스 시스템에서 지원

 

지원하는 DB에 따라 구문 변경 유의

 

 

 

🔗 소스 코드
GitHub