Nội dung thực hành
- Truy vấn đơn bảng và đa bảng
- Sử dụng mệnh đề WHERE và HAVING
- Sắp xếp dữ liệu với ORDER BY (ASC/DESC)
- Kết hợp bảng với JOIN
- Nhóm dữ liệu bằng GROUP BY
- Giới hạn kết quả với LIMIT
Bài tập 1: Truy vấn sách
Tìm sách thuộc thể loại "Fiction" xuất bản sau năm 2020 với giá dưới 30. Bảng publications chứa: pub_id, title, writer, pub_year, cost, genre.
SELECT title, writer
FROM publications
WHERE pub_year > 2020
AND genre = 'Fiction'
AND cost < 30;
Bài tập 2: Sắp xếp nhân viên
Sắp xếp thông tin nhân viên từ bảng staff (staff_id, full_name, dept, start_date, income) theo phòng ban tăng dần, ngày vào giảm dần, lương tăng dần.
SELECT *
FROM staff
ORDER BY dept ASC, start_date DESC, income ASC;
Bài tập 3: Lọc sự kiện
Lấy sự kiện có điểm >5 từ bảng activities (activity_id, activity_name, type, begin_date, participants, score), sắp xếp theo loại, ngày bắt đầu, điểm và số người tham gia.
SELECT *
FROM activities
WHERE score > 5
ORDER BY type ASC, begin_date DESC, score ASC, participants DESC;
Bài tập 4: Sắp xếp sản phẩm
Sắp xếp sản phẩm từ bảng items (item_id, item_name, group, unit_price, stock) theo nhóm giảm dần, giá tăng dần, tồn kho giảm dần.
SELECT *
FROM items
ORDER BY group DESC, unit_price ASC, stock DESC;
Bài tập 5: Nhân viên bán hàng
Tìm nhân viên phòng "Sales" với lương >5000, sắp xếp theo điểm hiệu suất giảm dần, ngày vào tăng dần, lương giảm dần. Giới hạn 20 kết quả từ bảng sales_team (sales_id, salesperson, division, employment_date, compensation, performance_score).
SELECT *
FROM sales_team
WHERE division = 'Sales' AND compensation > 5000
ORDER BY performance_score DESC, employment_date ASC, compensation DESC
LIMIT 20;
Bài tập 6: Phim hài
Tìm phim hài (2010-2023) có điểm >7 và thời lượng <120 phút, sắp xếp theo thời lượng tăng dần, điểm giảm dần. Giới hạn 15 kết quả từ bảng films (film_id, title, category, year_released, duration, rating_value).
SELECT *
FROM films
WHERE category ='Comedy'
AND year_released BETWEEN 2010 AND 2023
AND rating_value > 7
AND duration < 120
ORDER BY duration ASC, rating_value DESC
LIMIT 15;
Bài tập 7: Lương trung bình phòng ban
Tính lương trung bình theo phòng ban từ bảng divisions (div_id, div_name) và staff_members (member_id, member_name, div_id, pay), sắp xếp theo lương trung bình và tên phòng ban.
SELECT
d.div_name,
AVG(s.pay) AS avg_pay
FROM divisions d
JOIN staff_members s ON d.div_id = s.div_id
GROUP BY d.div_id, d.div_name
ORDER BY avg_pay ASC, d.div_name ASC;
Bài tập 8: Tổng sản phẩm bán ra
Tính tổng sản phẩm bán được theo cửa hàng từ bảng outlets (outlet_id, outlet_name, location) và sales_records (record_id, outlet_id, item_name, qty_sold), sắp xếp theo số lượng giảm dần và tên cửa hàng.
SELECT
o.outlet_name,
o.location,
SUM(s.qty_sold) AS total_sold
FROM outlets o
JOIN sales_records s ON o.outlet_id = s.outlet_id
GROUP BY o.outlet_id, o.outlet_name, o.location
ORDER BY total_sold DESC, o.outlet_name ASC;