[손에 잡히는 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;
