1. Giới thiệu

Khi làm việc với SQL để truy vấn cơ sở dữ liệu, các toán tử ANDOR đóng vai trò quan trọng trong việc kết hợp nhiều điều kiện trong câu lệnh WHERE. Những toán tử này giúp bạn lọc dữ liệu một cách chi tiết và chính xác hơn, tùy thuộc vào yêu cầu cụ thể của từng truy vấn.

  • AND: Toán tử này yêu cầu tất cả các điều kiện phải đúng thì bản ghi mới được trả về.
  • OR: Toán tử này chỉ cần một trong các điều kiện đúng thì bản ghi sẽ được trả về.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về chức năng của toán tử ANDOR, cách sử dụng chúng để lọc dữ liệu, và các ví dụ minh họa cụ thể để bạn dễ dàng áp dụng trong các truy vấn thực tế.

2. Toán tử SQL AND là gì?

Toán tử AND trong SQL được sử dụng để kết hợp nhiều điều kiện trong câu lệnh WHERE. Khi sử dụng AND, tất cả các điều kiện đều phải thỏa mãn (đều đúng) thì bản ghi mới được trả về.

Cú pháp tổng quát của SQL AND:

shell
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

Trong đó:

  • column1, column2, ...: Các cột cần truy vấn.
  • table_name: Tên bảng chứa dữ liệu.
  • condition1, condition2, ...: Các điều kiện cần thỏa mãn.

3. Toán tử SQL OR là gì?

Toán tử OR trong SQL được sử dụng để kết hợp nhiều điều kiện trong câu lệnh WHERE. Khi sử dụng OR, chỉ cần một trong các điều kiện đúng là bản ghi sẽ được trả về.

Cú pháp tổng quát của SQL OR:

shell
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

4. Cách sử dụng SQL AND và OR

a. Sử dụng SQL AND

Toán tử AND được sử dụng để lọc dữ liệu khi bạn cần tất cả các điều kiện đều đúng. Điều này giúp bạn thu hẹp kết quả truy vấn và chỉ lấy những bản ghi thỏa mãn đầy đủ các điều kiện.

Ví dụ 1: Lấy tất cả các nhân viên thuộc phòng ban "Sales" và có tuổi lớn hơn 30

shell
SELECT first_name, last_name, department, age
FROM employees
WHERE department = 'Sales' AND age > 30;

Câu lệnh trên chỉ trả về các nhân viên thuộc phòng ban "Sales" có tuổi lớn hơn 30. Nếu một nhân viên không thỏa mãn một trong hai điều kiện, họ sẽ không xuất hiện trong kết quả.

b. Sử dụng SQL OR

Toán tử OR được sử dụng khi bạn muốn trả về các bản ghi mà ít nhất một điều kiện trong số các điều kiện đúng. Điều này giúp bạn mở rộng kết quả truy vấn.

Ví dụ 2: Lấy tất cả các nhân viên thuộc phòng ban "Sales" hoặc "Marketing"

shell
SELECT first_name, last_name, department
FROM employees
WHERE department = 'Sales' OR department = 'Marketing';

Câu lệnh trên trả về tất cả các nhân viên làm việc trong phòng ban "Sales" hoặc "Marketing". Nếu nhân viên thuộc một trong hai phòng ban này, họ sẽ được trả về.

c. Kết hợp AND và OR

Trong thực tế, bạn có thể kết hợp cả ANDOR trong cùng một câu lệnh để lọc dữ liệu theo nhiều điều kiện phức tạp hơn.

Ví dụ 3: Lấy tất cả các nhân viên làm việc trong phòng ban "Sales" và có tuổi lớn hơn 30, hoặc làm việc trong phòng ban "Marketing"

shell
SELECT first_name, last_name, department, age
FROM employees
WHERE (department = 'Sales' AND age > 30) OR department = 'Marketing';

Câu lệnh này trả về các nhân viên:

  • Làm việc trong phòng ban "Sales" và có tuổi lớn hơn 30.
  • Hoặc làm việc trong phòng ban "Marketing".

d. Sử dụng dấu ngoặc đơn (Parentheses) để nhóm điều kiện

Khi kết hợp ANDOR, bạn nên sử dụng dấu ngoặc đơn để nhóm các điều kiện lại với nhau. Điều này giúp SQL biết rõ thứ tự ưu tiên thực hiện các phép so sánh. SQL thực hiện toán tử AND trước, sau đó đến OR, trừ khi bạn sử dụng ngoặc đơn để thay đổi thứ tự này.

