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:
docker compose up -dSau 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
Chặng 2: Tổng hợp và kết hợp dữ liệu
Chặng 3: Index, transaction và các đối tượng database
| Ngày | Bài học |
|---|---|
| 15 | Chỉ mục (index) |
| 16 | Transaction và ACID |
| 17 | Function và Stored Procedure |
| 18 | Trigger |
| 19 | View 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ế
Cấu trúc repo
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ọcWebsite
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):
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/distTrang 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:
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.pngSơ đồ 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.