Kiến thức lập trình

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.

SQL cơ bản qua ví dụ: SELECT, WHERE, JOIN và GROUP BY
Nội dung bài viết
  1. Cơ sở dữ liệu mẫu
  2. 1. SELECT: lấy dữ liệu
  3. 2. WHERE: lọc dữ liệu
  4. 3. JOIN: kết hợp nhiều bảng
  5. 4. GROUP BY: thống kê
  6. Thực hành ở đâu?

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

idho_tenthanh_pho
1Nguyễn Văn AnHà Nội
2Trần Thị BìnhĐà Nẵng
3Lê Minh ChâuTP.HCM

Bảng don_hang

idkhach_hang_idtong_tienngay_dat
10113500002026-09-01
102312000002026-09-02
1031890002026-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?

Ban biên tập HọcFree

Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.