Database
 sql >> база данни >  >> RDS >> Database

SQL И оператор за начинаещи

В SQL, AND операторът ви позволява да проверявате за множество условия при филтриране на вашите заявки.

AND оператор комбинира два булеви израза и връща TRUE когато и двата израза са TRUE .

Изходна таблица

Следната таблица се използва за примерите на тази страница.

SELECT * FROM Pets;

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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)

Пример

Ето един прост пример за демонстриране на AND оператор.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' AND DOB > '2020-11-01';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
+---------+-------------+-----------+-----------+------------+

Както се очакваше, той върна само онези редове, където и PetName колоната беше Fluffy и DOB колоната е по-голяма от 2020-11-01 .

В този случай само един ред отговаря на този критерий и следователно е върнат само един ред.

Комбинирано с други оператори

Вашите критерии за филтриране могат да комбинират изрази, които използват други оператори в допълнение към AND оператор.

Ето пример, който включва OR оператор.

SELECT * FROM Pets 
WHERE (PetName = 'Fluffy' OR PetName = 'Tweet')
AND DOB >= '2020-11-20';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

Забележете, че заобиколих OR условие със скоби. Направих това, за да уточня реда, в който трябва да се оценява всеки израз.,

По подразбиране AND операторите се оценяват преди OR оператори. SQL има дефиниран ред на приоритет на операторите в израз и това диктува, че AND операторът се оценява преди OR оператор.

Въпреки това, можете да използвате скоби, за да замените дефинирания приоритет на операторите в израз. Всичко в скоби се оценява, за да върне една стойност. Тази стойност може да се използва от всеки оператор извън тези скоби.

С други думи, можете да използвате скоби, за да посочите реда, в който искате всеки логически оператор да бъде оценен в израз.

За да демонстрирате този проблем, разгледайте резултатите, когато премахнем скобите.

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR PetName = 'Tweet'
AND DOB >= '2020-11-20';

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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 |
+---------+-------------+-----------+-----------+------------+

Сега получаваме различен резултат.

Това е така, защото заявката сега проверява PetName = 'Tweet' AND DOB >= '2020-11-20' първо, след това проверява OR израз PetName = 'Fluffy' .

Сякаш бихме поставили скоби около AND израз, като този:

SELECT * FROM Pets 
WHERE PetName = 'Fluffy' OR (PetName = 'Tweet'
AND DOB >= '2020-11-20');

Въпреки това, за да объркаме нещата още повече, бихме могли да пренаредим заявката си, така че да не използваме скоби и въпреки това да получим същия резултат като първия ни пример със скоби.

Като това:

SELECT * FROM Pets 
WHERE DOB >= '2020-11-20' 
AND PetName = 'Fluffy' OR PetName = 'Tweet';

Резултат:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
+---------+-------------+-----------+-----------+------------+

В този случай AND експресията беше оценена първо, както се очакваше. Редът на изразите току-що се подреди така, че DOB >= '2020-11-20' AND PetName = 'Fluffy' беше оценено първо, така че изключихме другия домашен любимец, наречен Fluffy, поради неговия DOB попадат извън този диапазон. Едва след това беше OR израз, оценен като алтернативно условие на нашето съществуващо AND резултат.

Ето защо е силно препоръчително да използвате скоби, когато използвате множество оператори. Това гарантира, че заявката се оценява точно по начина, по който сте го възнамерявали да бъде.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проектиране на модел на данни за система за резервиране на хотелски стаи

  2. Как да сравним два реда от една и съща таблица

  3. Използване на Jenkins с Kubernetes AWS, част 3

  4. Функционални единици

  5. Как да използвате AI за настройка на SQL за истински автоматизиран процес