Ví dụ 4: Lấy nhân viên có độ tuổi lớn hơn 30 và thuộc phòng ban "Sales" hoặc "Marketing"

shell
SELECT first_name, last_name, department, age
FROM employees
WHERE age > 30 AND (department = 'Sales' OR department = 'Marketing');

Trong câu lệnh này, SQL sẽ:

  • Lấy những nhân viên có độ tuổi lớn hơn 30.
  • Sau đó kiểm tra nếu nhân viên thuộc phòng ban "Sales" hoặc "Marketing".

5. Các ví dụ về sử dụng SQL AND và OR

Ví dụ 1: Lấy tất cả các sản phẩm có giá từ 100.000 đến 500.000 và thuộc danh mục "Electronics" hoặc "Books"

shell
SELECT product_name, price, category
FROM products
WHERE price BETWEEN 100000 AND 500000
AND (category = 'Electronics' OR category = 'Books');

Câu lệnh trên sẽ trả về các sản phẩm thỏa mãn hai điều kiện:

  • Giá nằm trong khoảng từ 100.000 đến 500.000.
  • Thuộc danh mục "Electronics" hoặc "Books".

Ví dụ 2: Lấy tất cả các đơn hàng được đặt trong tháng 9 năm 2023 hoặc có tổng giá trị đơn hàng lớn hơn 1 triệu

shell
SELECT order_id, order_date, total_amount
FROM orders
WHERE (MONTH(order_date) = 9 AND YEAR(order_date) = 2023)
OR total_amount > 1000000;

Câu lệnh này trả về tất cả các đơn hàng:

  • Được đặt trong tháng 9 năm 2023.
  • Hoặc có tổng giá trị đơn hàng lớn hơn 1 triệu.

Ví dụ 3: Cập nhật lương của nhân viên thuộc bộ phận "HR" có tuổi trên 40 hoặc nhân viên thuộc bộ phận "Finance"

shell
UPDATE employees
SET salary = salary * 1.10
WHERE (department = 'HR' AND age > 40) OR department = 'Finance';

Câu lệnh này sẽ tăng lương cho nhân viên thỏa mãn:

  • Làm việc trong bộ phận "HR" và có tuổi trên 40.
  • Hoặc làm việc trong bộ phận "Finance".

Ví dụ 4: Xóa các bản ghi khách hàng đến từ "Hà Nội" hoặc có số dư tài khoản nhỏ hơn 100.000

shell
DELETE FROM customers
WHERE city = 'Hà Nội' OR account_balance < 100000;

Câu lệnh này sẽ xóa tất cả các khách hàng:

  • Đến từ Hà Nội.
  • Hoặc có số dư tài khoản dưới 100.000.

6. Một số lưu ý khi sử dụng SQL AND và OR

a. Thứ tự thực hiện

  • SQL thực hiện các điều kiện AND trước, sau đó đến OR nếu không có dấu ngoặc đơn. Sử dụng dấu ngoặc đơn để điều chỉnh thứ tự thực hiện các điều kiện sao cho kết quả truy vấn chính xác.

b. Cẩn thận với việc sử dụng OR

  • Khi sử dụng OR, nếu bạn không cẩn thận đặt đúng điều kiện, có thể sẽ trả về nhiều bản ghi hơn mong muốn, dẫn đến kết quả không chính xác.

c. Hiệu suất truy vấn

  • Khi sử dụng nhiều điều kiện phức tạp với ANDOR, hiệu suất của truy vấn có thể bị ảnh hưởng. Để tối ưu hóa, bạn có thể thêm các chỉ mục (indexes) cho các cột thường được sử dụng trong điều kiện WHERE.

7. Kết luận

Toán tử ANDOR trong SQL là những công cụ mạnh mẽ giúp bạn kết hợp nhiều điều kiện trong truy vấn để lọc dữ liệu một cách chính xác. Hiểu rõ cách sử dụng chúng, cũng như việc nhóm các điều kiện bằng dấu ngoặc đơn, sẽ giúp bạn viết các truy vấn phức tạp hơn và tối ưu hóa dữ liệu.

Hãy thực hành các ví dụ trong bài viết này và thử nghiệm với các tình huống khác nhau trong dự án của bạn trên CodeTutHub để nắm vững kỹ năng sử dụng ANDOR trong SQL!