Skip to content

30 Days SQL Challenge ​

Lộ trình học SQL trong 30 ngày, mỗi ngày một bài, từ SELECT cơ bản đến index, transaction, window function, tối ưu truy vấn và bảo mật database. Có ba bài ôn tập giữa chặng và một dự án cuối khóa.

Cả khóa dùng PostgreSQL 16 và một bộ dữ liệu chung, cửa hàng đồ công nghệ DSC Shop: mọi ví dụ và bài tập đều chạy được, kết quả in trong bài là kết quả thật.

👉 Bắt đầu tại Lộ trình học SQL, hoặc đọc trên website: https://tiennhm.io.vn/sql-challenge/.

Chuẩn bị môi trường ​

Cần Docker Desktop. Ở thư mục gốc của repo:

sh
docker compose up -d

Sau vài giây bạn có PostgreSQL ở localhost:5432 (user postgres, mật khẩu postgres, database sql_challenge) đã nạp sẵn dữ liệu, và giao diện web Adminer ở http://localhost:8080. Cách cài không cần Docker, sơ đồ dữ liệu và cách làm lại từ đầu: xem setup/README.md.

Cách học ​

  • Học theo thứ tự, mỗi ngày một bài. Mỗi bài ghi rõ cần biết trước những bài nào, cuối bài có liên kết sang bài trước/sau.
  • Gõ lại và chạy từng ví dụ, so kết quả với bảng trong bài.
  • Tự làm bài tập trước khi mở đáp án (bấm "Đáp án" để xem).
  • Làm hết bài ôn tập (ngày 7, 14, 21) trước khi sang chặng tiếp theo.

Mục lục ​

Chặng 1: Nền tảng và truy vấn đơn giản ​

NgàyBài học
0Lộ trình 30 ngày học SQL
1Giới thiệu SQL, RDBMS và môi trường thực hành
2Bảng, kiểu dữ liệu và ràng buộc
3SELECT và WHERE, truy vấn và lọc dữ liệu
4ORDER BY và LIMIT, sắp xếp và phân trang
5Toán tử, biểu thức và hàm thường dùng
6Thêm, sửa, xóa dữ liệu (INSERT, UPDATE, DELETE)
7Ôn tập 1 (Ngày 1 đến 6)

Chặng 2: Tổng hợp và kết hợp dữ liệu ​

NgàyBài học
8Hàm tổng hợp (COUNT, SUM, AVG, MIN, MAX)
9Nhóm dữ liệu với GROUP BY và HAVING
10Kết hợp nhiều bảng với JOIN
11Truy vấn con (subquery) và CTE
12UNION, INTERSECT và EXCEPT
13CASE và tổng hợp có điều kiện
14Ôn tập 2 - Báo cáo trên DSC Shop

Chặng 3: Index, transaction và các đối tượng database ​

NgàyBài học
15Chỉ mục (index)
16Transaction và ACID
17Function và Stored Procedure
18Trigger
19View và materialized view
20Đọc kế hoạch thực thi với EXPLAIN
21Ôn tập 3 (Ngày 15-20)

Chặng 4: SQL trong thực tế ​

NgàyBài học
22Làm việc với JSON và JSONB
23Kết nối SQL từ ứng dụng
24Nhập và xuất dữ liệu với CSV
25SQL và dữ liệu lớn
26SQL và NoSQL
27Thiết kế cơ sở dữ liệu
28Tối ưu truy vấn
29Window function và truy vấn đệ quy
30Bảo mật cơ sở dữ liệu
🎯Tổng kết và dự án cuối khóa

Cấu trúc repo ​

text
lessons/            bài học, ảnh sơ đồ ở lessons/img/
diagrams/           file HTML nguồn của các sơ đồ (bản sáng và bản tối)
setup/init/         schema và dữ liệu mẫu, tự nạp khi chạy docker compose
setup/perf_seed.sql dữ liệu lớn cho các bài hiệu năng
setup/data/         file CSV cho bài import/export
scripts/            script xuất sơ đồ HTML ra PNG
review/             báo cáo review nội dung khóa học

Website ​

Repo được dựng thành website bằng VitePress. Mỗi lần push lên main, GitHub Actions (deploy-pages.yml) tự build và publish lên GitHub Pages.

Chạy thử trên máy (cần Node.js 20 trở lên):

sh
npm install
npm run docs:dev      # http://localhost:5173, tự tải lại khi sửa bài
npm run docs:build    # build ra .vitepress/dist

Trang chủ là index.md, phần giao diện riêng nằm trong .vitepress/theme/. Sidebar tự sinh từ tiêu đề # ... của các bài trong lessons/.

Sửa sơ đồ ​

Sơ đồ chính của mỗi bài được vẽ bằng HTML/SVG trong diagrams/, rồi xuất ra PNG (bản sáng và tối) để nhúng vào bài:

sh
pip install playwright && python -m playwright install chromium   # một lần
python scripts/export-diagram.py diagrams/join/cac-loai-join.html lessons/img/cac-loai-join.png

Sơ đồ nhỏ, đi kèm một đoạn thì viết thẳng bằng Mermaid trong bài; GitHub tự hiển thị.

Nguồn ​

Nội dung được chuyển từ series Học SQL trong 30 ngày của TienNHM.

Giấy phép ​

Toàn bộ repo, gồm cả nội dung bài học và hình ảnh trong lessons/, được phát hành theo giấy phép MIT.

Phát hành theo giấy phép MIT.