Trong SQL, AND
toán tử cho phép bạn kiểm tra nhiều điều kiện khi lọc các truy vấn của bạn.
AND
toán tử kết hợp hai biểu thức Boolean và trả về TRUE
khi cả hai biểu thức đều TRUE
.
Bảng nguồn
Bảng sau được sử dụng cho các ví dụ trên trang này.
SELECT * FROM Pets;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh AND
nhà điều hành.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | +---------+-------------+-----------+-----------+------------+
Như mong đợi, nó chỉ trả về những hàng có cả PetName
cột là Fluffy
và DOB
cột lớn hơn 2020-11-01
.
Trong trường hợp này, chỉ một hàng phù hợp với tiêu chí đó và do đó, chỉ một hàng được trả về.
Kết hợp với các nhà khai thác khác
Tiêu chí lọc của bạn có thể kết hợp các biểu thức sử dụng các toán tử khác ngoài AND
nhà điều hành.
Dưới đây là một ví dụ bao gồm OR
nhà điều hành.
SELECT * FROM Pets
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Lưu ý rằng tôi đã bao quanh OR
điều kiện với dấu ngoặc đơn. Tôi đã làm điều đó để chỉ định thứ tự mà mỗi biểu thức sẽ được đánh giá.,
Theo mặc định, AND
toán tử được đánh giá trước OR
các toán tử. SQL có một thứ tự ưu tiên xác định của các toán tử trong một biểu thức và điều này cho thấy rằng AND
toán tử được đánh giá trước OR
nhà điều hành.
Tuy nhiên, bạn có thể sử dụng dấu ngoặc đơn để ghi đè mức độ ưu tiên đã xác định của các toán tử trong một biểu thức. Mọi thứ trong dấu ngoặc đơn được đánh giá để trả về một giá trị duy nhất. Giá trị đó có thể được sử dụng bởi bất kỳ toán tử nào bên ngoài các dấu ngoặc đơn đó.
Nói cách khác, bạn có thể sử dụng dấu ngoặc đơn để chỉ định thứ tự mà bạn muốn mỗi toán tử logic được đánh giá trong một biểu thức.
Để chứng minh vấn đề này, hãy xem kết quả khi chúng tôi loại bỏ dấu ngoặc đơn.
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Bây giờ chúng ta nhận được một kết quả khác.
Điều này là do, truy vấn hiện kiểm tra PetName = 'Tweet' AND DOB >= '2020-11-20'
trước tiên, sau đó kiểm tra OR
biểu thức PetName = 'Fluffy'
.
Giống như thể chúng ta đặt dấu ngoặc đơn xung quanh AND
biểu thức, như thế này:
SELECT * FROM Pets
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');
Tuy nhiên, để làm mọi thứ nhầm lẫn hơn nữa, chúng tôi có thể sắp xếp lại truy vấn của mình để chúng tôi không sử dụng dấu ngoặc đơn nhưng vẫn nhận được kết quả giống như ví dụ đầu tiên của chúng tôi với dấu ngoặc đơn.
Như thế này:
SELECT * FROM Pets
WHERE DOB >= '2020-11-20'
AND PetName = 'Fluffy' OR PetName = 'Tweet';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Trong trường hợp này, AND
biểu thức đã được đánh giá đầu tiên, như mong đợi. Thứ tự của các biểu thức vừa xếp hàng sao cho DOB >= '2020-11-20' AND PetName = 'Fluffy'
được đánh giá đầu tiên, vì vậy chúng tôi đã loại trừ vật nuôi khác có tên Fluffy do DOB
của nó nằm ngoài phạm vi đó. Chỉ sau đó, là OR
biểu thức được đánh giá như một điều kiện thay thế cho AND
hiện có của chúng tôi kết quả.
Do đó, chúng tôi rất khuyến khích sử dụng dấu ngoặc đơn khi sử dụng nhiều toán tử. Làm điều này đảm bảo rằng truy vấn được đánh giá chính xác theo cách bạn dự định.