Перейти к содержимому

Как в where написать несколько условий sql

  • автор:

Указание нескольких условий поиска для одного столбца (визуальные инструменты для баз данных)

Иногда может понадобиться сочетание нескольких условий поиска для одного столбца. Например, можно сделать следующее:

  • Найти несколько разных имен сотрудников в таблице employee , находящихся в разных группах по уровню зарплаты. Такой тип поиска требует использования условия OR (или).
  • Найти книгу, название которой начинается со слова «The» и содержит слово «Cook». Такой тип поиска требует использования условия AND (и).

Сведения, приведенные в этом подразделе, применимы к условиям поиска как в предложении WHERE, так и в предложении HAVING запроса. В примерах в основном используется предложение WHERE, но рассматриваемые принципы применимы к обоим типам задания условий поиска.

Для поиска альтернативных значений в одном столбце данных используется условие OR. Для поиска значений, удовлетворяющих одновременно нескольким условиям, используется условие AND.

Указание условия OR

Использование условия OR позволяет указать несколько альтернативных значений для поиска в столбце. Этот параметр расширяет пространство поиска и может вернуть больше записей, чем при поиске одного значения.

Часто можно использовать оператор IN вместо того, чтобы искать несколько значений в одном столбце.

Указание условия OR
  1. На панели критериевдобавьте столбец для поиска.
  2. Укажите первое условие в столбце Фильтр только что добавленного столбца данных.
  3. Укажите второе условие в столбце Или. этого столбца данных.

Конструктор запросов и представлений создает предложение WHERE, содержащее условие OR, подобное следующему:

SELECT fname, lname FROM employees WHERE (salary < 30000) OR (salary >100000) 

Указание условия AND

Использование оператора AND позволяет задать такие условия поиска, при которых результирующий набор удовлетворяет сразу двум (или более) критериям поиска. При использовании этого параметра пространство поиска сужается и обычно возвращается меньше записей, чем при поиске по одному значению.

Для поиска в диапазоне значений можно использовать оператор BETWEEN вместо двух условий, объединенных оператором AND.

Указание условия AND
  1. На панели критериев добавьте столбец для поиска.
  2. Укажите первое условие в столбце Фильтр только что добавленного столбца данных.
  3. Добавьте тот же столбец на панель критериев еще раз, поместив его в пустую строку сетки.
  4. В столбце Фильтр второй строки укажите второе условие.

Конструктор запросов создает предложение WHERE, которое содержит условие AND, подобное следующему:

SELECT title_id, title FROM titles WHERE (title LIKE '%Cook%') AND (title LIKE '%Recipe%') 

Урок 2. Составные условия

В прошлом уроке мы научились выбирать совершеннолетних пользователей с помощью простого SQL запроса.

SELECT last_name, first_name, birthday FROM users WHERE age >= 18

Теперь попробуем немного уточнить запрос. Например, выберем всех совершенолетних мужчин. В таблицу я добавил дополнительное строковое поле sex, которое хранит m для мужчин и w для женщин:

Новая таблица users

id first_name last_name birthday age sex
1 Дмитрий Иванов 1996-12-11 20 m
2 Олег Лебедев 2000-02-07 17 m
3 Тимур Шевченко 1998-04-27 19 m
4 Светлана Иванова 1993-08-06 23 w
5 Олег Ковалев 2002-02-08 15 m
6 Алексей Иванов 1993-08-05 23 m
7 Алена Процук 1997-02-28 18 w

Давайте добавим вывод столбца sex и оставим только мужчин. Для этого в блоке условий, который начинается со слова WHERE нужно добавить AND sex = ‘m’:

SELECT last_name, first_name, birthday, sex FROM users WHERE age >= 18 AND sex = 'm'

После выполнения SQL запроса получиться такая таблица:

Результат выполнения SQL-запроса

id last_name first_name birthday sex
1 Иванов Дмитрий 1996-12-11 m
3 Шевченко Тимур 1998-04-27 m
6 Иванов Алексей 1993-08-05 m

Посмотрим на SQL запрос. Сейчас блок WHERE содержит составное условие: возраст больше или равен 18 годам и пол равен m. Это простое логическое выражение, которому соответствуют все записи для которых оба условия верны. То есть у которых одновременно и возраст от 18 лет и sex = «m».

Кстати, о sex = «m». Так как мы используем равенство, в результируеющей таблице в колонке sex для всех записей у нас выводится m. Это не логично, ведь мы и так знаем, что выбираем мужчин, поэтому смысла в том, что мы эту информацию выводим в таблице нет. А значит можно удалить sex из запроса. Удалим и посмотрим на результат выполнения SQL-запроса:

SELECT last_name, first_name, birthday FROM users WHERE age >= 18 AND sex = 'm'
Результат выполнения SQL-запроса

