Bốn phần của một câu truy vấn
Câu `SELECT` chỉ **đọc** dữ liệu. `SELECT` nêu cột muốn xem; `FROM` nêu bảng; `WHERE` chọn hàng thỏa điều kiện; `ORDER BY` sắp các hàng kết quả. `WHERE` và `ORDER BY` có thể bỏ qua khi không cần. `ASC` là tăng dần, `DESC` là giảm dần; nếu cần thứ tự xác định, hãy viết `ORDER BY` rõ ràng.
Ví dụ trên CSDL thử:
```sql
SELECT idNhacsi, tenNhacsi
FROM btvn19_lab.nhacsi
WHERE tenNhacsi LIKE 'M%'
ORDER BY idNhacsi DESC;
```
Đây là câu tìm tên bắt đầu bằng M, trả hai cột và xếp mã giảm dần. Nếu bảng có `Mai An` mã 1 và `Hà Vy` mã 2, kết quả chỉ có Mai An. Mã 1 là dữ liệu của máy thử, không phải mã bắt buộc trên máy học sinh.
Chạy và đối chiếu kết quả
Trong HeidiSQL, mở CSDL thực hành, chọn thẻ **Query/Truy vấn**, nhập câu SQL rồi bấm nút chạy hoặc **F9** trong bản đã kiểm. Kiểm tiêu đề cột, số hàng và giá trị trước khi kết luận. Nếu không có hàng, xét điều kiện `WHERE` và dữ liệu hiện có; nếu báo không thấy bảng, kiểm CSDL/tên bảng; nếu chỉ có quyền đọc, `SELECT` vẫn có thể chạy mà không cần quyền sửa.
SGK minh họa `WHERE tenNhacsi LIKE 'P%' ORDER BY tenNhacsi`; câu ấy chỉ chọn tên bắt đầu bằng P trong dữ liệu của sách. Để tìm đoạn P ở bất kì vị trí nào, dùng `'%P%'`. Kí tự tiếng Việt có dấu và chữ hoa/thường được so theo collation của CSDL, nên không khẳng định mọi máy cho cùng tập kết quả khi chuỗi tìm kiếm khác dấu.
Bài luyện
Trong `SELECT idNhacsi, tenNhacsi FROM nhacsi WHERE tenNhacsi LIKE 'M%'`, phần nào chọn hàng?
SELECT chọn cột.
FROM nêu bảng.
WHERE giữ các hàng thỏa điều kiện.
Dấu phẩy tách tên cột.
Lời giải
`WHERE tenNhacsi LIKE 'M%'` lọc các hàng có tên bắt đầu bằng M.
Bài luyện
Câu `SELECT idNhacsi, tenNhacsi FROM nhacsi ORDER BY idNhacsi DESC;` xếp thế nào?
Không sắp theo tenNhacsi.
DESC yêu cầu giảm dần theo idNhacsi.
ASC mới là tăng dần.
Không sắp theo tên.
Lời giải
`ORDER BY idNhacsi DESC` đặt mã lớn trước mã nhỏ trong kết quả.
Bài luyện
Câu SELECT hợp lệ chạy nhưng trả 0 hàng. Kết luận nào hợp lí nhất?
Bảng vẫn có thể có hàng khác.
Truy vấn đọc không đổi mã.
Điều kiện có thể không khớp hàng nào.
SELECT không xóa dữ liệu.
Lời giải
Kết quả 0 hàng chỉ cho biết dữ liệu hiện tại không có hàng thỏa điều kiện lọc; hãy kiểm điều kiện và bảng đang truy vấn.
Đang học