# 서브쿼리 개요
## 미션
---
다음 카페 DB를 가지고, 서브쿼리 관련 문제를 푸시오.
#### 카페 DB 구조도

#### 카페 DB 데이터

## 개념
---
#### 서브쿼리란
쿼리 속 또 다른 쿼리다. 서브쿼리는 먼저 수행된 쿼리 결과를 가지고, 다시 쿼리를 수행할 때 사용한다.

다음은 서브쿼리의 사용 예로, 수학 점수가 평균 이상인 학생을 조회한다. 서브(내부) 쿼리에서 먼저 평균이 계산 되고, 그 결과를 가지고 메인(외부) 쿼리가 동작하게 된다.

#### 다양한 서브쿼리
서브쿼리는 다양한 위치에 올 수 있는데, 각 위치에 따라 서브쿼리는 적절한 형태를 가져야 한다.

SELECT 절 서브쿼리는 반드시, 그 결과가 단일값(1x1)이어야 한다. 때문에 스칼라 쿼리로 불린다.

이와 달리 FROM 절과 JOIN 절의 서브쿼리는 인라인 뷰로 불리며, 결과 크기에 제약이 없다. 하지만 반드시 별칭(alias)을 달아야 한다.

서브쿼리 중 가장 많이 사용되는 위치는 WHERE 절이다. WHERE 절 서브쿼리의 경우, 연산자에 따라 그 결과가 단일값(1x1), 또는 N행 1열(Nx1)이어야 한다.

## 실습
---
#### 1. 음료(beverages)의 이름 및 가격과 함께, 가장 비싼 음료와의 가격 차이를 조사하려 한다. 주어진 두 쿼리를 조합하여 이를 구하시오. (SELECT 절 서브쿼리를 사용할 것)

#### 2. 주문내역(order_details)로부터 주문 별 음료 개수의 평균을 조회하려 한다. 주어진 쿼리를 조합하여 이를 구하시오. (FROM 절 서브쿼리를 사용할 것)

#### 3. 주문내역(order_details)로부터 음료 별 주문 개수를 조회하려 한다. 주어진 두 쿼리를 조합하여 이를 구하시오. (JOIN 절 서브쿼리를 활용할 것)

#### 4. 평균 가격보다 비싼 음료(beverages)를 다음과 같이 조회하려 한다. 주어진 두 쿼리를 조합하여 이를 구하시오. (WHERE 절 서브쿼리를 사용할 것)

## 훈련
---
#### 🔥 다음 쿼리 A, B, C 가 동작하지 않는 이유를 설명하시오.
A)
```
SELECT
name AS "음료명",
price AS "가격",
price - (
-- SELECT 절 서브쿼리
SELECT
MAX(price), 123
FROM
beverages
) AS "최대 가격과의 차이"
FROM
beverages
;
```
B)
```
SELECT
AVG(SUM(count))
FROM
order_details
GROUP BY
order_id
;
```
C)
```
SELECT
*
FROM
(
-- FROM 절 서브쿼리
SELECT
order_id, -- 주문번호
SUM(count) -- 주문 별 음료 개수
FROM
order_details
GROUP BY
order_id
)
;
```