id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
3 Шевченко Тимур 1998-04-27
6 Иванов Алексей 1993-08-05

Строки выводятся те же, однако столбца sex больше нет.

Обратите внимание, что извлекаем мы столбцы last_name, first_name, birthday, а фильтрутем по age и sex. То есть не обязательно чтобы столбцы, которые мы получаем, совпадали со столбцами в условии. Главное, чтобы все они были в таблице.

Но вернемся к составным условиям.

Кроме операции AND (И), в условии можно применять OR (ИЛИ). Давайте заменим AND на OR, а также вернем колонки sex и age:

SELECT last_name, first_name, birthday, sex FROM users WHERE age >= 18 OR sex = 'm'

И посмотрим на результат:

Новая таблица users

>

id last_name first_name birthday sex age
1 Иванов Дмитрий 1996-12-11 m 20
2 Лебедев Олег 2000-02-07 m 17
3 Шевченко Тимур 1998-04-27 m 19
4 Иванова Светлана 1993-08-06 w 23
5 Ковалев Олег 2002-02-08 m 15
6 Иванов Алексей 1993-08-05 m 23
7 Процук Алена 1997-02-28 w 18

Получили всех мужчин, а также женщин, которым исполнилось 18 лет. В частности в SQL-таблице две женщины старше 18 лет и все мужчины, даже те, которым меньше 18. Всё это соответствует условию ИЛИ. ИЛИ возраст от 18 лет, ИЛИ мужской пол.

Теперь переключимся на таблицу products. В ней появилось поле country, которое содержит данные о стране производителе:

Таблица products

id name count price country
1 Телевизор 3 43200.00 RU
2 Микроволновая печь 4 3200.00 RU
3 Холодильник 3 12000.00 UA
4 Роутер 1 1340.00 US
5 Компьютер 0 26150.00 US
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Давайте выберем товары, произведененные в России, Белоруссии и на Украине. Напишем SQL-запрос:

SELECT * FROM products WHERE country = "RU" OR country = "UA" OR country = "BL"

После выполнения запроса мы получим следующую таблицу:

Результат выполнения запроса

id name count price country
1 Телевизор 3 43200.00 RU
2 Микроволновая печь 4 3200.00 RU
3 Холодильник 3 12000.00 UA
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Разберем запрос: в блоке WHERE мы используем три условия, разделенные OR (или). Во всех трех условиях мы с помощью символа равенства сравниваем значение в столбце country с одной из стран: ИЛИ Россия, ИЛИ Украина, ИЛИ Белоруссия.

Если мы хотим получить товары еще каких-то стран, то нужно добавить еще условия OR. Это не очень удобно, так как запрос становится громоздиким.

Но его можно упростить. Кроме стандартных условий сравнения AND и OR в языке SQL есть условие принадлежности IN, которое в данном случае подходит лучше. Напишем после WHERE:

SELECT * FROM products WHERE country IN ("RU", "UA", "BL")

Конструкция получилась короче и понятней. И с помощью неё мы выбираем данные, в которых страна равна любом из значений перечисленных в скобках. После запуска запроса мы получим результат, аналогичный предыдущему.

Но давайте добавим к запросу еще одно условие. Например нам нужны не просто товары, а товары стоимостью до 10 000 рублей. Напишем:

SELECT * FROM products WHERE country IN ("RU", "UK", "BL") AND price < 10000

И посмотрим результат:

Результат выполнения SQL-запроса

id name count price country
2 Микроволновая печь 4 3200.00 RU
6 Утюг 6 3200.00 BL
7 Пылесос 11 4500.00 UA

Получили новую таблицу с тремя записями, которые удовлетовряют новому условию. И в этом условии мы совместили AND и IN. То есть в SQL-запросах можно совмещать логические операции AND и OR с оператором IN. Что делает их очень гибкими.

Теперь давай попробуем выбрать товары, стоимостью от 10000 до 20000.

Условие с country уберем и напишем:

SELECT * FROM products WHERE price >= 10000 AND price 

В результате получается такая таблица:

Таблица products

id name count price country
3 Холодильник 3 12000.00 UA

Выполним — получили 1 товар в этом ценовом интервале. Рассмотрим на запрос. Как видите в этой конструкции мы снова написали двойное условие по одному полю — price. И с одной строны всё логично и понятно, а с другой стороны эту конструкцию также можно упростить.

SELECT * FROM products WHERE price BETWEEN 10000 AND 20000

Теперь запрос звучит так: ВЫБРАТЬ все столбцы из таблицы products, в которых цена между 10000 и 20000. Звучит более чем понятно.

После запуска мы получим всё тот же один товар.

