1. Truy vấn cơ bản
Để lấy dữ liệu từ một hoặc nhiều cột trong bảng.
Lấy toàn bộ dữ liệu:
SELECT * FROM ten_bang;Lấy các cột cụ thể:
SELECT cot1, cot2 FROM ten_bang;Loại bỏ các giá trị trùng lặp:
SELECT DISTINCT ten_cot FROM ten_bang;
2. Lọc dữ liệu với WHERE
Sử dụng các toán tử để giới hạn kết quả trả về.
Toán tử so sánh:
=,>,<,>=,<=,<>(khác).Tìm kiếm theo khoảng:
BETWEEN ... AND ...(Ví dụ: Tìm giáo viên vào làm từ năm 2020 đến 2025).Tìm kiếm tập hợp:
IN ('giatri1', 'giatri2').Tìm kiếm mẫu (LIKE): *
%: Đại diện cho một chuỗi ký tự bất kỳ (Ví dụ:LIKE 'Nguyễn%'tìm người họ Nguyễn).
3. Sắp xếp kết quả (ORDER BY)
Giúp dữ liệu hiển thị ngăn nắp hơn.
ASC: Sắp xếp tăng dần (mặc định).
DESC: Sắp xếp giảm dần.
Ví dụ:
ORDER BY nam_vao_lam DESC;(Người mới vào làm xếp lên đầu).
4. Giới hạn kết quả (LIMIT)
Rất hữu ích khi làm các chức năng phân trang trên trang web.
Cú pháp:
SELECT * FROM ten_bang LIMIT số_dòng;Ví dụ: Lấy ra 5 môn học có số tín chỉ cao nhất.
Bài tập thực hành
1: Tạo bảng Sinh viên
Yêu cầu:
Tạo bảng
SinhVienvới các cột:MaSV(INT, khóa chính, tự tăng)HoTen(VARCHAR(50))NgaySinh(DATE)GioiTinh(ENUM(‘Nam’,’Nữ’))QueQuan(VARCHAR(50))
Thêm ít nhất 5 bản ghi vào bảng.
Viết câu lệnh SELECT để:
Lấy toàn bộ danh sách sinh viên.
Lấy danh sách sinh viên quê ở “Hà Nội”.
Lấy danh sách sinh viên sinh sau năm 2000.
2: Bảng Điểm
Yêu cầu:
Tạo bảng
DiemThivới các cột:MaSV(INT, khóa ngoại tham chiếuSinhVien.MaSV)MonHoc(VARCHAR(30))Diem(FLOAT)
Thêm dữ liệu cho mỗi sinh viên ít nhất 2 môn học.
Viết câu lệnh SELECT để:
Hiển thị điểm các môn của sinh viên có
MaSV = 1.Tìm sinh viên có điểm môn “Toán” lớn hơn 8.
Tính điểm trung bình của từng sinh viên.
3: JOIN bảng
Yêu cầu:
Viết câu lệnh SELECT để hiển thị:
Họ tên sinh viên và điểm môn “Tin học”.
Họ tên sinh viên cùng với điểm trung bình của họ (sử dụng
GROUP BY).
4: Nâng cao
Yêu cầu:
Tìm 3 sinh viên có điểm trung bình cao nhất.
Đếm số lượng sinh viên theo từng quê quán.
Hiển thị danh sách sinh viên chưa có điểm thi (dùng
LEFT JOIN).
Dưới đây là dữ liệu mẫu
📌 Bảng SinhVien
CREATE TABLE SinhVien (
MaSV INT AUTO_INCREMENT PRIMARY KEY,
HoTen VARCHAR(50),
NgaySinh DATE,
GioiTinh ENUM('Nam','Nữ'),
QueQuan VARCHAR(50)
);
INSERT INTO SinhVien (HoTen, NgaySinh, GioiTinh, QueQuan) VALUES
('Nguyễn Văn A', '2001-05-12', 'Nam', 'Hà Nội'),
('Trần Thị B', '1999-11-23', 'Nữ', 'Hải Phòng'),
('Lê Văn C', '2002-07-01', 'Nam', 'Đà Nẵng'),
('Phạm Thị D', '2000-03-15', 'Nữ', 'Hà Nội'),
('Hoàng Văn E', '2003-09-20', 'Nam', 'Huế');
📌 Bảng DiemThi
CREATE TABLE DiemThi (
MaSV INT,
MonHoc VARCHAR(30),
Diem FLOAT,
FOREIGN KEY (MaSV) REFERENCES SinhVien(MaSV)
);
INSERT INTO DiemThi (MaSV, MonHoc, Diem) VALUES
(1, 'Toán', 8.5),
(1, 'Tin học', 7.0),
(2, 'Toán', 6.5),
(2, 'Tin học', 9.0),
(3, 'Toán', 9.2),
(3, 'Tin học', 8.8),
(4, 'Toán', 7.5),
(4, 'Tin học', 6.0),
(5, 'Toán', 5.5),
(5, 'Tin học', 7.2);
📌 Một số câu lệnh Query mẫu
Danh sách sinh viên quê Hà Nội:
SELECT * FROM SinhVien WHERE QueQuan = 'Hà Nội';
Sinh viên sinh sau năm 2000:
SELECT * FROM SinhVien WHERE YEAR(NgaySinh) > 2000;
Điểm các môn của sinh viên có MaSV = 1:
SELECT * FROM DiemThi WHERE MaSV = 1;
Sinh viên có điểm môn Toán > 8:
SELECT s.HoTen, d.Diem
FROM SinhVien s
JOIN DiemThi d ON s.MaSV = d.MaSV
WHERE d.MonHoc = 'Toán' AND d.Diem > 8;
Điểm trung bình của từng sinh viên:
SELECT s.HoTen, AVG(d.Diem) AS DiemTB
FROM SinhVien s
JOIN DiemThi d ON s.MaSV = d.MaSV
GROUP BY s.MaSV, s.HoTen;
Top 3 sinh viên có điểm trung bình cao nhất:
SELECT s.HoTen, AVG(d.Diem) AS DiemTB
FROM SinhVien s
JOIN DiemThi d ON s.MaSV = d.MaSV
GROUP BY s.MaSV, s.HoTen
ORDER BY DiemTB DESC
LIMIT 3;