select 컬럼이름
from 테이블 a
UNION
select 컬럼이름
from 테이블 b
select 컬럼이름
from 테이블 a AS a
inner join 테이블 b AS b
on a.컬럼1 이름=b.컬럼1 AND ... a.컬럼n 이름=b.컬럼n 이름
select 컬럼이름
from 테이블 a AS A
left join 테이블 b AS b
on a.컬럼1 이름=b.컬럼1 이름 AND ... a.컬럼n 이름=b.컬럼n 이름
where b.컬럼이름 IS NULL
코테문제에서 차집합 문제가 나왔다.
join 해야하는건 알겠는데 차집합을 어떻게 표현할지 고민하다 left join으로 합치고 b값이 널인걸 거르면 된다는걸 깨달았다.
스스로 풀었는데 정답이 나와서 매우 기분 좋았다 🥳
Q. 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과
보호 시작일을 조회하는 SQL문 작성하시오.
결과는 보호 시작일 순으로 조회
(정답)
SELECT a.name "NAME", a.datetime "DATETIME"
from animal_ins a left join animal_outs b
on a.animal_id=b.animal_id
where b.datetime is null
order by datetime
limit 3
window_function(argument) over (partition by 그룹 기준 컬럼 order by 정렬 기준)
- window_function : 기능 명 사용 (sum, avg 등)
- argument : 함수에 따라 작성하거나 생략함
- partition by : 그룹을 나누기 위한 기준. group by절과 유사
- order by : window function 을 적용할 때 정렬 할 컬럼 기준
Q. 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하기
select cuisine_type,
restaurant_name,
order_count,
rn "순위"
from
(
select cuisine_type,
restaurant_name,
rank() over (partition by cuisine_type order by order_count desc) rn,
order_count
from
(
select cuisine_type, restaurant_name, count(1) order_count
from food_orders
group by 1, 2
) a
) b
where rn<=3
order by 1, 4

RANK 특징 및 종류
동일한 값에 동일한 순위 부여, 그 다음 순위 건너뜀동일한 값에 동일한 순위 부여, 순위 안건너뜀동일한 값이라도 고유한 순위