Вообще AND, OR, IN и BETWEEN — это основные конструкции для построения условий в SQL запросах и используются они в блоке WHERE. Вы можете применять их как по одиночке, так комбинируя в самых разлчных вариантах.

Следующий урок

Урок 3. Порядок AND и OR

Вы узнаете о приоритете AND и OR, а также с ошибками, которые возникают у новичков в SQL-запросах с несколькими условиями.

Полный курс с практикой

  • 57 уроков
  • 261 задание
  • Сертификат
  • Поддержка преподавателя
  • Доступ к курсу навсегда
  • Можно в рассрочку

Оператор SQL WHERE: синтаксис и примеры

Разобрали SQL запрос WHERE, объяснили его синтаксис и расписали примеры использования оператора WHERE с одним и сразу несколькими условиями.

SQL WHERE оператор позволяет задавать дополнительные условия для выборки, редактирования, удаления и других операций, производимых с записями БД.

  1. Синтаксис SQL WHERE
  2. Примеры использования SQL WHERE

Синтаксис SQL WHERE

Рассматриваемый оператор WHERE имеет следующий синтаксис:

SELECT column1, column2, . FROM table_name WHERE condition; 

Как видим, SQL запрос WHERE задаёт некоторое условие, которое позволяет отфильтровать записи в колонках таблицы table_name . При этом, когда в SQL несколько WHERE — это нормальная история, ведь так задаётся сразу несколько условий.

Рассмотрим оператор WHERE на примерах.

Примеры использования SQL WHERE

С помощью следующего SQL запроса мы виберем всех клиентов, которых зовут Иван:

SELECT * FROM Customers WHERE Name = 'Иван'; 

А так мы сможем выбрать клиентов по ID, за которым они закреплены в нашей таблице:

SELECT * FROM Customers WHERE aria-label="Копировать код" data-v-04728ac0>

Теперь давайте усложним задачу, задав сразу несколько условий. Здесь мы также используем оператор SQL LIKE, о котором писали ранее.

Например, выведем название планеты, год её открытия, а также имя её первооткрывателя. Выбирать будем из тех планет, чьё название не начинается или не заканчивается на букву S :

SELECT PlanetName, OpeningYear, Opener FROM Planets WHERE PlanetName NOT LIKE '%s' AND PlanetName NOT LIKE 'S%' 

И вот такое, казалось бы, сложное условие легко реализовывается с помощью оператора WHERE.

Больше SQL команд и информации о них вы найдёте здесь.

SQL комбинирование условий AND и OR

SQL условия AND и OR можно комбинировать для проверки нескольких условий в операторе SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис для условий AND и OR в SQL:

WHERE condition1
AND condition2
.
OR condition_n;

Параметры или аргументы

condition1 , condition2 , . condition_n Условия, которые оцениваются, чтобы определить, будут ли выбраны записи.

Примечание

  • SQL условия позволяют тестировать несколько условий.
  • Не забудьте порядок операций в скобках!

Пример — использование условий AND и OR с оператором SELECT

Рассмотрим пример того, как совместно использовать условие AND и условие OR в операторе SELECT.

В этом примере у нас есть таблица suppliers со следующими данными:

supplier_id supplier_name city state
100 Yandex Moscow Moscow
200 Google Lansing Michigan
300 Oracle Redwood City California
400 Bing Redmond Washington
500 Yahoo Sunnyvale Washington
600 DuckDuckGo Paoli Pennsylvania
700 Qwant Paris Ile de France
800 Facebook Menlo Park California
900 Electronic Arts San Francisco California

Введите следующий SQL оператор:

Transact-SQL
FROM suppliers
WHERE ( state = 'California' AND supplier_id < >900 )
OR ( supplier_id = 100 );

Будет выбрано 3 записи. Вот результаты, которые вы получите:

supplier_id supplier_name city state
100 Yandex Moscow Moscow
300 Oracle Redwood City California
800 Facebook Menlo Park California

В этом примере будут возвращены все записи таблицы suppliers , которые находятся в штате California, но не имеют значения supplier_id , равного 900. В запросе также будут возвращены все записи suppliers , supplier_id которых равен 100. Скобки определяют порядок оценки условий AND и OR.

Пример использование условий AND и OR с оператором UPDATE

Далее давайте рассмотрим, как использовать условия AND и OR с оператором UPDATE.
В этом примере у нас есть таблица customers со следующими данными:

customer_id first_name last_name favorite_website
4000 Justin Bieber google.com
5000 Selena Gomez bing.com
6000 Mila Kunis yahoo.com
7000 Tom Cruise oracle.com
8000 Johnny Depp NULL
9000 Russell Crowe google.com

Теперь продемонстрируем, как использовать условия AND и OR для обновления записей в таблице. Введите следующий оператор UPDATE:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *