CodeGym /Các khóa học /SQL SELF /Toán tử logic (AND, OR, NOT): kết hợp điều kiện

Toán tử logic (AND, OR, NOT): kết hợp điều kiện

SQL SELF
Mức độ , Bài học
Có sẵn

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 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é:

  1. AND: cả hai điều kiện đều phải đúng.
  2. OR: chỉ cần một trong hai điều kiện đúng là được.
  3. 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 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" 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 ANDOR đặ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 có điểm "A" hoặc "B", bạn có thể kết hợp ANDOR.

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:

  1. NOT
  2. AND
  3. OR

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:

  1. Trên 18 tuổi có điểm "A".
  2. 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

  1. 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 ANDOR.
  2. Dùng NOT mà không hiểu rõ sẽ loại bỏ dòng nào.
  3. Dùng sai toán tử logic. Ví dụ, dùng AND thay vì OR hoặc ngược lại.
  4. Điều kiện quá phức tạp. Điều kiện dài với nhiều AND, OR, NOT mà 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é!

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION