Trang chủ>  Blog >  Chia sẻ kinh nghiệm >  50+ Bài tập SQL thực tế – Luyện truy vấn giỏi như chuyên gia

50+ Bài tập SQL thực tế – Luyện truy vấn giỏi như chuyên gia


Tổng hợp 50+ bài tập SQL cơ bản đến nâng cao kèm lời giải chi tiết. Cùng MCI khám phá bí quyết luyện SQL nhanh, hiệu quả và áp dụng ngay vào công việc.

  311 lượt xem

Nội dung bài viết

Bạn có biết rằng 80% kỹ sư dữ liệu, nhà phân tích, và developer sử dụng SQL mỗi ngày?

Thế nhưng phần lớn người học lại dừng ở “SELECT * FROM” mà không biết cách xử lý bài toán thực tế.

Nếu bạn đang tìm bài tập SQL có lời giải, kịch bản thực tế, và hướng dẫn dễ hiểu, thì bài viết này chính là thứ bạn cần. MCI đã tổng hợp 50+ bài tập SQL thực tế có lời giải, giúp bạn đi từ cơ bản đến chuyên sâu, và hiểu được SQL vận hành như thế nào trong doanh nghiệp.

1. SQL là gì? Vì sao học SQL là kỹ năng bắt buộc trong thời đại dữ liệu

SQL (Structured Query Language) là ngôn ngữ truy vấn dữ liệu – “ngôn ngữ chung” của mọi hệ thống cơ sở dữ liệu như MySQL, PostgreSQL, SQL Server hay Oracle.

Nếu Python là công cụ “phân tích dữ liệu”, thì SQL chính là chìa khóa mở kho dữ liệu để bạn trích xuất thông tin, tính toán và trực quan hóa.

Thực tế:

  • 9/10 doanh nghiệp sử dụng SQL trong hệ thống dữ liệu nội bộ.
  • Ngay cả AI như ChatGPT, Power BI hay Google Data Studio đều dựa vào SQL khi cần truy xuất dữ liệu lớn.

bai-tap-sql

2. Học SQL bắt đầu từ đâu? – Đừng vội code, hãy hiểu cách dữ liệu vận hành

Trước khi nhảy vào bài tập, bạn cần hiểu 3 khái niệm nền tảng:

  • Database (Cơ sở dữ liệu): nơi lưu trữ dữ liệu có cấu trúc (bảng, hàng, cột).
  • Table (Bảng): giống như Excel, mỗi bảng chứa dữ liệu cho một chủ đề.
  • Query (Truy vấn): lệnh bạn viết để “hỏi” hệ thống, ví dụ: “Cho tôi biết doanh thu tháng 10”.

Ví dụ cơ bản:

SELECT name, revenue

FROM customers

WHERE revenue > 100000;

→ Kết quả: Danh sách khách hàng có doanh thu > 100.000.

Xem thêm:

Nếu bạn mới bắt đầu, hãy luyện theo các nhóm bài tập sau để nắm chắc cấu trúc cơ bản.

3.1 Làm quen với SQL cơ bản – SELECT & WHERE

Bài 1: Hiển thị toàn bộ bảng nhân viên

→SELECT * FROM employees;

Bài 2: Lọc nhân viên làm việc tại phòng "Sales"

→SELECT name, department FROM employees WHERE department = 'Sales';

Bài 3: Tìm nhân viên có lương > 15 triệu

→SELECT name, salary FROM employees WHERE salary > 15000000;

Bài 4: Hiển thị khách hàng ở Hà Nội

→SELECT name, city FROM customers WHERE city = 'Hanoi';

Bài 5: Lấy 5 sản phẩm có giá cao nhất

→SELECT product_name, price FROM products ORDER BY price DESC LIMIT 5;

Ứng dụng thực tế: Báo cáo doanh thu theo vùng, lọc danh sách khách hàng tiềm năng.

3.2 Làm chủ sắp xếp, phân loại với ORDER BY, DISTINCT, LIMIT

Bài 6: Hiển thị tên khách hàng (không trùng lặp)

→SELECT DISTINCT customer_name FROM customers;

Bài 7: Lấy 10 khách hàng đầu tiên theo alphabet

→SELECT * FROM customers ORDER BY customer_name ASC LIMIT 10;

Bài 8: Lấy sản phẩm có giá thấp nhất

→SELECT product_name, price FROM products ORDER BY price ASC LIMIT 1;

3.3 Tổng hợp dữ liệu thông minh – GROUP BY & HAVING

Bài 9: Tính tổng lương theo phòng ban

→ SELECT department, SUM(salary) AS total_salary

FROM employees

GROUP BY department;

Bài 10: Tính lương trung bình từng phòng

→ SELECT department, AVG(salary) AS avg_salary

FROM employees

GROUP BY department;

Bài 11: Tìm phòng có lương trung bình > 20 triệu

→ SELECT department, AVG(salary) AS avg_salary

FROM employees

GROUP BY department

HAVING AVG(salary) > 20000000;

Bài 12: Đếm số nhân viên mỗi chức vụ

