Skip to content

Repository files navigation

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 -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ày Bài học
0 Lộ trình 30 ngày học SQL
1 Giới thiệu SQL, RDBMS và môi trường thực hành
2 Bảng, kiểu dữ liệu và ràng buộc
3 SELECT và WHERE, truy vấn và lọc dữ liệu
4 ORDER BY và LIMIT, sắp xếp và phân trang
5 Toán tử, biểu thức và hàm thường dùng
6 Thê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ày Bài học
8 Hàm tổng hợp (COUNT, SUM, AVG, MIN, MAX)
9 Nhóm dữ liệu với GROUP BY và HAVING
10 Kết hợp nhiều bảng với JOIN
11 Truy vấn con (subquery) và CTE
12 UNION, INTERSECT và EXCEPT
13 CASE 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à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ế

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

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ọ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):

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:

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.

Releases

Packages

Contributors

Languages