Cheat sheet SQL
Cập nhật lần cuối
Truy vấn dữ liệu (SELECT)
Phần cốt lõi của SQL: đọc các hàng từ một hoặc nhiều bảng.
| Thao tác | Cú pháp |
|---|---|
| Chọn tất cả các cột | SELECT * FROM users; |
| Chọn một số cột | SELECT id, name FROM users; |
| Đổi tên cột (alias) | SELECT name AS full_name FROM users; |
| Giá trị không trùng lặp | SELECT DISTINCT country FROM users; |
| Giới hạn số hàng | SELECT * FROM users LIMIT 10; |
| Bỏ qua rồi giới hạn (phân trang) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Đếm số hàng | SELECT COUNT(*) FROM users; |
Lọc hàng (WHERE)
Thu hẹp các hàng mà truy vấn trả về.
| Thao tác | Cú pháp |
|---|---|
| So sánh bằng / so sánh khác | WHERE age >= 18 |
| Nhiều điều kiện cùng lúc | WHERE age >= 18 AND country = 'US' |
| Một trong hai điều kiện | WHERE role = 'admin' OR role = 'owner' |
| Thuộc một tập giá trị | WHERE country IN ('US', 'CA', 'MX') |
| Nằm trong một khoảng | WHERE price BETWEEN 10 AND 50 |
| So khớp theo mẫu | WHERE email LIKE '%@gmail.com' |
| Là / không là null | WHERE deleted_at IS NULL |
| Phủ định | WHERE status NOT IN ('archived') |
Sắp xếp và gom nhóm
| Thao tác | Cú pháp |
|---|---|
| Sắp xếp tăng dần (mặc định) | ORDER BY created_at |
| Sắp xếp giảm dần | ORDER BY created_at DESC |
| Sắp xếp theo nhiều cột | ORDER BY country, name DESC |
| Gom nhóm các hàng | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Lọc các nhóm | GROUP BY country HAVING COUNT(*) > 100 |
JOIN
Kết hợp các hàng từ hai bảng dựa trên một cột khớp nhau.
| Kiểu JOIN | Kết quả trả về | Cú pháp |
|---|---|---|
| INNER JOIN | Chỉ các hàng khớp ở cả hai bảng | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Mọi hàng bên trái kèm các hàng khớp (còn lại là null) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Mọi hàng bên phải kèm các hàng khớp | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Mọi hàng của cả hai bên | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Mọi tổ hợp (tích Descartes) | FROM sizes CROSS JOIN colors |
| Tự JOIN (self join) | Bảng được JOIN với chính nó | FROM employees e JOIN employees m ON e.manager_id = m.id |
Hàm tổng hợp
Tính ra một giá trị duy nhất trên một nhóm hàng.
| Hàm | Tác dụng |
|---|---|
COUNT(*) | Số hàng |
COUNT(col) | Số giá trị khác null |
SUM(col) | Tổng của một cột số |
AVG(col) | Giá trị trung bình |
MIN(col) / MAX(col) | Giá trị nhỏ nhất / lớn nhất |
STRING_AGG(col, ',') | Nối các giá trị (Postgres; GROUP_CONCAT trong MySQL) |
Window function
Tính toán trên một tập hàng mà không gộp chúng lại thành một.
| Hàm | Cú pháp |
|---|---|
| Số thứ tự hàng | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Xếp hạng (có nhảy hạng) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Xếp hạng liên tiếp (dense rank) | DENSE_RANK() OVER (ORDER BY score DESC) |
| Tổng lũy kế | SUM(amount) OVER (ORDER BY created_at) |
| Hàng trước / hàng sau | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Thay đổi dữ liệu (INSERT, UPDATE, DELETE)
| Thao tác | Cú pháp |
|---|---|
| Thêm một hàng | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Thêm nhiều hàng | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Cập nhật hàng | UPDATE users SET active = true WHERE id = 1; |
| Xóa hàng | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Định nghĩa bảng (DDL)
| Thao tác | Cú pháp |
|---|---|
| Tạo bảng | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Thêm cột | ALTER TABLE users ADD COLUMN age INTEGER; |
| Xóa cột | ALTER TABLE users DROP COLUMN age; |
| Xóa bảng | DROP TABLE users; |
| Tạo index | CREATE INDEX idx_users_email ON users (email); |
| Khóa ngoại | FOREIGN KEY (user_id) REFERENCES users (id) |
Mọi câu lệnh, mệnh đề và kiểu JOIN trong SQL bạn hay dùng, gom trong một trang. Cheat sheet SQL này là bảng tra cứu nhanh để truy vấn và thay đổi dữ liệu quan hệ: các mệnh đề SELECT, bốn kiểu JOIN, gom nhóm và tổng hợp, cùng các lệnh DDL và DML để tạo và cập nhật bảng.
Cú pháp ở đây là SQL chuẩn ANSI, chạy được trên PostgreSQL, MySQL, SQLite và SQL Server, trừ khi có ghi chú khác. Sao chép phần bạn cần, hoặc chạy thử mọi truy vấn ngay trong playground SQL, không cần cài cơ sở dữ liệu. Mới làm quen với cơ sở dữ liệu? Khóa học SQL tương tác miễn phí của Coddy hướng dẫn bạn qua truy vấn, JOIN và tổng hợp dữ liệu.
Câu hỏi thường gặp về cheat sheet SQL
Cheat sheet SQL này có miễn phí không?
Có. Cheat sheet SQL này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra một mệnh đề, một kiểu JOIN hay một hàm.
Cheat sheet này có dùng được cho MySQL, PostgreSQL và SQLite không?
SELECT, WHERE, JOIN, GROUP BY và DDL ở đây là SQL chuẩn ANSI, chạy giống nhau trên MySQL, PostgreSQL, SQLite và SQL Server. Một vài tính năng nâng cao khác nhau giữa các phương ngữ SQL, thường gặp nhất là upsert và nối chuỗi khi tổng hợp, và các hàng đó đều ghi chú điểm khác biệt.INNER JOIN và LEFT JOIN khác nhau thế nào?
INNER JOIN chỉ trả về các hàng có giá trị khớp ở cả hai bảng. LEFT JOIN trả về mọi hàng của bảng bên trái (bảng thứ nhất) và điền NULL vào các cột của bảng bên phải khi không có hàng khớp. Cách này hữu ích khi bạn muốn lấy mọi người dùng, kể cả những người chưa có đơn hàng nào.Có thể luyện tập các lệnh SQL này online không?
SELECT đến JOIN và window function.Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung đi từ các thao tác thông dụng nhất (truy vấn và lọc dữ liệu) đến các thao tác nâng cao (window function), nên ngay ngày đầu bạn đã dùng được các phần trên cùng, rồi dần làm quen với phần còn lại.