→ SELECT job_title, COUNT(*) AS total

FROM employees

GROUP BY job_title;

3.4 JOIN – Kết nối dữ liệu giữa các bảng

Bài 13: Liệt kê tên khách hàng và tổng giá trị đơn hàng

→ SELECT c.customer_name, SUM(o.amount) AS total_order

FROM customers c

JOIN orders o ON c.customer_id = o.customer_id

GROUP BY c.customer_name;

Bài 14: Tìm khách hàng chưa từng đặt hàng

→ SELECT c.customer_name

FROM customers c

LEFT JOIN orders o ON c.customer_id = o.customer_id

WHERE o.order_id IS NULL;

Bài 15: Hiển thị sản phẩm và danh mục tương ứng

→ SELECT p.product_name, c.category_name

FROM products p

JOIN categories c ON p.category_id = c.category_id;

Bài 16: Lấy doanh thu mỗi nhân viên bán hàng

→ SELECT e.name, SUM(o.amount) AS total_sales

FROM employees e

JOIN orders o ON e.employee_id = o.sales_rep

GROUP BY e.name;

tai-lieu-sql-co-ban

3.5 Subquery & CTE – SQL tư duy nhiều tầng

Bài 17: Tìm nhân viên có lương cao hơn trung bình công ty

→ SELECT name, salary

FROM employees

WHERE salary > (SELECT AVG(salary) FROM employees);

Bài 18: Doanh thu theo tháng bằng CTE

→ WITH monthly_sales AS (

  SELECT MONTH(order_date) AS month, SUM(amount) AS revenue

  FROM orders

  GROUP BY MONTH(order_date)

)

SELECT * FROM monthly_sales WHERE revenue > 5000000;

Bài 19: Tìm sản phẩm không bán trong 90 ngày gần nhất

→ SELECT product_name

FROM products

WHERE product_id NOT IN (

  SELECT DISTINCT product_id FROM orders

  WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)

);

3.6 SQL thực tế trong doanh nghiệp – Case Study

Bài 20: Tính doanh thu theo tháng

→ SELECT MONTH(order_date) AS month, SUM(amount) AS revenue

FROM orders

GROUP BY MONTH(order_date);

Bài 21: Tính tỷ lệ chuyển đổi quảng cáo

→ SELECT campaign_name, SUM(conversions)/SUM(clicks)*100 AS conversion_rate

FROM ads

GROUP BY campaign_name;

Bài 22: Tính lợi nhuận ròng theo sản phẩm

→ SELECT product_name, SUM(revenue - cost) AS net_profit

FROM products

GROUP BY product_name;

Bài 23: Tính doanh thu trung bình mỗi khách hàng

→ SELECT customer_id, AVG(amount) AS avg_order_value

FROM orders

GROUP BY customer_id;

Bài 24: Tính ROAS (Return On Ad Spend)

→ SELECT campaign, SUM(revenue)/SUM(cost) AS ROAS

FROM ads

GROUP BY campaign;

3.7 Window Function – Phân tích nâng cao

Bài 25: Phân hạng doanh thu nhân viên trong team

→ SELECT name, department,

RANK() OVER (PARTITION BY department ORDER BY SUM(amount) DESC) AS rank_in_team

FROM employees e

JOIN orders o ON e.employee_id = o.sales_rep

GROUP BY name, department;

Bài 26: Tính doanh thu cộng dồn (cumulative)

→ SELECT order_date, SUM(amount) OVER (ORDER BY order_date) AS total_revenue

FROM orders;

Bài 27: Trung bình trượt 3 tháng gần nhất

→ SELECT order_date, AVG(amount) OVER (ORDER BY order_date ROWS 3 PRECEDING) AS avg_3months

FROM orders;

bi-quyet-dung-sql

4. Bộ bài tập nâng cao – Tự thử thách bản thân

Các bài dưới đây bạn nên tự viết và tối ưu truy vấn:

  • Tìm top 3 khách hàng có tổng doanh thu cao nhất trong năm.
  • Tính phần trăm khách quay lại mua hàng (Repeat Rate).
  • Xác định khách hàng chưa mua hàng 6 tháng.
  • Đếm số sản phẩm tồn kho trên 90 ngày.
  • Phân tích tăng trưởng doanh thu theo quý.
  • Xác định nhân viên có doanh số cao gấp 2 lần trung bình phòng ban.
  • Tạo bảng tổng hợp tháng – doanh thu – khách hàng mới.
  • Đếm số ngày không có đơn hàng.
  • Tính doanh thu trung bình rolling 7 ngày.
  • Báo cáo sản phẩm best-seller từng tháng.
  • Phân tích hiệu quả kênh marketing đa nền tảng.
  • Tính tỷ lệ hủy đơn hàng.
  • So sánh doanh thu giữa 2 năm gần nhất.
  • Xác định sản phẩm mang lại lợi nhuận cao nhất.
  • Đếm số khách hàng mua hàng nhiều hơn 5 lần.
  • Báo cáo lợi nhuận theo vùng.
  • Tính doanh số trung bình mỗi nhân viên.
  • Phân hạng khách hàng theo tổng chi tiêu (VIP – Regular – New).
  • Tính tốc độ tăng trưởng doanh thu hằng tháng.
  • Tổng hợp doanh số theo quốc gia.
  • Xác định ngày có doanh thu cao nhất lịch sử.
  • Tính số khách hàng “ngủ đông” > 12 tháng.
  • Tạo dashboard SQL tổng hợp cho Ban Giám đốc.

