Ok, tụi mình đã biết cách dùng lệnh SELECT rồi. Ít nhất thì cũng đã biết cách lấy dữ liệu từ database, chọn các cột cần thiết và tạo query để biến dữ liệu thô thành thông tin hữu ích. Đã đến lúc thêm chút "filter" vào bộ công cụ thần thánh của mình. Đúng rồi, hôm nay tụi mình sẽ nói về lọc dữ liệu bằng các toán tử so sánh như =, >, < và <>.
Khi làm việc với bảng to đùng, chắc chắn bạn không muốn xem hết tất cả dữ liệu (trừ khi bạn thích chìm trong hỗn loạn). Để chỉ lấy những dòng cần thiết, SQL dùng từ khóa WHERE. Nó cho phép bạn đặt điều kiện mà mỗi dòng phải thỏa mãn để xuất hiện trong kết quả query. Và cho các điều kiện này, tụi mình dùng toán tử so sánh.
Cú pháp lọc với WHERE
SELECT cột1, cột2
FROM bảng
WHERE điều_kiện;
Cấu trúc đơn giản: tụi mình thêm từ WHERE sau FROM và viết điều kiện cụ thể mà các dòng phải đáp ứng.
Lấy ví dụ truy xuất dữ liệu từ bảng students:
SELECT name, age
FROM students
WHERE age > 18;
Query này chỉ chọn những sinh viên (tên và tuổi) mà tuổi lớn hơn 18. Đơn giản nhỉ? Giờ thì cùng lặn vào thế giới toán tử so sánh nhé.
Các toán tử so sánh cơ bản
Trong SQL có vài toán tử so sánh giúp bạn lọc dữ liệu đúng ý. Thực ra bạn đã biết chúng từ toán học rồi, chỉ cần làm rõ lại thôi. Đây là danh sách những cái hay dùng nhất:
=— Bằng.<>— Không bằng (có thể dùng!=ở một số DBMS, nhưng nên dùng<>vì nó là chuẩn SQL).>— Lớn hơn.<— Nhỏ hơn.>=— Lớn hơn hoặc bằng.<=— Nhỏ hơn hoặc bằng.
Bảng toán tử so sánh
| Toán tử | Ý nghĩa | Ví dụ | Kết quả |
|---|---|---|---|
= |
Bằng | age = 20 |
Trả về các dòng mà tuổi bằng 20 |
<> |
Không bằng | age <> 20 |
Trả về các dòng mà tuổi không bằng 20 |
> |
Lớn hơn | age > 18 |
Trả về các dòng mà tuổi lớn hơn 18 |
< |
Nhỏ hơn | age < 18 |
Trả về các dòng mà tuổi nhỏ hơn 18 |
>= |
Lớn hơn hoặc bằng | age >= 18 |
Trả về các dòng mà tuổi 18 hoặc lớn hơn |
<= |
Nhỏ hơn hoặc bằng | age <= 18 |
Trả về các dòng mà tuổi 18 hoặc nhỏ hơn |
Ví dụ sử dụng toán tử so sánh
Ví dụ 1: Lấy sinh viên lớn hơn 20 tuổi
Đây là bảng của tụi mình:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
Ở đây tụi mình đặt điều kiện age > 20 để chỉ lấy sinh viên có tuổi lớn hơn 20. Nếu có ai 19 tuổi thì tiếc là không được chọn đâu nhé.
Kết quả sẽ như này:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
Bạn Anna Song không được chọn vì mới có 19 tuổi thôi.
Ví dụ 2: Lấy nhân viên có lương không dưới 50 000
Đây là bảng employees:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Và đây là SQL query:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
Query này sẽ trả về tất cả nhân viên có lương bằng 50 000 hoặc cao hơn. Bằng cũng tính luôn nhé!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Ví dụ 3: Lấy sản phẩm có giá nhỏ hơn 100
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
Nếu bạn có shop online, query này sẽ chọn tất cả sản phẩm giá dưới 100 (kiểu như chương trình khuyến mãi "Tất cả dưới 99k!").
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
Ví dụ 4: Loại trừ user với id nhất định
SELECT id, username
FROM users
WHERE id <> 1;
Query này chọn tất cả user trừ user có id bằng 1. Toán tử <> nghĩa là "lấy tất cả ai không bằng giá trị này".
Bảng users:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Kết quả query:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Lỗi thường gặp khi lọc với toán tử so sánh
Khi mới tập viết query có filter, lỗi là chuyện thường. Đây là vài trường hợp phổ biến bạn nên nhớ:
Vấn đề 1: Sai tên cột
Nếu bạn viết sai tên cột trong query, PostgreSQL sẽ báo lỗi. Ví dụ:
SELECT name, age
FROM students
WHERE ages > 18; -- Lỗi: cột "ages" không tồn tại
Nhớ kiểm tra kỹ tên cột trước khi viết query nha.
Vấn đề 2: Dùng sai toán tử so sánh
Đôi khi newbie hay nhầm toán tử. Ví dụ:
SELECT name, age
FROM students
WHERE age => 18; -- Lỗi: toán tử sai
Cú pháp đúng là >=, không phải =>.
Vấn đề 3: Lọc theo giá trị không tồn tại
Nếu bạn cố lọc theo giá trị không có trong bảng, query vẫn chạy nhưng trả về rỗng. Ví dụ:
SELECT name
FROM students
WHERE age = 999; -- Kết quả: 0 dòng
Đây không phải lỗi cú pháp, nhưng dễ gây bối rối nếu bạn mong có dữ liệu.
Ứng dụng thực tế
Lọc dữ liệu bằng toán tử so sánh dùng trong rất nhiều tình huống:
- Phân tích dữ liệu: ví dụ, chọn tất cả khách hàng đã chi hơn 10 000 rupee.
- Báo cáo: chọn nhân viên có lương trên trung bình.
- Giám sát: theo dõi user không hoạt động trong tháng vừa rồi.
SQL giúp bạn lấy dữ liệu cần thiết từ bảng cực lớn rất nhanh, và toán tử so sánh là bước đầu tiên trên con đường đó.
GO TO FULL VERSION