
Học SQL cho người mới bắt đầu không đòi hỏi biết lập trình: SQL là ngôn ngữ để «hỏi» dữ liệu nằm trong các bảng. Thứ tự nên đi là đọc và lọc dữ liệu (SELECT, WHERE, ORDER BY), rồi tổng hợp (COUNT, SUM, GROUP BY), rồi nối nhiều bảng (JOIN), cuối cùng mới tới ghi, sửa dữ liệu và tạo bảng. Lộ trình gợi ý trong bài là 4 tuần, mỗi ngày 30–45 phút. Đừng cố thuộc hết câu lệnh; hãy luyện trên một bộ dữ liệu nhỏ giống công việc thật của bạn, và dùng AI như người chấm bài chứ không phải người làm hộ.
Bài này viết cho người không làm IT: kế toán muốn tự lấy số liệu, chủ shop muốn biết khách nào mua nhiều nhất, người tự làm web app muốn hiểu câu lệnh AI vừa viết cho mình.
SQL là gì và người không làm IT học SQL để làm gì?
SQL (Structured Query Language) là ngôn ngữ dùng để đọc, lọc, tổng hợp và sửa dữ liệu trong cơ sở dữ liệu dạng bảng như PostgreSQL, MySQL, SQL Server hay SQLite. Bạn mô tả muốn lấy gì, hệ quản trị cơ sở dữ liệu tự lo lấy bằng cách nào.
Với người không làm IT, SQL đáng học vì ba việc rất cụ thể:
- Tự lấy báo cáo: doanh thu theo tháng, top sản phẩm, khách lâu không quay lại — không phải chờ ai xuất file.
- Kiểm tra dữ liệu web app: nếu app của bạn chạy trên Supabase hay bất kỳ PostgreSQL nào, SQL là cách nhanh nhất để xem dữ liệu đang thật sự nằm thế nào.
- Đọc hiểu câu lệnh AI viết: AI viết SQL rất nhanh, nhưng chạy một câu lệnh mình không hiểu lên dữ liệu thật là rủi ro.
Nếu bạn đang dùng Google Sheet, có thể bạn đã chạm vào SQL mà chưa để ý: hàm QUERY dùng một ngôn ngữ truy vấn rất giống SQL (select, where, group by, order by, limit), chỉ thiếu những phần như nối nhiều bảng. Khi dữ liệu lớn dần và trang tính bắt đầu chậm, đó là lúc nên nghĩ tới cơ sở dữ liệu thật — xem thêm bài dùng Google Sheet làm database: khi nào ổn, khi nào phải chuyển.
Học SQL cơ bản cần nắm những gì?
Hãy hình dung một cửa hàng nhỏ với bốn bảng. Mọi ví dụ trong bài dùng bộ dữ liệu này:
| Bảng | Mỗi dòng là | Cột chính |
|---|---|---|
khach_hang | một khách | id, ho_ten, sdt, tinh |
san_pham | một mặt hàng | id, ten, nhom, gia_ban |
don_hang | một đơn | id, khach_hang_id, ngay_dat, tong_tien |
chi_tiet_don | một dòng hàng trong đơn | don_hang_id, san_pham_id, so_luong, don_gia |
Trên bộ dữ liệu đó, phần nền của SQL gói trong 7 bước dưới đây. Học tới đâu, tự đặt một câu hỏi kinh doanh rồi viết truy vấn trả lời câu hỏi đó.

