[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.
Orders
테이블에는 주문번호, 고객 ID, 주문 날짜가 저장되어 있다.OrderItems
테이블에는 각 주문에 대한 상세정보가 저장되어 있다.Customers
테이블에는 실제 고객 정보가 저장되어 있다.RGAN01
제품을 구매한 고객의 목록을 출력해야 한다면 아래와 같은 순서로 쿼리를 진행해야 한다.RGAN01
을 주문한 주문 번호를 가져온다.RGAN01
을 주문한 주문 번호를 가져온다.SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01';
SELECT cust_id
FROM Orders
WHERE order_num IN (20007,20008);
SELECT cust_id
FROM Orders
WHERE order_num IN ( SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01')
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id In (1000000004, 1000000005);
SELECT cust_name, cust_contact
FROM Customers
WHERE cust_id In (SELECT cust_id
FROM Orders
WHERE order_num IN ( SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01'))
Customers
테이블에 있는 고객별로 출력하고자 한다.Orders
테이블에는 주문 정보, 고객 ID가 함께 저장되어 있다.Customers
테이블에서 고객 목록을 가져온다.Orders
테이블에서 각각의 고객이 주문한 수를 센다.Customers
테이블에서 고객 목록을 가져온다.SELECT cust_name
FROM Customers;
Orders
테이블에서 각각의 고객이 주문한 수를 센다.SELECT cust_id, COUNT(*) as orders
FROM Orders
GROUP BY cust_id
SELECT cust_name,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
ORDER BY cust_name
Orders.cust_id = Customers.cust_id
는 Orders
테이블에 있는 cust_id와 Customers
테이블의 cust_id 정보가 일치하는지 비교한다.OrderItems
테이블에서 조건에 맞는 주문 번호(order_num
)를 가져온 다음, Orders
테이블에서 주문 번호와 일치하는 주문에 대한 고객 ID(cust_id
)를 검색한다.SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE item_price >= 10)
BR01
제품이 주문된 날짜를 알아야 한다. 서브쿼리를 이용하여 OrderItems
테이블에서 prod_id
가 BR01
인 주문 항목을 확인한다. 그리고 Orders
테이블에서 각각의 고객 ID(cust_id
)와 주문 날짜(order_date
)를 가져온 다음 결과를 주문 날짜로 정렬하는 SQL 문을 작성하라.SELECT cust_id, order_date
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'BR01')
ORDER BY order_date;
prod_id
가 BR01
을 구매한 모든 고객의 이메일 주소(Customers
테이블에서 cust_email
)를 가져오자, 가장 안족에 있는 쿼리는 OrderItems
에서 order_num
을 반환하고 중간에 있는 쿼리는 Customers
테이블에서 cust_id
를 반환하는 SELECT 문이 포함된다.SELECT cust_email
FROM Customers
WHERE cust_id IN (SELECT cust_id
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'BR01'))
Orders
테이블에서 cust_id
)와 서브쿼리를 사용하여 각각의 고객에 대한 총주문량을 total_ordered
로 가져오는 SQL 문을 작성하라. 그 결과를 가장 큰 수부터 적은 순서대로 정렬하라. 이전에는 주문 합계를 계산하기 위해 SUM()을 사용했다는 점을 기억하자.SELECT cust_id,
(SELECT SUM(quantity)
FROM OrderItems
WHERE Orders.order_num = Orderitems.order_num) AS total_ordered
FROM Orders
ORDER BY total_ordered DESC;
Products
테이블에서 모든 제품명(prod_name
)과 quant_sold
를 가져오는 SQL 문을 작성하라. 여기서 quant_sold
는 판매된 항목의 총 수량이 담긴 계산 필드다(OrderItems
테이블에서 서브쿼리와 SUM(quantity
)를 이용해 검색).SELECT prod_name,
(SELECT SUM(order_item)
FROM OrderItems
WHERE (Products.prod_id = OrderItems.prod_id)) AS quant_sold
FROM Products;