Bài 5: Truy vấn dữ liệu cơ bản (SELECT)
I. Mục đích (Objectives)
Sau bài học này, người đọc sẽ:
- Hiểu cú pháp chuẩn của câu lệnh SELECT.
- Biết cách lấy toàn bộ dữ liệu hoặc chỉ lấy một vài cột cần thiết (Tối ưu hóa).
- Sử dụng thành thạo mệnh đề WHERE để lọc dữ liệu theo ý muốn.
- Nắm vững các toán tử so sánh (=, >, <), toán tử logic (AND, OR) và tìm kiếm gần đúng (LIKE).
II. Yêu cầu (Prerequisites)
- Đã có bảng HocSinh có dữ liệu (từ bài tập Import CSV ở Bài 4: Thêm dữ liệu (INSERT) và Cách Import từ Excel vào SQLite).
III. Nội dung chi tiết (Detailed Content)
1. Cấu trúc cơ bản: SELECT … FROM …
Câu lệnh SELECT dùng để trích xuất dữ liệu từ cơ sở dữ liệu. Kết quả trả về được lưu trong một bảng kết quả (Result Set).
a. Lấy tất cả các cột (SELECT *)
Đây là cách nhanh nhất để xem toàn bộ nội dung bảng.
SELECT * FROM HocSinh;
- Giải thích: Dấu sao (*) đại diện cho “tất cả các cột”.
- Lưu ý: Trong thực tế làm phần mềm (Production), hạn chế dùng * nếu bảng có quá nhiều cột không cần thiết để tránh làm chậm ứng dụng.
b. Lấy cột cụ thể (Projection)
Chỉ lấy những thông tin cần thiết. Ví dụ: Chỉ cần xem tên và điểm, không cần xem ID hay ngày sinh.
SELECT ho_ten, diem_tb FROM HocSinh;
- Ưu điểm: Giảm tải đường truyền, giúp ứng dụng chạy nhanh hơn (Kiến thức tối ưu hóa).
2. Lọc dữ liệu với mệnh đề WHERE
Nếu SELECT xác định Cột nào được hiện ra, thì WHERE xác định Dòng nào được chọn.
SELECT cot1, cot2
FROM ten_bang
WHERE dieu_kien;
Ví dụ 1: So sánh bằng (=)
Tìm học sinh có tên là “Nguyễn Văn An”.
SELECT * FROM HocSinh WHERE ho_ten = 'Nguyễn Văn An';
(Lưu ý: Chuỗi ký tự phải đặt trong dấu nháy đơn ‘ ‘).
Ví dụ 2: So sánh hơn/kém (>, <, >=, <=)
Tìm các học sinh có điểm trung bình trên 8.0.
SELECT * FROM HocSinh WHERE diem_tb > 8.0;
Ví dụ 3: Khác nhau (<> hoặc !=)
Tìm học sinh có điểm không phải là 0.
SELECT * FROM HocSinh WHERE diem_tb <> 0;
3. Kết hợp điều kiện (AND, OR)
Thực tế yêu cầu lọc thường phức tạp hơn một điều kiện đơn lẻ.
-
AND (Và): Cả 2 điều kiện phải cùng đúng.
Ví dụ: Tìm học sinh Giỏi (Điểm >= 8.0 VÀ Điểm < 9.0).SELECT * FROM HocSinh WHERE diem_tb >= 8.0 AND diem_tb < 9.0; -
OR (Hoặc): Chỉ cần 1 trong 2 điều kiện đúng.
Ví dụ: Tìm học sinh quá kém (Điểm < 3.5) HOẶC xuất sắc (Điểm = 10).SELECT * FROM HocSinh WHERE diem_tb < 3.5 OR diem_tb = 10;
4. Các toán tử đặc biệt (LIKE, IN, BETWEEN)
Đây là những “vũ khí” lợi hại giúp câu lệnh SQL ngắn gọn và mạnh mẽ hơn.
a. Tìm kiếm gần đúng (LIKE) – Quan trọng cho chức năng Search
Dùng để tìm kiếm chuỗi theo mẫu (pattern).
- Dấu %: Đại diện cho một chuỗi bất kỳ (nhiều ký tự).
- Dấu _: Đại diện cho đúng 1 ký tự (ít dùng hơn).
-
Ví dụ 1: Tìm tất cả học sinh họ “Nguyễn” (Bắt đầu bằng chữ Nguyễn…).
SELECT * FROM HocSinh WHERE ho_ten LIKE 'Nguyễn%'; -
Ví dụ 2: Tìm học sinh có tên chứa chữ “Thị” (Chữ Thị nằm ở giữa).
SELECT * FROM HocSinh WHERE ho_ten LIKE '%Thị%';
b. Tìm trong danh sách (IN)
Thay vì dùng nhiều lệnh OR, ta dùng IN.
Ví dụ: Tìm học sinh có điểm là 8, 9 hoặc 10.
-- Cách dài dòng:
-- WHERE diem_tb = 8 OR diem_tb = 9 OR diem_tb = 10
-- Cách chuyên nghiệp:
SELECT * FROM HocSinh WHERE diem_tb IN (8, 9, 10);
c. Trong khoảng (BETWEEN)
Ví dụ: Tìm học sinh có điểm từ 5 đến 7.
SELECT * FROM HocSinh WHERE diem_tb BETWEEN 5 AND 7;
IV. Tổng kết (Summary)
Hôm nay chúng ta đã học cách “trò chuyện” với cơ sở dữ liệu để lấy thông tin mình cần:
- Dùng SELECT để chọn cột.
- Dùng WHERE để lọc dòng.
- Kết hợp các toán tử AND, OR, LIKE để tạo ra bộ lọc chính xác.
Bài tập về nhà cho bạn đọc: Hãy viết câu lệnh SQL để tìm ra: “Những học sinh có họ ‘Trần’ VÀ có điểm trung bình lớn hơn hoặc bằng 8.0“.
Ở bài tiếp theo: “Sắp xếp (ORDER BY) và Giới hạn dữ liệu (LIMIT)“, chúng ta sẽ học cách làm bảng xếp hạng top học sinh giỏi nhất lớp.