1. SELECT, FROM và AS: lấy đúng cột
SELECT ho_ten, sdt AS dien_thoai
FROM khach_hang;
AS đặt lại tên cột cho dễ đọc. Nhìn thì nhỏ, nhưng rất có ích khi câu lệnh bắt đầu dài.
2. WHERE: lọc đúng dòng
SELECT id, ngay_dat, tong_tien
FROM don_hang
WHERE tong_tien > 1000000
AND ngay_dat >= '2026-09-01'
AND ngay_dat < '2026-10-01';
Các toán tử cần nắm: =, >, <, LIKE (tìm theo mẫu chữ, ví dụ ho_ten LIKE 'Nguyễn%'), IN (thuộc một danh sách), BETWEEN, AND / OR / NOT và IS NULL. Lọc theo tháng nên viết «từ ngày 1 đến trước ngày 1 tháng sau» như trên: nếu cột có cả giờ, BETWEEN '2026-09-01' AND '2026-09-30' sẽ bỏ sót các đơn trong ngày 30.
3. ORDER BY và LIMIT: sắp xếp, lấy top
SELECT id, tong_tien
FROM don_hang
ORDER BY tong_tien DESC
LIMIT 10;
ASC là tăng dần (mặc định), DESC là giảm dần. SQL Server dùng TOP 10 thay cho LIMIT — mỗi hệ quản trị có vài khác biệt nhỏ như vậy, nhưng phần lõi giống nhau.
4. Hàm tổng hợp: COUNT, SUM, AVG, MIN, MAX
SELECT COUNT(*) AS so_don,
SUM(tong_tien) AS doanh_thu,
AVG(tong_tien) AS gia_tri_trung_binh
FROM don_hang;
Tới đây bạn đã trả lời được: có bao nhiêu đơn, tổng doanh thu bao nhiêu, giá trị đơn trung bình là bao nhiêu.
5. GROUP BY và HAVING: tổng hợp theo nhóm
-- Cú pháp PostgreSQL
SELECT date_trunc('month', ngay_dat) AS thang,
SUM(tong_tien) AS doanh_thu
FROM don_hang
GROUP BY date_trunc('month', ngay_dat)
HAVING SUM(tong_tien) > 50000000
ORDER BY thang;
GROUP BY gom các dòng thành nhóm; HAVING lọc sau khi đã gộp. Cách phân biệt: muốn bỏ bớt đơn trước khi cộng thì dùng WHERE, muốn bỏ bớt nhóm sau khi cộng thì dùng HAVING. Đây là phần dùng nhiều nhất khi làm báo cáo: doanh thu theo tháng, theo chi nhánh, theo nhóm hàng, số khách theo tỉnh.
6. JOIN: nối nhiều bảng
SELECT k.ho_ten,
COUNT(d.id) AS so_don,
COALESCE(SUM(d.tong_tien), 0) AS da_mua
FROM khach_hang k
LEFT JOIN don_hang d ON d.khach_hang_id = k.id
GROUP BY k.id, k.ho_ten
ORDER BY da_mua DESC;
Dữ liệu thật hiếm khi nằm hết trong một bảng. INNER JOIN chỉ giữ những dòng khớp ở cả hai bảng; LEFT JOIN giữ mọi dòng của bảng bên trái kể cả khi không khớp — câu trên vì thế liệt kê cả khách chưa mua đơn nào (nhờ COALESCE, số tiền của họ hiện 0 thay vì trống). RIGHT JOIN và FULL JOIN ít gặp hơn; hiểu chắc INNER và LEFT là đủ đi rất xa. Muốn JOIN đúng thì phải hiểu khoá chính – khoá ngoại, phần này có trong bài thiết kế cơ sở dữ liệu cho người mới.
7. Truy vấn con: câu hỏi lồng trong câu hỏi
-- Khách chưa từng đặt đơn nào
SELECT ho_ten, sdt
FROM khach_hang k
WHERE NOT EXISTS (
SELECT 1 FROM don_hang d WHERE d.khach_hang_id = k.id
);
Truy vấn con có thể nằm trong WHERE (đi cùng IN / EXISTS), trong FROM (coi kết quả như một bảng tạm), hoặc tham chiếu ngược ra câu lệnh bên ngoài như ví dụ trên (truy vấn con tương quan). Học phần này khi sáu bước trước đã chắc.
Ngoài đọc dữ liệu: ghi, sửa và tạo bảng
INSERT INTO khach_hang (ho_ten, sdt, tinh) VALUES ('Trần Thị B', '0900000000', 'Hà Nội');
UPDATE san_pham SET gia_ban = 129000 WHERE id = 42;
DELETE FROM don_hang WHERE id = 1001;
CREATE TABLE nhom_hang (id serial PRIMARY KEY, ten text NOT NULL);
Bốn lệnh này thay đổi dữ liệu thật, nên chỉ luyện trên bản sao. Thêm một mẹo giúp đọc SQL dễ hơn: hệ quản trị xử lý câu lệnh theo thứ tự FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT, không theo thứ tự bạn viết. Vì thế tên đặt bằng AS trong SELECT không dùng được ở WHERE — lúc WHERE chạy, tên đó chưa tồn tại — nhưng dùng được ở ORDER BY.
Lộ trình học SQL gợi ý 4 tuần, mỗi ngày 30–45 phút
Đây là gợi ý, không phải khuôn; nhịp mỗi người khác nhau. Tiêu chí qua tuần là tự làm được bài tập của tuần đó mà không nhìn đáp án.
| Tuần | Học | Bài tập để qua tuần |
|---|---|---|
| 1 — Đọc và lọc | SELECT, FROM, AS, WHERE, ORDER BY, LIMIT | Liệt kê 10 đơn lớn nhất tháng trước của khách ở Hà Nội |
| 2 — Tổng hợp | COUNT, SUM, AVG, MIN, MAX, GROUP BY, HAVING | Doanh thu và số đơn theo tháng; tháng nào vượt mục tiêu |
| 3 — Nối bảng | INNER JOIN, LEFT JOIN, truy vấn con | Top 5 sản phẩm theo doanh thu; khách chưa quay lại sau 90 ngày |
| 4 — Ghi dữ liệu | INSERT, UPDATE, DELETE, CREATE TABLE, khoá chính – khoá ngoại | Bài cuối: tự tạo thêm bảng nhân viên, rồi làm báo cáo doanh thu theo tháng và theo nhân viên bán |
Mỗi buổi có thể chia: 10 phút đọc một khái niệm, 25 phút tự viết truy vấn cho 3–5 câu hỏi, 5 phút ghi lại lỗi vừa gặp. Tự gõ trước, chạy sau — sai rồi tự sửa nhớ lâu hơn nhiều so với chép mẫu.
Quan trọng hơn số câu lệnh bạn biết là thói quen đi từ câu hỏi tới dữ liệu: cần dữ liệu gì → nằm ở bảng nào → nối các bảng thế nào → lọc ra sao → tính chỉ số gì → kết luận được gì. Mỗi bài tập trong bảng trên đều nên được giải theo đúng chuỗi đó.
Học SQL miễn phí ở đâu và luyện trên dữ liệu nào?
- Trang luyện tập tương tác ngay trên trình duyệt: SQLBolt, SQLZoo — gõ câu lệnh, biết đúng sai ngay, không cần cài gì. Hợp với tuần 1–2.
- SQLite + DB Browser for SQLite: miễn phí, cài vài phút, cả cơ sở dữ liệu chỉ là một file. Nhập được file CSV nên rất hợp để luyện trên dữ liệu của chính bạn.
- PostgreSQL cài trên máy: khi muốn học đúng loại cơ sở dữ liệu đang chạy sau nhiều web app. Tài liệu chính thức có phần nhập môn viết rất kỹ.
- Gói miễn phí của dịch vụ cơ sở dữ liệu đám mây như Supabase hay Neon: có sẵn PostgreSQL và ô soạn SQL ngay trên web. Hạn mức gói miễn phí thay đổi theo thời gian, hãy xem trang giá chính thức trước khi dùng.
Mẹo luyện hiệu quả nhất: xuất một trang tính thật của bạn (đơn hàng, chấm công, tồn kho) ra CSV, nhập vào SQLite rồi đặt câu hỏi về chính dữ liệu đó. Câu hỏi thật giúp nhớ lâu hơn mọi bộ dữ liệu mẫu. Nhớ xoá số điện thoại, địa chỉ của khách trước khi đưa file ra khỏi máy.
Đã có AI viết code SQL thì còn cần học không?
Vẫn cần, nhưng học theo cách khác. AI viết câu lệnh đúng cú pháp rất nhanh; thứ nó không biết là dữ liệu của bạn có gì bất thường. Ba lỗi thường gặp trong SQL do AI viết mà người chưa học khó nhận ra:
- JOIN làm nhân bản dòng: nối
don_hangvớichi_tiet_donrồi cộngtong_tien— mỗi đơn bị cộng nhiều lần, doanh thu phình to mà câu lệnh vẫn chạy «thành công». - UPDATE / DELETE thiếu hoặc sai WHERE: sửa nhầm cả bảng.
- Sai múi giờ: lọc «hôm nay» theo giờ UTC trong khi cửa hàng ở Việt Nam (UTC+7), các đơn từ 0 giờ đến 7 giờ sáng bị tính sang ngày khác.
Cách học cùng AI mà không phụ thuộc:
- Tự viết trước, rồi nhờ AI chấm và chỉ chỗ sai.
- Dán câu lệnh AI viết, nhờ giải thích từng dòng — dòng nào chưa hiểu thì chưa chạy.
- Nhờ AI ra bài tập theo đúng cấu trúc bảng của bạn.
Prompt mẫu để bắt đầu:
Tôi đang học SQL (PostgreSQL). Tôi có các bảng: khach_hang(id, ho_ten, tinh), don_hang(id, khach_hang_id, ngay_dat, tong_tien). Hãy ra cho tôi 5 bài tập về GROUP BY từ dễ đến khó, chưa đưa đáp án. Khi tôi gửi bài làm, hãy chấm, chỉ ra lỗi và giải thích vì sao, nhưng để tôi tự sửa.
Học SQL mất bao lâu?
Không có con số chung — tuỳ mục tiêu. Để tự đọc và viết được truy vấn báo cáo cơ bản (lọc, tổng hợp, nối hai ba bảng), vài tuần luyện đều mỗi ngày là đủ đi hết phần nền như lộ trình trên. Thiết kế cơ sở dữ liệu tốt, viết truy vấn nhanh trên bảng hàng triệu dòng, đánh index đúng chỗ thì cần lâu hơn nhiều và nên học dần theo việc thật. Thước đo đúng không phải số ngày, mà là bạn có tự trả lời được một câu hỏi thật trong công việc bằng SQL hay chưa.
Người mới học SQL hay mắc lỗi gì?
- UPDATE / DELETE quên WHERE. Tập thói quen: viết
SELECTvới đúng điều kiện WHERE đó trước, xem số dòng trả về, rồi mới đổi thành UPDATE hay DELETE. - Nhầm WHERE với HAVING. Điều kiện trên từng dòng thì dùng WHERE; điều kiện trên kết quả đã cộng thì dùng HAVING.
- So sánh NULL bằng dấu bằng.
WHERE sdt = NULLkhông bao giờ trả về dòng nào; phải viếtWHERE sdt IS NULL. - Lọc ngày bằng BETWEEN trên cột có giờ. Dùng khoảng
>=ngày đầu kỳ và<ngày đầu kỳ sau. - Học lý thuyết mà không luyện. Đọc xong một khái niệm mà không tự viết vài truy vấn thì gần như sẽ quên.
- Thử lệnh ghi trên dữ liệu thật. Luôn luyện trên bản sao.
Tóm lại, học SQL không phải là thuộc càng nhiều lệnh càng tốt. Nắm chắc thứ tự SELECT → WHERE → hàm tổng hợp → GROUP BY → JOIN → truy vấn con, rồi luyện trên dữ liệu của chính mình, là bạn đã có nền tảng đủ vững để tự trả lời phần lớn câu hỏi báo cáo hằng ngày.
Câu hỏi thường gặp
›Học SQL mất bao lâu?
Tuỳ mục tiêu. Để tự viết được truy vấn báo cáo cơ bản (lọc, tổng hợp, nối hai ba bảng), vài tuần luyện đều mỗi ngày 30–45 phút là đủ đi hết phần nền. Thiết kế cơ sở dữ liệu và tối ưu truy vấn cần lâu hơn và nên học dần theo việc thật.
›Đã có AI viết SQL thì còn cần học không?
Vẫn cần, để mô tả đúng yêu cầu, đọc hiểu câu lệnh và phát hiện lỗi mà AI không thấy được từ dữ liệu của bạn, như JOIN làm nhân bản dòng, UPDATE thiếu WHERE hay lọc sai múi giờ. Cách học tốt là tự viết trước rồi nhờ AI chấm.
›Nên học MySQL hay PostgreSQL trước?
Phần lõi SQL của hai hệ gần như giống nhau, học một cái thì chuyển sang cái kia không khó. Nếu chỗ làm đang dùng hệ nào thì học hệ đó; nếu tự làm web app trên các nền tảng như Supabase thì chọn PostgreSQL.
›Không biết lập trình có học SQL được không?
Được. SQL là ngôn ngữ khai báo, câu lệnh gần với câu tiếng Anh và không cần biến hay vòng lặp. Thứ cần nhất là tư duy dữ liệu dạng bảng, nên người đã dùng Excel hoặc Google Sheet thành thạo có lợi thế.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



