Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Toán tử SQL VÀ cho người mới bắt đầu

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à FluffyDOB 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lọc bản ghi bằng hàm tổng hợp AVG

  2. Cựu điều hành Capgemini, Sunitha Ray, tham gia ScaleGrid DBaaS để mở rộng doanh số bán hàng của doanh nghiệp

  3. Toán tử số học SQL

  4. Tham gia chéo SQL

  5. Sự khác biệt giữa phép nối bên trong và phép nối bên ngoài trong SQL