본문 바로가기
갭알 ☠️/SQL

[프로그래머스/SQL] 오랜 기간 보호한 동물(1) (MySQL, Oracle)

by Niyaoh 2022. 8. 11.

https://school.programmers.co.kr/learn/courses/30/lessons/59044

 

프로그래머스

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

programmers.co.kr

ANIMAL_INS 테이블

NAME TYPE NULLABLE INFO
ANIMAL_ID VARCHAR(N) FALSE 아이디
ANIMAL_TYPE VARCHAR(N) FALSE 종류
DATETIME DATETIME FALSE 보호 시작일
INTAKE_CONDITION VARCHAR(N) FALSE 보호 시작 당시 상태
NAME VARCHAR(N) TRUE 이름
SEX_UPON_INTAKE VARHCAR(N) FALSE 성별 및 중성화 여부

ANIMAL_OUTS 테이블

NAME TYPE NULLABLE INFO
ANIMAL_ID VARCHAR(N) FALSE 아이디
ANIMAL_TYPE VARCHAR(N) FALSE 종류
DATETIME DATETIME FALSE 보호 시작일
NAME VARCHAR(N) TRUE 이름
SEX_UPON_INTAKE VARHCAR(N) FALSE 성별 및 중성화 여부

 

[문제] 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

 

 

▼ 해석 및 풀이

MySQL

/*
[테이블] : ANIMAL_INS(기준), ANIMAL_OUTS
[컬럼명] : NAME, DATETIME
[조건] : 두 테이블을 서로 조인, OUTS 테이블에 없는 데이터들 중 DATETIME이 가장 오래된 데이터 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
LIMIT 3;

Oracle

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;

댓글