Tổng quan các lệnh SQL cơ bản
Bài viết này hướng dẫn chi tiết 4 lệnh SQL cơ bản: SELECT, INSERT, UPDATE, DELETE với ví dụ thực tế dùng bảng quản lý sinh viên Việt Nam.
Nếu chưa biết SQL là gì, hãy đọc SQL là gì? Hướng dẫn SQL cơ bản từ đầu.
Bảng luyện tập
-- Tạo bảng sinh viên
CREATE TABLE sinh_vien (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ho_ten TEXT NOT NULL,
tuoi INTEGER,
email TEXT,
nganh TEXT,
diem_tb REAL
);
-- Thêm dữ liệu mẫu
INSERT INTO sinh_vien (ho_ten, tuoi, email, nganh, diem_tb) VALUES
('Nguyễn Văn Minh', 20, 'minh@email.com', 'CNTT', 8.5),
('Trần Thị Lan', 21, 'lan@email.com', 'CNTT', 9.0),
('Lê Hoàng Nam', 19, 'nam@email.com', 'Kinh tế', 7.5),
('Phạm Thị Mai', 22, 'mai@email.com', 'CNTT', 8.0),
('Võ Đức Hùng', 20, 'hung@email.com', 'Marketing', 7.0),
('Nguyễn Thị Hoa', 21, 'hoa@email.com', 'Kinh tế', 8.5),
('Đặng Văn Tùng', 23, 'tung@email.com', 'CNTT', 6.5);
SELECT — Truy vấn dữ liệu
SELECT cơ bản
SELECT * FROM sinh_vien;
SELECT ho_ten, nganh, diem_tb FROM sinh_vien;
WHERE — Lọc theo điều kiện
SELECT * FROM sinh_vien WHERE nganh = 'CNTT';
SELECT * FROM sinh_vien WHERE diem_tb >= 8.0;
SELECT * FROM sinh_vien WHERE nganh = 'CNTT' AND diem_tb >= 8.0;
SELECT * FROM sinh_vien WHERE nganh = 'CNTT' OR nganh = 'Marketing';
SELECT * FROM sinh_vien WHERE ho_ten LIKE '%Nguyễn%';
SELECT * FROM sinh_vien WHERE tuoi BETWEEN 20 AND 22;
SELECT * FROM sinh_vien WHERE nganh IN ('CNTT', 'Marketing');
ORDER BY — Sắp xếp
SELECT * FROM sinh_vien ORDER BY diem_tb DESC;
SELECT * FROM sinh_vien ORDER BY ho_ten ASC;
LIMIT và DISTINCT
SELECT * FROM sinh_vien ORDER BY diem_tb DESC LIMIT 3;
SELECT DISTINCT nganh FROM sinh_vien;
INSERT — Thêm dữ liệu
INSERT INTO sinh_vien (ho_ten, tuoi, email, nganh, diem_tb)
VALUES ('Bùi Văn Long', 20, 'long@email.com', 'CNTT', 7.5);
INSERT INTO sinh_vien (ho_ten, tuoi, email, nganh, diem_tb) VALUES
('Hoàng Thị Thảo', 19, 'thao@email.com', 'Marketing', 8.0),
('Phan Đức Anh', 22, 'anh@email.com', 'Kinh tế', 7.0);
UPDATE — Cập nhật dữ liệu
UPDATE sinh_vien SET email = 'minh.nguyen@gmail.com'
WHERE ho_ten = 'Nguyễn Văn Minh';
-- ⚠ QUAN TRỌNG: Luôn dùng WHERE!
-- UPDATE sinh_vien SET diem_tb = 0; -- NGUY HIỂM!
DELETE — Xóa dữ liệu
DELETE FROM sinh_vien WHERE id = 7;
-- ⚠ CẢNH BÁO: DELETE không WHERE sẽ xóa HẾT!
-- DELETE FROM sinh_vien; -- NGUY HIỂM!
Hàm tổng hợp (Aggregate Functions)
SELECT COUNT(*) AS tong_sv FROM sinh_vien;
SELECT AVG(diem_tb) AS diem_tb_chung FROM sinh_vien;
SELECT MAX(diem_tb) AS diem_cao_nhat FROM sinh_vien;
SELECT MIN(diem_tb) AS diem_thap_nhat FROM sinh_vien;
GROUP BY — Nhóm dữ liệu
SELECT nganh, COUNT(*) AS so_luong FROM sinh_vien GROUP BY nganh;
SELECT nganh, AVG(diem_tb) AS diem_tb_nganh
FROM sinh_vien GROUP BY nganh;
SELECT nganh, AVG(diem_tb) AS diem_tb_nganh
FROM sinh_vien GROUP BY nganh HAVING AVG(diem_tb) >= 8.0;
Bài tập thực hành
- Hiển thị tên và điểm trung bình của tất cả sinh viên
- Tìm sinh viên ngành CNTT, sắp xếp theo điểm giảm dần
- Tìm sinh viên từ 20 tuổi trở lên có điểm >= 8.0
- Đếm số sinh viên và tính điểm TB theo từng ngành
- Tìm sinh viên có điểm cao nhất
Câu hỏi thường gặp (FAQ)
Hỏi: WHERE và HAVING khác nhau thế nào?
Trả lời: WHERE lọc từng hàng trước khi nhóm. HAVING lọc nhóm sau khi GROUP BY.
Hỏi: Kiểm tra NULL thế nào?
Trả lời: Dùng IS NULL thay vì = NULL. Ví dụ: WHERE email IS NULL.
Bước tiếp theo
- Ôn SQL cơ bản → SQL là gì?