5. 10 lỗi phổ biến khi làm bài tập SQL

Lỗi thường gặp Cách khắc phục
Viết SELECT * quá nhiều Chỉ chọn cột cần thiết để tăng tốc độ truy vấn
Quên điều kiện JOIN Luôn xác định khóa chung (foreign key)
GROUP BY sai cột Nhớ rằng mọi cột không nằm trong hàm tổng hợp phải có trong GROUP BY
Nhầm INNER JOIN và LEFT JOIN Học bằng sơ đồ Venn – dễ hiểu hơn code
Dữ liệu NULL làm sai kết quả Dùng COALESCE() để xử lý giá trị rỗng
Lạm dụng Subquery Hãy thử CTE hoặc JOIN thay thế
Thiếu chỉ mục (index) Khi xử lý dữ liệu lớn, thêm index giúp query nhanh hơn
Không kiểm tra dữ liệu gốc Trước khi debug query, hãy xem cấu trúc bảng
Không đặt bí danh (alias) Sử dụng AS giúp code dễ đọc và tái sử dụng
Không test với dataset nhỏ Test trước với mẫu nhỏ để tránh lỗi logic

Tự học SQL giúp bạn hiểu cú pháp nhưng học cùng mentor tại MCI Việt Nam giúp bạn làm chủ tư duy dữ liệu thực chiến.

Khóa “Phân tích dữ liệu và SQL thực chiến” tại MCI được thiết kế cho cả người mới và người đang làm trong lĩnh vực data.

Bạn sẽ:

  • Học qua hơn 100 bài tập SQL có lời giải thực tế.
  • Làm dự án kết hợp Power BI + SQL + Python.
  • Được mentor hỗ trợ 1:1, feedback từng bài.
  • Có chứng chỉ và portfolio để ứng tuyển Data Analyst.

Đăng ký ngay tại mcivietnam.com để nhận tài liệu “50+ Bài tập SQL thực chiến” và ưu đãi học phí sớm nhất.

Thông tin liên hệ:

  • Website: https://www.mcivietnam.com/
  • Tư vấn khóa học: 0352.433.233
  • Tư vấn đào tạo doanh nghiệp: 0352.433.233
  • CSKH: cskh@mcivietnam.com
Chương trình đào tạo: Phân tích dữ liệu, Khoa học dữ liệu, Kĩ sư dữ liệu, Lập trình ứng dụng.
Chất lượng nhất - Uy tín nhất - Nhiều học viên tin tưởng nhất
Hơn 8000 học viên ưu tú đã tốt nghiệp
Đăng ký tư vấn khóa học

*Vui lòng nhập số điện thoại của bạn

*Vui lòng nhập họ tên của bạn

*Vui lòng chọn địa điểm học

*Vui lòng chọn giới tính

*Vui lòng chọn 1 trường


Các bài viết liên quan


Làm chủ SQL – Nền tảng phân tích dữ liệu trong thời đại số

Trong bối cảnh doanh nghiệp vận hành dựa trên dữ liệu, SQL (Structured Query Language) đã trở thành kỹ năng không thể thiếu đối với mọi vị trí liên quan đến phân tích, báo cáo và ra quyết định. Nếu Excel giúp bạn tính toán trong phạm vi một file, thì SQL cho phép truy cập trực tiếp vào cơ sở dữ liệu của doanh nghiệp, xử lý hàng triệu dòng dữ liệu chỉ trong vài giây. Khóa học SQL tại Học viện Công nghệ MCI được thiết kế cho người mới bắt đầu, giúp học viên nắm vững kỹ năng truy vấn, phân tích và xử lý dữ liệu thực tế – nền tảng cần thiết để học Power BI, Python và các kỹ năng Data Analyst chuyên sâu.

Tài liệu tự học n8n mới nhất 2025 | Bí quyết tự động hóa thông minh

Khám phá bộ tài liệu n8n cập nhật mới nhất 2025: hướng dẫn cài đặt, ví dụ workflow thực tế và template sẵn dùng để triển khai tự động hóa trong 30 phút.

🔥 SQL Server Management Studio (SSMS) – Trái tim của thế giới cơ sở dữ liệu 🧠💾

💡 Nếu Python là ngôn ngữ để phân tích dữ liệu, thì SQL Server Management Studio (SSMS) là “bàn điều khiển trung tâm” giúp bạn quản lý, giám sát và tương tác trực tiếp với dữ liệu trong doanh nghiệp. Dù bạn là Data Analyst, Developer hay Admin – SSMS là công cụ không thể thiếu trong mọi hệ thống dữ liệu chuyên nghiệp.

Các bài viết liên quan