AND, OR и NOT в SQL

В этой статье вы узнаете, как использовать операторы AND, OR и NOT с условием WHERE для фильтрации записей на основе нескольких условия.

В прошлой статье мы научились использовать условие WHERE — чтобы фильтровать запросы по одному условию. Но на практике чаще встречаются ситуации, когда нужно отбирать данные по нескольким условиям. 

AND, OR, NOT — это логические операторы, которые в SQL используются для объединения условий в WHERE

Оператор AND

Оператор AND объединяет два условия и возвращает TRUE только в том случае, если оба условия истинны — равны TRUE. Оператор AND часто используется в WHERE с операторами SELECT, UPDATE, DELETE для формирования условий фильтрации результатов.

Синтаксис

SELECT столбец1, столбец2, столбецN
FROM имя_таблицы
WHERE условие1 AND условие2;

Пример

Используем оператор AND на датасете из предыдущих статей. Если еще не работали с ним, скачайте и установите в свою СУБД таблицу Austin_Animal_Center_Intakes.csv (Google Disc →).

Допустим, нам нужно увидеть всех кошек, которых вернули хозяевам. Для этого можно написать такой запрос:

SELECT monthyear,
       name,
       age_upon_outcome
 FROM austin_animal_center_outcomes
 WHERE animal_type = "Cat" AND outcome_type = "Return to Owner"

Примечание. Обратите внимание, что мы не стали включать поля, используемые с оператором AND, в предложение WHERE. Поскольку запрос возвращает строки только для кошек ("Cat"), которые возвращены владельцу ("Return to Owner"), данные в этих столбцах были бы избыточными, поскольку все они были бы одинаковыми. 

Вот первые несколько строк результата запроса:

monthyear name age_upon_outcome
11/15 Bri-Bri 16 years
12/13 Midnight 12 years
1/14 Budgie 13 years
2/15 Pyewackett 14 years
10/14 Spider 12 years
7/14 Clara 12 years
4/16 Pepito 13 years
4/15 Rocky 12 years

 

Оператор OR

Оператор OR объединяет два условия, но возвращает TRUE, когда одно или оба условия равны TRUE.

Синтаксис

SELECT столбец1, столбец2, столбецN
FROM имя_таблицы
WHERE условие1 OR условие2;

Пример

Допустим, мы хотим увидеть всех кошек и собак, которые были либо бездомными, либо их сдали владельцы. Для этого придется объединить операторы AND и OR — получится такой запрос:

SELECT animal_type,
       intake_type,
       Intake_condition,
       age_upon_intake
 FROM austin_animal_center_intakes
 WHERE (animal_type = "Cat" OR animal_type = "DOG")
       AND (intake_type = "Stray" OR intake_type = "Owner Surrender")

Вот первые несколько строк результата:

 

animal_type intake_type Intake_condition age_upon_intake
Cat Stray Normal 16 years
Cat Stray Normal 1 month
Cat Owner Surrender Normal 10 years
Cat Owner Surrender Normal 9 months
Cat Stray Normal 10 months
Cat Owner Surrender Sick 15 years
Cat Stray Normal 7 years

Оператор NOT

Оператор NOT чаще всего используется с другими ключевыми словами, такими как BETWEEN, LIKE или IN — для «отрицания».

Однако ее можно использовать и для «отрицания» целого условия в WHERE. Допустим, у нас уже есть запрос, который возвращает все строки для кошек и собак, которые были взяты в приюте и которые были больны: 

SELECT monthyear,
       animal_type,
       intake_type,
       intake_condition
 FROM austin_animal_center_intakes
 WHERE ((animal_type = "Cat") OR (animal_type = "Dog"))
       AND (intake_condition = "Sick")

Вот первые несколько строк результата такого запроса:

 

monthyear animal_type intake_type Intake_condition
2014-02 Cat Owner Surrender Sick
2014-02 Cat Owner Surrender Sick
2014-02 Cat Stray Sick
2014-02 Cat Stray Sick
2014-02 Cat Stray Sick
2014-03 Cat Stray Sick
2014-03 Cat Stray Sick
2014-03 Cat Owner Surrender Sick

Если по какой-то причине вы хотите просмотреть все данные о животных, которые не были ни больными кошками, ни больными собаками, можно добавить NOT в WHERE:

SELECT monthyear,
       animal_type,
       intake_type,
       Intake_condition
 FROM austin_animal_center_intakes
 WHERE NOT (((animal_type = "Cat") OR (animal_type = "Dog"))
       AND (intake_condition = "Sick"))

Вот первые несколько строк результата такого запроса:

 

monthyear animal_type intake_type Intake_condition
2017-12 Dog Stray Normal
2014-12 Dog Public Assist Normal
2015-11 Cat Stray Normal
2015-03 Dog Public Assist Normal
2016-03 Dog Public Assist Normal
2014-02 Dog Owner Surrender Normal
2014-02 Dog Public Assist Normal

Примечание. Приведенный выше пример — просто пример. На самом деле запрос для поставленной задачи можно написать проще — чтобы его удобнее было разбирать глазами. На практике NOT редко используют без LIKE, BETWEEN и IN.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©