🐘 PostgreSQL — Tài liệu học lập trình
Về tài liệu này
Biên soạn dựa trên cấu trúc của PostgreSQL Tutorial (Neon / postgresqltutorial.com), viết lại bằng tiếng Việt với ví dụ minh họa chạy được.
Cơ sở dữ liệu mẫu: DVD Rental — xem Bắt đầu với PostgreSQL để cài đặt.
Cách dùng: đọc tuần tự từ bài 01 → 18. Mỗi bài có phần Bài tập ở cuối, đáp án nằm trong callout gập lại.
🗺️ Bản đồ nội dung
Phần A — Nhập môn
| # | Bài | Nội dung chính |
|---|---|---|
| 01 | Bắt đầu với PostgreSQL | Cài đặt trên Windows/macOS/Linux, psql, nạp CSDL mẫu DVD Rental |
Phần B — Truy vấn dữ liệu
| # | Bài | Nội dung chính |
|---|---|---|
| 02 | Truy vấn dữ liệu - SELECT, alias, ORDER BY, DISTINCT | SELECT, bí danh cột, ORDER BY, SELECT DISTINCT |
| 03 | Lọc dữ liệu - WHERE, LIMIT, IN, BETWEEN, LIKE, IS NULL | WHERE, AND/OR, LIMIT, FETCH, IN, BETWEEN, LIKE, IS NULL |
| 04 | Kết hợp nhiều bảng - JOIN | INNER/LEFT/RIGHT/FULL/CROSS/NATURAL JOIN, self-join, bí danh bảng |
| 05 | Nhóm dữ liệu - GROUP BY, HAVING, hàm tổng hợp | GROUP BY, HAVING, hàm tổng hợp |
| 06 | Phép toán tập hợp - UNION, INTERSECT, EXCEPT | UNION, INTERSECT, EXCEPT |
| 07 | GROUPING SETS, CUBE, ROLLUP | GROUPING SETS, CUBE, ROLLUP, hàm GROUPING() |
| 08 | Truy vấn con - Subquery, ANY, ALL, EXISTS | Subquery, correlated subquery, ANY, ALL, EXISTS |
| 09 | CTE và truy vấn đệ quy | WITH, WITH RECURSIVE, CTE ghi dữ liệu |
Phần C — Thay đổi dữ liệu
| # | Bài | Nội dung chính |
|---|---|---|
| 10 | Sửa đổi dữ liệu - INSERT, UPDATE, DELETE, UPSERT | INSERT, UPDATE, UPDATE JOIN, DELETE, UPSERT, MERGE |
| 11 | Giao dịch - BEGIN, COMMIT, ROLLBACK | BEGIN, COMMIT, ROLLBACK, SAVEPOINT, mức cô lập |
| 12 | Nhập và xuất dữ liệu CSV | COPY, \copy, nhập/xuất CSV |
Phần D — Thiết kế cơ sở dữ liệu
| # | Bài | Nội dung chính |
|---|---|---|
| 13 | Quản lý bảng - CREATE, ALTER, SERIAL, IDENTITY, sequence | CREATE TABLE, ALTER TABLE, SERIAL, IDENTITY, sequence, bảng tạm |
| 14 | Ràng buộc - PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE, NOT NULL, DEFAULT | PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE, NOT NULL, DEFAULT |
| 15 | Kiểu dữ liệu chuyên sâu | Số, chuỗi, ngày giờ, UUID, ARRAY, JSONB, ENUM, kiểu tự định nghĩa |
Phần E — Biểu thức, công cụ, thực hành
| # | Bài | Nội dung chính |
|---|---|---|
| 16 | Biểu thức điều kiện - CASE, COALESCE, NULLIF, CAST | CASE, COALESCE, NULLIF, CAST |
| 17 | Lệnh psql | Các lệnh meta của psql |
| 18 | Công thức thực dụng - EXPLAIN, xóa trùng, so sánh bảng | So sánh 2 bảng, xóa dòng trùng, số ngẫu nhiên, EXPLAIN, PostgreSQL vs MySQL |
🎯 Lộ trình gợi ý
Tuần 1 → 01, 02, 03 (chạy được truy vấn đầu tiên)
Tuần 2 → 04, 05, 06 (kết hợp nhiều bảng)
Tuần 3 → 07, 08, 09 (truy vấn nâng cao)
Tuần 4 → 10, 11, 12 (ghi dữ liệu an toàn)
Tuần 5 → 13, 14, 15 (tự thiết kế schema)
Tuần 6 → 16, 17, 18 (tinh chỉnh & vận hành)
🔑 Bảng tra cứu nhanh — thứ tự thực thi của một câu SELECT
Đây là điểm dễ nhầm nhất khi mới học. PostgreSQL không chạy câu lệnh theo thứ tự bạn viết:
| Thứ tự viết | Thứ tự thực thi | Mệnh đề |
|---|---|---|
| 1 | 5 | SELECT |
| 2 | 1 | FROM / JOIN |
| 3 | 2 | WHERE |
| 4 | 3 | GROUP BY |
| 5 | 4 | HAVING |
| 6 | 6 | DISTINCT |
| 7 | 7 | ORDER BY |
| 8 | 8 | LIMIT / OFFSET |
Hệ quả thực tế:
- Không dùng được bí danh cột (
AS) trongWHERE— vìWHEREchạy trướcSELECT. → Truy vấn dữ liệu - SELECT, alias, ORDER BY, DISTINCT - Nhưng dùng được bí danh trong
ORDER BYvàGROUP BY— vì chúng chạy sau (hoặc PostgreSQL cho phép đặc cách). WHERElọc dòng,HAVINGlọc nhóm. → Nhóm dữ liệu - GROUP BY, HAVING, hàm tổng hợp
📚 Nguồn tham khảo
- PostgreSQL Tutorial (Neon) — nguồn gốc của cấu trúc tài liệu này
- Tài liệu chính thức PostgreSQL
- PostgreSQL Wiki — Don’t Do This