Lộ trình học SQL
Học từ cơ bản đến nâng cao. Mỗi bài có lý thuyết ngắn gọn, trình mô phỏng thực thi bằng animation và khu vực thực hành chạy SQL thật.
Cơ bản
11 bàiDatabase là gì?
Hiểu database, DBMS và vì sao ta dùng SQL.
Table, row, column
Cấu trúc dữ liệu: bảng, dòng, cột, khóa chính và khóa ngoại.
SELECT cơ bản
Đọc toàn bộ dữ liệu từ một bảng với SELECT *.
SELECT cột cụ thể
Chỉ lấy những cột bạn cần và đặt tên hiển thị bằng AS.
WHERE — lọc dòng
Chỉ giữ lại các dòng thỏa điều kiện.
AND / OR — kết hợp điều kiện
Ghép nhiều điều kiện với AND, OR và NOT.
ORDER BY — sắp xếp
Sắp xếp kết quả tăng dần (ASC) hoặc giảm dần (DESC).
LIMIT — giới hạn số dòng
Lấy N dòng đầu tiên, thường kết hợp ORDER BY để lấy top N.
DISTINCT — loại trùng
Loại bỏ các dòng trùng lặp trong kết quả.
NULL, IS NULL & LIKE
Xử lý giá trị thiếu và tìm chuỗi theo mẫu.
UNION — gộp kết quả
Gộp hai SELECT thành một danh sách (loại trùng hoặc giữ hết).
Trung cấp
11 bàiINSERT — thêm dữ liệu
Thêm dòng mới vào bảng với INSERT INTO ... VALUES.
UPDATE — cập nhật dữ liệu
Sửa giá trị các dòng thỏa điều kiện với UPDATE ... SET ... WHERE.
DELETE — xóa dữ liệu
Xóa các dòng thỏa điều kiện với DELETE FROM ... WHERE.
Hàm tổng hợp: COUNT / SUM / AVG
Tính toán trên nhiều dòng: đếm, tính tổng, trung bình, min, max.
GROUP BY — gom nhóm
Nhóm các dòng theo cột rồi tính tổng hợp cho từng nhóm.
HAVING — lọc nhóm
Lọc các nhóm sau khi tổng hợp (khác với WHERE lọc dòng).
INNER JOIN — ghép bảng
Ghép dòng của hai bảng khi khóa khớp nhau.
LEFT JOIN — giữ mọi dòng bảng trái
Giữ tất cả dòng bảng trái, phần không khớp bên phải là NULL.
Subquery — truy vấn lồng
Dùng kết quả của một truy vấn bên trong truy vấn khác.
JOIN nhiều bảng
Nối users → orders → (qua user) theo chuỗi JOIN.
EXISTS & CASE
EXISTS kiểm tra tồn tại; CASE rẽ nhánh trong SELECT.
Nâng cao
9 bàiIndex — chỉ mục tăng tốc
So sánh full table scan với index lookup.
Transaction — COMMIT / ROLLBACK
Nhóm nhiều lệnh thành một đơn vị 'tất cả hoặc không gì cả'.
CTE — WITH ... AS
Đặt tên cho truy vấn con để câu lệnh dễ đọc, tái sử dụng.
Window function — ROW_NUMBER
Đánh số / xếp hạng trong từng nhóm mà không gộp dòng.
View — bảng ảo
Lưu một truy vấn dưới dạng bảng ảo tái sử dụng được.
Thứ tự thực thi câu lệnh
SQL viết theo một thứ tự nhưng chạy theo thứ tự khác.
Chuẩn hóa (Normalization)
Tổ chức bảng để giảm trùng lặp và bất thường dữ liệu.
Hiệu năng truy vấn — cơ bản
Mẹo nền tảng để truy vấn nhanh hơn.
SQL Injection — an toàn cơ bản
Vì sao ghép chuỗi vào câu lệnh là nguy hiểm, và cách phòng tránh.
Oracle PL/SQL
11 bàiStored Procedure trên Oracle
Tạo, lưu và gọi procedure với IN/OUT, SQL%ROWCOUNT và lỗi nghiệp vụ.
Procedure parameters — IN / OUT / IN OUT
Hiểu chính xác cách Oracle truyền dữ liệu vào, trả dữ liệu ra và ghi ngược IN OUT.
SELECT INTO và trả nhiều giá trị
Đọc đúng một dòng vào biến PL/SQL và trả nhiều scalar qua OUT parameters.
Exception handling trong procedure
Xử lý NO_DATA_FOUND, TOO_MANY_ROWS và phát lỗi nghiệp vụ ổn định.
Procedure và transaction boundary
Quyết định đúng nơi COMMIT/ROLLBACK và tránh procedure phá transaction của caller.
Implicit cursor và SQL cursor attributes
Đọc ROWCOUNT, FOUND, NOTFOUND sau INSERT/UPDATE/DELETE mà không cần khai báo cursor.
Explicit cursor — OPEN / FETCH / CLOSE
Tự quản lý result set nhiều dòng và điều khiển con trỏ bằng lifecycle đầy đủ.
Parameterized cursor và cursor FOR LOOP
Tái sử dụng cursor với tham số và để FOR LOOP tự OPEN/FETCH/CLOSE.
Cursor FOR UPDATE và WHERE CURRENT OF
Khóa các dòng cursor, cập nhật đúng dòng hiện tại và quản lý lock bằng transaction.
SYS_REFCURSOR — trả result set cho caller
Mở cursor động trong procedure, trả handle qua OUT và để caller FETCH/CLOSE.
Package — tổ chức stored procedures
Đóng gói public API, implementation riêng tư và gọi procedure qua namespace.