본문 바로가기
개발일지/SQL

SQL 기초 25 서브쿼리 (sub query)

by 다니엘의 개발 이야기 2022. 8. 31.
320x100

# 서브 쿼리

 

SELECT title, rental_rate

FROM film

WHERE rental_rate > 

(SELECT AVG(rental_rate) FROM film)


# 문제1

 

단계1

# rental 테이블에서 rental_date가 2005년 5월 29일 부터 30일까지의 값을 가져와 줘

SELECT * FROM rental

WHERE rental_date BETWEEN '2005-05-29' AND '2005-05-30'

 

단계2

# inventory 테이블의 film_id 컬럼 값중에서

SELECT inventory.film_id

# rental 테이블과 일치하는 것 중에서

FROM rental

# inventory 컬럼과 결합해줘

# 그리고 결합한 값중에서 inventory_id 와 rental테이블의 inventory_id 값이 일치하는 것을 가져와줘

INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id

# 가져올 때는 rental 테이블의 return_date의 값이 2005년 5월 29일부터 30일까지의 값으로 가져와줘

WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'

 

단계3

# film_id컬럼과 title 컬럼 값 중에서

SELECT film_id, title

# film 테이블에서 가져온 값을 기반으로

FROM film

# film_id가 단계2 필터에 들어있는 값에 해당하는 것을 리턴해줘

WHERE film_id IN 

# 단계2는 모두 괄호로 묶어서 필터로 사용

(SELECT inventory.film_id

FROM rental

INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id

WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30')

# 최종 결과물을 film_id 기준으로 정렬해줘

ORDER BY film_id

 


#문제 2

 

11달러를 초과하여 지불한 사람의 성과 이름을 알고 싶다.

 

SELECT first_name, last_name

FROM customer AS c

WHERE EXISTS

(SELECT * FROM payment AS p

WHERE p.customer_id = c.customer_id

AND amount > 11)

300x250