SELECT và WHERE
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
Cửa hàng có hàng nghìn sản phẩm, nhưng khách chỉ muốn xem món dưới 10.000đ. Đọc cả bảng rồi tự lọc bằng mắt là không khả thi. Bài này hướng dẫn chọn đúng cột và lọc đúng dòng ngay trong câu SQL.
Khái niệm
🔍 SELECT: câu lệnh đọc dữ liệu, cho biết lấy những cột nào từ bảng nào.
🎯 WHERE: điều kiện lọc, chỉ giữ lại những dòng thoả điều kiện.
Ví dụ
SELECT name, price
FROM products
WHERE price < 10000;SELECT name, price: chỉ lấy hai cột, thay vì*lấy tất cả.FROM products: đọc từ bảngproducts.WHERE price < 10000: chỉ giữ sản phẩm giá dưới 10.000đ.
WHERE, ORDER BY và việc chọn cột làm việc như Where, OrderBy, Select
của LINQ, nhưng chạy ngay trong database.
Các toán tử hay dùng trong WHERE:
| Toán tử | Ý nghĩa | Ví dụ |
|---|---|---|
= <> |
bằng, khác (C#: ==, !=) |
city = 'Hà Nội' |
> < >= <= |
so sánh | stock > 0 |
AND OR NOT |
kết hợp điều kiện (C#: &&, ||, !) |
stock > 0 AND price < 10000 |
BETWEEN a AND b |
nằm trong khoảng, tính cả hai đầu | price BETWEEN 5000 AND 12000 |
IN (...) |
bằng một trong các giá trị | city IN ('Hà Nội', 'TP.HCM') |
LIKE |
khớp mẫu: % là nhiều ký tự bất kỳ |
name LIKE 'B%' |
Thử ngay
SELECT name, price
FROM products
WHERE price BETWEEN 5000 AND 12000
ORDER BY price;Đoán trước khi chạy: Vở giá đúng 12000. Nó có nằm trong kết quả không?
Xem kết quả
| NAME | PRICE |
|---|---|
| Bút bi | 5000 |
| Thước | 7000 |
| Vở | 12000 |
Có. BETWEEN tính cả hai đầu khoảng, nên 5000 và 12000 đều được giữ lại.
Lỗi hay gặp
Đặt chuỗi trong nháy kép theo thói quen C#. Oracle hiểu "Vở" là tên cột, và báo
ORA-00904: invalid identifier.
-- SAI — lỗi: "Vở" bị hiểu là tên cột
SELECT * FROM products WHERE name = "Vở";-- ĐÚNG — chuỗi dùng nháy đơn
SELECT * FROM products WHERE name = 'Vở';Trộn AND với OR mà không có ngoặc. AND được tính trước OR, nên
câu dưới lấy mọi khách ở Hà Nội, cộng với khách tên An ở Đà Nẵng.
-- SAI — muốn khách tên An ở Hà Nội hoặc Đà Nẵng
SELECT name, city FROM customers
WHERE city = 'Hà Nội' OR city = 'Đà Nẵng'
AND name = 'An';-- ĐÚNG — ngoặc gom hai thành phố lại trước
SELECT name, city FROM customers
WHERE (city = 'Hà Nội' OR city = 'Đà Nẵng')
AND name = 'An';Tóm tắt
SELECT cột FROM bảng WHERE điều kiện.- Chỉ lấy những cột cần, tránh
SELECT *trong code thật. BETWEENtính cả hai đầu,INso với danh sách,LIKEkhớp mẫu với%.- Chuỗi dùng nháy đơn. Trộn
ANDvớiORthì thêm ngoặc.
Tự kiểm tra
0/3 câuCâu nào lấy sản phẩm có tên bắt đầu bằng chữ "B"?
WHERE stock > 0 AND price < 10000 OR price > 400000 được Oracle hiểu thế nào?
Cách nào gọn nhất để lấy khách ở Hà Nội, Đà Nẵng hoặc Huế?