
SQL Cho Người Mới Bắt Đầu: SELECT, JOIN, GROUP BY Và Subquery Từ A Đến Z
Chia sẻ
"Hướng dẫn SQL từ cơ bản đến trung cấp: SELECT, WHERE, JOIN, GROUP BY, HAVING, Subquery, Window Functions. Ví dụ thực tế với dữ liệu kinh doanh, so sánh với Excel."
SQL (Structured Query Language) là ngôn ngữ giao tiếp với database — kỹ năng bắt buộc cho bất kỳ ai làm việc với dữ liệu. Dù bạn là kế toán, marketing, hay nhân sự — biết SQL sẽ giúp bạn khai thác dữ liệu nhanh gấp 10 lần so với dùng mỗi Excel.

1. SELECT — Truy Vấn Cơ Bản
SELECT là câu lệnh cơ bản nhất: lấy dữ liệu từ bảng.
-- Lấy tất cả cột
SELECT * FROM nhan_vien;
-- Lấy cột cụ thể
SELECT ho_ten, phong_ban, luong FROM nhan_vien;
-- Đặt alias (tên hiển thị)
SELECT ho_ten AS "Họ Tên", luong AS "Lương Tháng" FROM nhan_vien;
-- Tính toán trong SELECT
SELECT ho_ten, luong, luong * 12 AS luong_nam FROM nhan_vien;2. WHERE — Lọc Dữ Liệu
-- Lọc theo 1 điều kiện
SELECT * FROM nhan_vien WHERE phong_ban = 'IT';
-- Nhiều điều kiện (AND/OR)
SELECT * FROM nhan_vien
WHERE phong_ban = 'IT' AND luong > 15000000;
-- BETWEEN: khoảng giá trị
SELECT * FROM don_hang
WHERE ngay_dat BETWEEN '2024-01-01' AND '2024-12-31';
-- IN: danh sách giá trị
SELECT * FROM nhan_vien
WHERE phong_ban IN ('IT', 'Marketing', 'Sale');
-- LIKE: tìm kiếm gần đúng
SELECT * FROM nhan_vien WHERE ho_ten LIKE 'Nguyễn%'; -- bắt đầu bằng Nguyễn
SELECT * FROM san_pham WHERE ten_sp LIKE '%Excel%'; -- chứa từ Excel3. ORDER BY & LIMIT
-- Sắp xếp tăng dần (mặc định)
SELECT * FROM nhan_vien ORDER BY luong;
-- Sắp xếp giảm dần
SELECT * FROM nhan_vien ORDER BY luong DESC;
-- Sắp xếp nhiều cột
SELECT * FROM nhan_vien ORDER BY phong_ban, luong DESC;
-- TOP N kết quả
SELECT * FROM san_pham ORDER BY doanh_thu DESC LIMIT 10;4. JOIN — Ghép Nhiều Bảng
JOIN là kỹ năng quan trọng nhất trong SQL — nó giống VLOOKUP nhưng mạnh hơn rất nhiều.
4.1 INNER JOIN
-- Ghép bảng đơn hàng với bảng khách hàng
SELECT
dh.ma_don, kh.ten_kh, kh.dia_chi,
dh.ngay_dat, dh.tong_tien
FROM don_hang dh
INNER JOIN khach_hang kh ON dh.ma_kh = kh.ma_kh
WHERE dh.tong_tien > 1000000;4.2 LEFT JOIN — Giữ tất cả dòng bảng trái
-- Tất cả khách hàng + đơn hàng (nếu có)
SELECT kh.ten_kh, dh.ma_don, dh.tong_tien
FROM khach_hang kh
LEFT JOIN don_hang dh ON kh.ma_kh = dh.ma_kh;
-- Tìm khách hàng chưa mua hàng (LEFT JOIN + IS NULL)
SELECT kh.ten_kh, kh.email
FROM khach_hang kh
LEFT JOIN don_hang dh ON kh.ma_kh = dh.ma_kh
WHERE dh.ma_don IS NULL;4.3 JOIN nhiều bảng
-- Đơn hàng + Khách hàng + Chi tiết + Sản phẩm
SELECT
kh.ten_kh, dh.ngay_dat,
sp.ten_sp, ct.so_luong, sp.don_gia,
ct.so_luong * sp.don_gia AS thanh_tien
FROM don_hang dh
INNER JOIN khach_hang kh ON dh.ma_kh = kh.ma_kh
INNER JOIN chi_tiet_dh ct ON dh.ma_don = ct.ma_don
INNER JOIN san_pham sp ON ct.ma_sp = sp.ma_sp
ORDER BY dh.ngay_dat DESC;5. GROUP BY — Thống Kê Nhóm
GROUP BY nhóm dữ liệu và tính tổng, đếm, trung bình — tương tự Pivot Table.
-- Tổng doanh thu theo tháng
SELECT
EXTRACT(MONTH FROM ngay_dat) AS thang,
COUNT(*) AS so_don,
SUM(tong_tien) AS tong_doanh_thu,
AVG(tong_tien) AS tb_don_hang
FROM don_hang
WHERE EXTRACT(YEAR FROM ngay_dat) = 2024
GROUP BY EXTRACT(MONTH FROM ngay_dat)
ORDER BY thang;
-- HAVING: lọc sau khi nhóm
SELECT phong_ban, COUNT(*) AS so_nv, AVG(luong) AS luong_tb
FROM nhan_vien
GROUP BY phong_ban
HAVING AVG(luong) > 15000000;6. Subquery — Truy Vấn Lồng Nhau
-- Nhân viên có lương cao hơn trung bình
SELECT ho_ten, luong
FROM nhan_vien
WHERE luong > (SELECT AVG(luong) FROM nhan_vien);
-- Top 3 khách hàng mua nhiều nhất
SELECT * FROM khach_hang
WHERE ma_kh IN (
SELECT ma_kh FROM don_hang
GROUP BY ma_kh
ORDER BY SUM(tong_tien) DESC
LIMIT 3
);7. Window Functions — Phân Tích Nâng Cao
Window Functions cho phép tính toán trên nhóm dữ liệu mà không thu gọn dòng — công cụ mạnh nhất trong SQL analytics.
-- Thêm cột ranking theo doanh thu
SELECT
ten_sp, doanh_thu,
RANK() OVER (ORDER BY doanh_thu DESC) AS hang,
doanh_thu * 100.0 / SUM(doanh_thu) OVER () AS phan_tram
FROM san_pham;
-- Running total (lũy kế) theo ngày
SELECT
ngay_dat, tong_tien,
SUM(tong_tien) OVER (ORDER BY ngay_dat) AS luy_ke
FROM don_hang;
-- So sánh với tháng trước (LAG)
SELECT
thang, doanh_thu,
LAG(doanh_thu) OVER (ORDER BY thang) AS thang_truoc,
doanh_thu - LAG(doanh_thu) OVER (ORDER BY thang) AS chenh_lech
FROM bao_cao_thang;8. SQL vs Excel — Khi Nào Dùng Gì?
Dữ liệu < 10.000 dòng, tính toán nhanh → Excel
Dữ liệu > 100.000 dòng → SQL nhanh hơn nhiều
Cần JOIN nhiều bảng → SQL vượt trội (VLOOKUP chậm)
Cần report định kỳ → SQL + scheduled query
Cần biểu đồ, trình bày → Excel/Power BI từ kết quả SQL
Cần cả hai: SQL để xử lý + Excel/BI để visualize
Kết Luận
SQL là kỹ năng nền tảng cho mọi vai trò liên quan đến dữ liệu. Bắt đầu với SELECT → WHERE → JOIN → GROUP BY, sau đó mở rộng sang Subquery và Window Functions. Kết hợp SQL với Excel/Power BI, bạn sẽ có bộ toolset hoàn chỉnh cho data analysis.
Học thêm SQL và Data tại Trà Đá Data! 🍵
Bình luận
Đăng nhập để tham gia bình luận
Đăng nhậpNhận bài viết mới nhất
Đăng ký để nhận thông báo khi có bài viết mới. Không spam, chỉ kiến thức chất lượng.
Bài viết liên quan
Khám phá thêm các bài viết cùng chủ đề

