Toán tử logic là công cụ giúp kết hợp các điều kiện trong truy vấn để lọc dữ liệu phức tạp hơn. Chắc là bạn đã từng gặp chúng trong các ngôn ngữ lập trình rồi. Nếu so sánh truy vấn với chương trình lọc spam trong hộp thư, thì toán tử logic giống như các quy tắc để thư được chuyển vào thư mục "Spam" hoặc ở lại "Hộp thư đến".
SQL là công cụ thường dùng để truy xuất hoặc phân tích dữ liệu. Toán tử logic (AND, OR, NOT) cho phép kết hợp nhiều điều kiện trong một truy vấn, để trả lời các câu hỏi phức tạp hơn, ví dụ như:
- Những sinh viên nào trên 18 tuổi và có điểm "A"?
- Những sản phẩm nào thuộc danh mục "Điện tử" hoặc "Thiết bị gia dụng"?
- Những khách hàng nào chưa từng mua hàng?
Cùng tìm hiểu ba toán tử logic chính trong SQL nhé:
AND: cả hai điều kiện đều phải đúng.OR: chỉ cần một trong hai điều kiện đúng là được.NOT: đảo ngược (phủ định) điều kiện.
Toán tử AND: cả hai điều kiện đều đúng
Toán tử AND cho phép chỉ định rằng cả hai phần của điều kiện đều phải đúng thì dòng dữ liệu mới được chọn.
Cú pháp
SELECT cột1, cột2
FROM bảng
WHERE điều_kiện AND điều_kiện2;
Ví dụ 1: Lọc sinh viên trên 18 tuổi và có điểm "A"
Giả sử có bảng students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Truy vấn:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Kết quả:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Ví dụ 2: Lọc nhân viên thuộc phòng "HR" và lương trên 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Toán tử OR: chỉ cần một điều kiện đúng
Toán tử OR dùng khi muốn chọn các dòng dữ liệu thỏa mãn ít nhất một điều kiện.
Cú pháp
SELECT cột1, cột2
FROM bảng
WHERE điều_kiện OR điều_kiện2;
Ví dụ 1: Lọc sinh viên có điểm "A" hoặc "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Kết quả:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Ví dụ 2: Sản phẩm thuộc danh mục "Điện tử" hoặc giá dưới 100
Bảng products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Tivi | Điện tử | 300 |
| 2 | Bàn ủi | Thiết bị gia dụng | 50 |
| 3 | Điện thoại thông minh | Điện tử | 700 |
| 4 | Ấm đun nước | Thiết bị gia dụng | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Điện tử' OR price < 100;
Kết quả:
| name | category | price |
|---|---|---|
| Tivi | Điện tử | 300 |
| Bàn ủi | Thiết bị gia dụng | 50 |
| Ấm đun nước | Thiết bị gia dụng | 80 |
| Điện thoại thông minh | Điện tử | 700 |
Toán tử NOT: đảo ngược điều kiện
Nếu AND và OR đặt ra điều kiện phải đúng, thì NOT làm ngược lại: nó chọn các dòng mà điều kiện sai.
Cú pháp
SELECT cột1, cột2
FROM bảng
WHERE NOT điều_kiện;
Ví dụ 1: Lọc sinh viên không có điểm "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Kết quả:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Ví dụ 2: Lấy sản phẩm không thuộc danh mục "Điện tử"
SELECT name, category, price
FROM products
WHERE NOT category = 'Điện tử';
Kết hợp các toán tử logic
Có thể kết hợp các toán tử logic để tạo điều kiện phức tạp hơn nữa. Ví dụ, nếu bạn muốn chọn sinh viên trên 18 tuổi và có điểm "A" hoặc "B", bạn có thể kết hợp AND và OR.
Cú pháp kết hợp
SELECT cột1, cột2
FROM bảng
WHERE (điều_kiện1 AND điều_kiện2) OR điều_kiện3;
Ví dụ: Sinh viên trên 18 tuổi có điểm "A" hoặc sinh viên có điểm "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Kết quả:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Thứ tự thực thi các toán tử
Nhớ nhé, SQL thực thi các toán tử logic theo thứ tự sau:
NOTANDOR
Bạn có thể dùng dấu ngoặc để thay đổi thứ tự thực thi. Không có ngoặc thì kết quả có thể bất ngờ lắm đó!
Ví dụ: So sánh có và không có ngoặc
Điều gì sẽ xảy ra với truy vấn này?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Truy vấn này sẽ chọn sinh viên:
- Trên 18 tuổi và có điểm "A".
- Có điểm "B".
Thứ tự thực thi toán tử sẽ cho kết quả giống như khi có ngoặc:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Nhưng nếu thêm ngoặc như sau:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Lúc này chỉ chọn sinh viên trên 18 tuổi có điểm "A" hoặc "B". Dấu ngoặc thực sự thay đổi mọi thứ luôn!
Lỗi thường gặp khi dùng toán tử logic
- Quên dấu ngoặc. Điều này có thể dẫn đến kết quả bất ngờ, nhất là khi kết hợp
ANDvàOR. - Dùng
NOTmà không hiểu rõ sẽ loại bỏ dòng nào. - Dùng sai toán tử logic. Ví dụ, dùng
ANDthay vìORhoặc ngược lại. - Điều kiện quá phức tạp. Điều kiện dài với nhiều
AND,OR,NOTmà không có chú thích sẽ rất khó đọc.
Những toán tử này là nền tảng cho mọi truy vấn phức tạp. Giờ thì bạn đã sẵn sàng viết truy vấn không chỉ chạy được mà còn tìm đúng thứ mình cần rồi nhé!
GO TO FULL VERSION