Tạo database có tên là banhang và thực hiện chạy các script trong hai file create_table_ban_bang.txt và insert_data_ban_hang.txt để tạo các bảng và dữ liệu.
II. Thực hiện các câu truy vấn sau:
1. Lấy danh sách các nhân viên của cửa hàng có tên là: Santa Cruz Bikes Cách 1 SELECT staff_id, first_name, last_name, stores.store_id, stores.store_id FROM staffs JOIN stores ON staffs.store_id=stores.store_id where store_name='Santa Cruz Bikes'; Cách 2: SELECT staff_id, first_name, last_name, stores.store_id, stores.store_id FROM staffs, stores WHERE stores.store_id=staffs.store_id AND store_name='Santa Cruz Bikes'; 2. Lấy danh sách các sản phẩm (product_name trong products) thuộc loại (cate_name trong cates) (category) là: Mountain Bikes SELECT product_name as 'Tên sản phẩm', category_name as 'Tên loại' FROM products JOIN categories on products.category_id=categories.category_id where category_name='Mountain Bikes'; 3. Lấy danh sách các sản phẩm thuộc thương hiệu (brand) là: Heller SELECT product_id, product_name, FROM products, brands WHERE products.brand_id=brands.brand_id AND brands.brand_name='Heller' 4. Lấy danh sách các sản phẩm có giá tiền nhỏ hơn 149.99 SELECT product_id, product_name, list_price FROM products where list_price<149.99; 5. Lấy danh sách các sản phẩm có năm sản xuất (model year) là 2017 SELECT product_id,product_name FROM products WHERE products.model_year=2017 6. Lấy danh sách các sản phẩm hiện có tại cửa hàng Rowlett Bikes SELECT product_name AS 'Tên sản phẩm', store_name AS 'Tên cửa hàng' from products, stocks, stores WHERE products.product_id=stocks.product_id AND stocks.store_id=stores.store_id AND quantity>0 AND stores.store_name='Rowlett Bikes'; Cách 2: SELECT product_name, quantity, store_name FROM (products JOIN stocks on products.product_id=stocks.product_id) JOIN stores ON stores.store_id=stocks.store_id WHERE store_name='Rowlett Bikes' AND products.product_id NOT IN (SELECT products.product_id FROM (products JOIN stocks on products.product_id=stocks.product_id) JOIN stores on stocks.store_id=stores.store_id WHERE quantity=0); Cách 3 SELECT products.product_id, product_name, quantity, store_name FROM (products JOIN stocks on products.product_id=stocks.product_id) JOIN stores on stocks.store_id=stores.store_id WHERE quantity>0 and store_name='Rowlett Bikes'; 7. Lấy danh sách các sản phẩm không có tại cửa hàng Baldwin Bikes SELECT product_name, products.product_id, stocks.product_id, stocks.store_id, stores.store_id from products, stocks, stores WHERE products.product_id=stocks.product_id AND stocks.store_id=stores.store_id AND quantity=0 AND stores.store_name='Baldwin Bikes'; Cách 2: SELECT product_name FROM products WHERE product_id NOT IN (not in ở điều kiện câu dưới, nghĩa là câu ở hàng thứ 3 trở xuống có nghĩa là lấy các sp có product_id có tại baldwin nên do đó, sd not in để lấy các sp không có tại cửa hàng baldwin) (SELECT products.product_id FROM (products JOIN stocks on products.product_id=stocks.product_id) JOIN stores ON stocks.store_id=stores.store_id WHERE stores.store_name='Baldwin Bikes'); Cách 3: SELECT product_name, store_name FROM (products JOIN stocks ON products.product_id=stocks.product_id) JOIN stores ON stores.store_id=stocks.store_id WHERE store_name='Baldwin Bikes' AND stocks.quantity=0 Cách 4 SELECT product_name, quantity FROM products JOIN stocks ON products.product_id=stocks.product_id) JOIN stores ON stocks.store_id=stores.store_id WHERE store_name='Baldwin Bikes' AND products.product_id NOT IN (SELECT products.product_id FROM (products JOIN stocks ON products.product_id=stocks.product_id) JOIN stores ON stocks.store_id=stores.store_id WHERE quantity>0 AND store_name='Baldwin Bikes'); 8. Lấy danh sách các sản phẩm có số lượng hàng tồn nhỏ hơn 2 tại cửa hàng Baldwin SELECT product_name, products.product_id, stocks.product_id, stocks.store_id, stores.store_id from products, stocks, stores WHERE products.product_id=stocks.product_id AND stocks.store_id=stores.store_id AND quantity<2 AND stores.store_name='Baldwin Bikes'; Cách 2: 9. Lấy danh sách các sản phẩm có số lượng hàng tồn lớn hơn 2 tại cửa hàng Baldwin SELECT product_name, products.product_id, stocks.product_id, stocks.store_id, stores.store_id from products, stocks, stores WHERE products.product_id=stocks.product_id AND stocks.store_id=stores.store_id AND quantity>2 AND stores.store_name='Baldwin Bikes'; Cách 2: SELECT products.product_id, product_name, quantity FROM (products JOIN stocks ON products.product_id=stocks.product_id) JOIN stores ON stocks.store_id=stores.store_id WHERE stores.store_name='Baldwin Bikes' AND quantity>2 ORDER BY quantity (ORDER BY quantity DESC: Sắp xếp theo quantity theo số lượng giảm dần HÀM SUM, MAX, MIN, AVERAGE, COUNT: LÀ HÀM NHÓM 10. Thống kê số lượng hàng tồn của sản phẩm có tên Electra Moto 1 – 2016 tại mỗi cửa hàng SELECT store_name, quantity, product_name FROM stores, stocks, products WHERE stores.store_id=stocks.store_id AND products.product_id=stocks.product_id AND product_name='Electra Moto 1 - 2016'; Cách 2:
SELECT product_name, quantity, store_name
FROM (stores JOIN stocks ON stores.store_id=stocks.store_id) JOIN products ON products.product_id=stocks.product_id WHERE product_name='Electra Moto 1 - 2016' order BY store_name; 11. Lấy danh sách các sản phẩm thuộc loại (category) là: Mountain Bikes và có số lượng hàng tồn nhỏ hơn 5. select product_name, quantity FROM products, stocks, categories where products.product_id=stocks.product_id AND categories.category_id=products.category_id AND quantity<5 AND category_name='Mountain Bikes' ORDER BY quantity DESC; 12. Lấy danh sách những khách hàng đã từng mua hàng tại cửa hàng Rowlett Bikes SELECT first_name, last_name, customers.customer_id, orders.customer_id, orders.store_id, stores.store_id FROM customers, orders, stores where customers.customer_id=orders.customer_id AND stores.store_id=orders.store_id AND store_name='Rowlett Bikes' and order_status=4; Cách 2: SELECT first_name, last_name, store_name FROM (customers JOIN orders ON customers.customer_id=orders.customer_id) JOIN stores on orders.store_id=stores.store_id WHERE store_name='Rowlett Bikes'; 13. Lấy danh sách những khách hàng có tổng giá trị đơn hàng (chưa giảm giá) lớn hơn 3000 ($). ($). Thông tin hiển thị gồm họ, tên, email, tổng giá trị đơn hàng. SELECT first_name, last_name, orders.order_id AS 'Đơn hàng', sum(list_price*quantity) AS 'Tổng tiền' FROM (orders JOIN order_items on orders.order_id=order_items.order_id) JOIN customers ON orders.customer_id=customers.customer_id GROUP BY orders.order_id, last_name, first_name (gr by last and first để hiện ra khách hàng HAVING sum(list_price*quantity)>3000 order BY sum(list_price*quantity); ;HAVING VÀ WHERE LÀ CÂU ĐIỀU KIỆN, TRONG ĐÓ, HAVING LÀ CÂU ĐIỀU KIỆN NHÓM 14. Lấy danh sách đơn hàng có tổng số tiền được giảm giá (discount) lớn hơn 50 ($) (discount được tính theo tỉ lệ %. Ví dụ: 0.2 = 20%, 0.05 = 5%, . . . .) SELECT orders.order_id AS 'Đơn hàng', sum(quantity*list_price*(1-discount)) as 'Tổng tiền' FROM (orders JOIN order_items ON orders.order_id=order_items.order_id) GROUP BY orders.order_id HAVING sum(quantity*list_price*(1-discount))>500 ORDER BY sum(quantity*list_price*(1-discount)); 15. Thống kê số lượng đơn hàng giao dịch thành công (order_status = 4) tại mỗi cửa hàng trong tháng 3/2016 (thống kê theo order_date). Thông tin hiển thị: Tên cửa hàng, tổng số lượng đơn hàng. (???) SELECT stores.store_id, store_name, COUNT(order_id) as 'Số lượng đơn hàng tại mỗi cửa hàng' FROM stores JOIN orders ON stores.store_id=orders.store_id WHERE order_status=4 AND year(order_date)=2016 AND month(order_date)=03 group BY stores.store_id, store_name order BY stores.store_id; 16. Thống kê số lượng đơn hàng bị hủy tại mỗi cửa hàng (biết đơn hàng bị hủy có order_status = 3) SELECT order_items.order_id, product_name FROM (orders JOIN order_items ON orders.order_id=order_items.order_id) JOIN products ON order_items.product_id=products.product_id WHERE order_status=3 17. Thống kê số lượng đơn hàng giao dịch thành công của mỗi nhân viên 18. Thống kê số lượng đơn hàng bị hủy của mỗi nhân viên trong năm 2017 19. Thống kế số lượng đơn hàng giao dịch thành công của mỗi nhân viên trong tháng 3/2016. Thông tin hiển thị gồm mã nhân viên (staff_id), họ tên (first_name, last_name), số lượng đơn hàng 20. Lấy danh sách những nhân viên có số lượng đơn hàng lớn hơn 20 trong tháng 1/2017. Thông tin hiển thị gồm mã nhân viên (staff_id), họ tên (first_name, last_name), số lượng đơn hàng.