Dữ liệu để đọc kết quả
Bảng **BanNhac** giả định có ba hàng:
| MaBai | TenBai | MaTacGia |
|---|---|---|
| K01 | Mưa đầu mùa | T01 |
| K02 | Ngày nắng | T02 |
| K03 | Gió qua hiên | T01 |
Một câu `SELECT` có thể nêu **cột cần lấy**, bảng ở `FROM`, rồi dùng `WHERE` để giữ những hàng thỏa điều kiện. Nếu muốn thứ tự kết quả xác định, dùng `ORDER BY`. Không có `ORDER BY` thì không nên suy thứ tự trả về từ thứ tự đang nhìn trong bảng.
Lọc tác giả T01
```sql
SELECT MaBai, TenBai
FROM BanNhac
WHERE MaTacGia = 'T01'
ORDER BY TenBai;
```
`WHERE` giữ K01 và K03 vì hai hàng có mã tác giả T01; K02 bị loại. `SELECT` chỉ đưa ra MaBai và TenBai, không hiển thị MaTacGia trong kết quả. `ORDER BY TenBai` xếp theo tên bài: **K03 — Gió qua hiên**, rồi **K01 — Mưa đầu mùa**. Cách so sánh chữ cụ thể có thể tùy cấu hình ngôn ngữ, nhưng hai tên này có thứ tự rõ theo chữ đầu G trước M.
Bài luyện
Câu truy vấn trong bài chọn những mã bài nào?
K02 có MaTacGia T02.
K02 không thỏa điều kiện.
K01 và K03 đều có T01.
WHERE loại K02.
Lời giải
Điều kiện WHERE MaTacGia = T01 giữ hai hàng K01 và K03. K02 mang mã T02 nên không xuất hiện.
Bài luyện
Trong kết quả câu truy vấn, trường nào không được hiển thị dù được dùng để lọc?
MaBai có trong SELECT.
TenBai có trong SELECT.
Hai trường này được chọn.
MaTacGia chỉ nằm trong WHERE, không nằm trong danh sách SELECT.
Lời giải
SELECT liệt kê MaBai và TenBai là hai cột kết quả. MaTacGia được dùng để kiểm điều kiện T01 nhưng không được chọn để hiển thị.
Bài luyện
Theo `ORDER BY TenBai` trong ví dụ, hàng nào đứng trước?
Tên bắt đầu bằng G đứng trước tên bắt đầu bằng M trong dữ liệu này.
Mưa đầu mùa đứng sau Gió qua hiên.
K02 bị WHERE loại.
ORDER BY sắp xếp kết quả.
Lời giải
Sau WHERE còn K01 và K03. ORDER BY TenBai đặt “Gió qua hiên” trước “Mưa đầu mùa”, nên K03 đứng trước K01.
Đang học