SELECT thôi là chưa đủ: Phân loại các kiểu Query từ "vỡ lòng" đến "thượng thừa"
1. Simple Query (Truy vấn đơn vị)
Đây là kiểu "hello world" của SQL. Bạn chỉ lấy dữ liệu từ một bảng duy nhất, dùng các bộ lọc cơ bản.
- Nhiệm vụ: Lấy ra danh sách user, tìm sản phẩm theo ID...
- Từ khóa:
SELECT,FROM,WHERE,ORDER BY,LIMIT.
SELECT name, email FROM users WHERE status = 'active' ORDER BY created_at DESC;
2. Aggregate Query (Truy vấn gộp)
Khi sếp không muốn xem từng dòng dữ liệu mà muốn xem con số tổng quát, đây là lúc bạn cần dùng các hàm gom nhóm.
- Nhiệm vụ: Tính tổng doanh thu tháng, đếm số lượng đơn hàng của từng khách hàng.
- Từ khóa:
COUNT,SUM,AVG,MIN,MAX, và đặc biệt làGROUP BY.
Mẹo nhỏ: Nếu muốn lọc dữ liệu sau khi đã gộp nhóm, hãy dùng HAVING thay vì WHERE nhé!
3. Join Query (Truy vấn liên kết)
Trong Database quan hệ, dữ liệu thường bị chia nhỏ ra nhiều bảng (Normalization). Để lấy được thông tin đầy đủ, bạn phải "nối" chúng lại. Đây là phần dễ gây lú nhất cho người mới.
- Inner Join: Chỉ lấy những phần mà cả 2 bảng đều có.
- Left Join: Lấy hết bảng bên trái, bảng bên phải có thì khớp, không có thì để NULL. (Đây là loại hay dùng nhất trong Backend).
- Right Join / Full Join: Ít dùng hơn, nhưng vẫn cần biết để xử lý các case đặc thù.

4. Subqueries & Nested Queries (Truy vấn lồng)
Đôi khi, một câu lệnh đơn lẻ không giải quyết được vấn đề. Bạn cần kết quả của câu query này để làm đầu vào cho câu query kia.
- Nhiệm vụ: Tìm những user có đơn hàng cao hơn mức trung bình của toàn hệ thống.
- Cấu trúc: Một lệnh
SELECTnằm bên trong một lệnhSELECTkhác.
SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders WHERE total > 1000);
5. Advanced Queries: Window Functions (Truy vấn cửa sổ)
Đây là "vũ khí hạng nặng" dành cho các bài toán phân tích dữ liệu phức tạp mà không muốn làm thay đổi số dòng trả về của kết quả (không giống như GROUP BY).
- Nhiệm vụ: Xếp hạng (Rank) nhân viên theo lương trong từng phòng ban, tính tổng lũy kế (Running Total).
- Từ khóa:
OVER(),PARTITION BY,ROW_NUMBER(),RANK(),LEAD(),LAG().
6. Tổng kết: Chọn "vũ khí" nào cho đúng?
Để trở thành một chuyên gia, bạn cần biết khi nào nên dùng loại nào:
| Loại Query | Khi nào dùng? | Độ khó |
|---|---|---|
| Simple | Lấy dữ liệu cơ bản, hiển thị danh sách. | ⭐ |
| Aggregate | Làm báo cáo, thống kê con số. | ⭐⭐ |
| Join | Kết nối dữ liệu từ nhiều nguồn. | ⭐⭐⭐ |
| Subquery | Logic phức tạp, cần tính toán trung gian. | ⭐⭐⭐ |
| Window | Phân tích sâu, xếp hạng, so sánh dòng trước/sau. | ⭐⭐⭐⭐ |
Lời kết
Việc hiểu rõ các loại Query không chỉ giúp bạn viết code chạy được, mà còn giúp bạn chọn ra cách viết tối ưu nhất. Đôi khi dùng một câu Join sẽ nhanh hơn nhiều so với việc dùng Subquery trong một tập dữ liệu lớn.
Anh em thường gặp khó khăn ở loại query nào nhất? Hay có pha "bóp team" nào với Cross Join chưa? Hãy chia sẻ bên dưới nhé!
All rights reserved