
✔조건 : 서브쿼리의 결과 테이블이 1개의 열, 1개의 행만 가져야한다.(단일 값)
SELECT name, price, (
SELECT MAX(price) FROM products // products 테이블의 max price값 출력하는 열
)
FROM products
WHERE price > 867;
SELECT name, price, (
SELECT price FROM products WHERE id = 3
) AS id_3_price // id가 3인 price를 쭉 출력하는 행
FROM products
WHERE price > 867;
이렇게만 하면 의미없이 한 가지 값이 모든 열에 쭉 출력된다.
from 절에 서브쿼리를 사용하는 이유를 예제를 통해서 알아보자
orders 테이블에서 모든 사용자의 주문 횟수의 평균을 알아보는 쿼리를 보자
SELECT AVG(COUNT(*)) // 오류!!
FROM orders
GROUP BY user_id;
aggregate 함수는 저렇게 내부에 서로 파라미터로 사용할 수 없다
SELECT AVG(order_count)
FROM (
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
) AS p // 서브쿼리로 from을 할때 AS로 이름을 붙여주는건 필수다
SELECT id
FROM orders
WHERE product_id IN (
SELECT id FROM products WHERE price / weight > 50
);
SELECT name, price
FROM phones
WHERE price > (
SELECT price FROM phones WHERE name = 'S5620 Monte'
);
SELECT name, price
FROM products
WHERE price > ALL (
SELECT price FROM products WHERE department = 'Industrial'
);
SELECT name, price
FROM products
WHERE price > SOME (
SELECT price FROM products WHERE department = 'Industrial'
);
SELECT DISTINCT department
FROM products;
SELECT DISTINCT department, name
FROM products;
SELECT COUNT(DISTINCT manufacture)
FROM phones;