SQL cơ bản qua ví dụ: SELECT, WHERE, JOIN và GROUP BY
Dữ liệu ở khắp mọi nơi và SQL là chìa khóa để truy vấn nó. Học 4 câu lệnh quan trọng nhất qua một cơ sở dữ liệu bán hàng đơn giản.
Nội dung bài viết
Dù bạn là lập trình viên backend, chuyên viên phân tích dữ liệu hay nhân viên kinh doanh muốn tự xem báo cáo, SQL (Structured Query Language) đều là kỹ năng cực kỳ đáng giá. Cú pháp của SQL ngắn gọn và gần với tiếng Anh, nên bạn có thể dùng được chỉ sau vài buổi học.
Cơ sở dữ liệu mẫu
Giả sử một cửa hàng online có hai bảng:
Bảng khach_hang
| id | ho_ten | thanh_pho |
|---|---|---|
| 1 | Nguyễn Văn An | Hà Nội |
| 2 | Trần Thị Bình | Đà Nẵng |
| 3 | Lê Minh Châu | TP.HCM |
Bảng don_hang
| id | khach_hang_id | tong_tien | ngay_dat |
|---|---|---|---|
| 101 | 1 | 350000 | 2026-09-01 |
| 102 | 3 | 1200000 | 2026-09-02 |
| 103 | 1 | 89000 | 2026-09-05 |
1. SELECT: lấy dữ liệu
-- Lấy tất cả cột
SELECT * FROM khach_hang;
-- Chỉ lấy một số cột, sắp xếp theo tên
SELECT ho_ten, thanh_pho
FROM khach_hang
ORDER BY ho_ten;
2. WHERE: lọc dữ liệu
-- Đơn hàng trên 300.000đ
SELECT * FROM don_hang
WHERE tong_tien > 300000;
-- Khách ở Hà Nội hoặc TP.HCM
SELECT * FROM khach_hang
WHERE thanh_pho IN ('Hà Nội', 'TP.HCM');
-- Tên có chữ "Minh"
SELECT * FROM khach_hang
WHERE ho_ten LIKE '%Minh%';
3. JOIN: kết hợp nhiều bảng
Dữ liệu thường được tách thành nhiều bảng để tránh trùng lặp. JOIN giúp ghép chúng lại thông qua khóa liên kết.
SELECT k.ho_ten, d.id AS ma_don, d.tong_tien
FROM don_hang d
INNER JOIN khach_hang k ON k.id = d.khach_hang_id;
- INNER JOIN: chỉ lấy các dòng khớp ở cả hai bảng.
- LEFT JOIN: lấy tất cả dòng bảng bên trái, kể cả khi không khớp (ví dụ: khách hàng chưa từng mua hàng).
4. GROUP BY: thống kê
Muốn biết mỗi khách đã chi bao nhiêu tiền? Dùng hàm tổng hợp kết hợp GROUP BY:
SELECT k.ho_ten,
COUNT(d.id) AS so_don,
SUM(d.tong_tien) AS tong_chi
FROM khach_hang k
LEFT JOIN don_hang d ON d.khach_hang_id = k.id
GROUP BY k.ho_ten
HAVING COUNT(d.id) > 0
ORDER BY tong_chi DESC;
Các hàm tổng hợp phổ biến: COUNT, SUM, AVG, MIN, MAX. Lưu ý: WHERE lọc trước khi nhóm, còn HAVING lọc sau khi nhóm.
Thực hành ở đâu?
Bạn có thể cài SQLite (rất nhẹ), MySQL, PostgreSQL hoặc thực hành trực tuyến trên các trang như SQLBolt, sqliteonline.com. Hãy tự tạo hai bảng ở trên và thử trả lời các câu hỏi: Thành phố nào có doanh thu cao nhất? Khách hàng nào chưa từng đặt hàng?


