SQL - Programmers_1

김재령·2022년 2월 26일
0

DB

목록 보기
8/15
  1. ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.

  2. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는

각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

  1. ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며,

ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

  1. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

    -> animal_outs.animal_id = animal_ins.animal_id

  2. 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

-> animal_outs.date - animal_ins.date 해서 큰 2개의 데이터를 가지고 오면 된다

즉 두개의 테이블에서 date를 뺀 값을 desc한다
--> 별칭은 from에서 지정해 준다
--> from, group by, having, order by, select 순서대로 읽기 때문에 from에 지정하면 뒤에서 사용 가능
--> from -> connect by -> where -> group by -> having -> select -> order by 순서대로 작동된다
--> 그래서 select에서 별칭을 지정하면 having절에서 사용할 수 없다
--> 왜냐하면 구동되는 순서가 having이 먼저이기 때문에 having에선 select에서 정한 별칭이 없기 때문이다

1단계 시간을 뺀 값이 큰 순서대로 정렬하기 (외래키 사용)
select animal_outs.animal_id, animal_outs.animal_name, animal_outs.date - animal_ins.date as time
from animal_outs , animal_ins
where animal_out.animal_id = animal_ins.animal_id
order by time desc;

2단계 테이블에 별칭을 주어 간결하게 만들기
select a.animal_id, a.animal_name, a.date - b.date as time
from animal_outs a , animal_ins b
where a.animal_id = b.animal_id
order by time desc;

3단계 rownum으로 3이하인 row를 출력한다(서브 쿼리를 사용해서 정렬한 내용에서 가져오고 싶은 부분을 자른다)

select a.animal_id, a.name
from (select a.animal_id, a.name, a.datetime - b.datetime as time
from animal_outs a , animal_ins b
where a.animal_id = b.animal_id
order by time desc)a
where rownum < 3;
profile
with me

0개의 댓글