Указание нескольких условий поиска для одного столбца (визуальные инструменты для баз данных)
Иногда может понадобиться сочетание нескольких условий поиска для одного столбца. Например, можно сделать следующее:
- Найти несколько разных имен сотрудников в таблице employee , находящихся в разных группах по уровню зарплаты. Такой тип поиска требует использования условия OR (или).
- Найти книгу, название которой начинается со слова «The» и содержит слово «Cook». Такой тип поиска требует использования условия AND (и).
Сведения, приведенные в этом подразделе, применимы к условиям поиска как в предложении WHERE, так и в предложении HAVING запроса. В примерах в основном используется предложение WHERE, но рассматриваемые принципы применимы к обоим типам задания условий поиска.
Для поиска альтернативных значений в одном столбце данных используется условие OR. Для поиска значений, удовлетворяющих одновременно нескольким условиям, используется условие AND.
Указание условия OR
Использование условия OR позволяет указать несколько альтернативных значений для поиска в столбце. Этот параметр расширяет пространство поиска и может вернуть больше записей, чем при поиске одного значения.
Часто можно использовать оператор IN вместо того, чтобы искать несколько значений в одном столбце.
Указание условия OR
- На панели критериевдобавьте столбец для поиска.
- Укажите первое условие в столбце Фильтр только что добавленного столбца данных.
- Укажите второе условие в столбце Или. этого столбца данных.
Конструктор запросов и представлений создает предложение WHERE, содержащее условие OR, подобное следующему:
SELECT fname, lname FROM employees WHERE (salary < 30000) OR (salary >100000)
Указание условия AND
Использование оператора AND позволяет задать такие условия поиска, при которых результирующий набор удовлетворяет сразу двум (или более) критериям поиска. При использовании этого параметра пространство поиска сужается и обычно возвращается меньше записей, чем при поиске по одному значению.
Для поиска в диапазоне значений можно использовать оператор BETWEEN вместо двух условий, объединенных оператором AND.
Указание условия AND
- На панели критериев добавьте столбец для поиска.
- Укажите первое условие в столбце Фильтр только что добавленного столбца данных.
- Добавьте тот же столбец на панель критериев еще раз, поместив его в пустую строку сетки.
- В столбце Фильтр второй строки укажите второе условие.
Конструктор запросов создает предложение 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 для женщин:
| 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 запроса получиться такая таблица:
| 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'
| 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'
И посмотрим на результат:
| 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, которое содержит данные о стране производителе:
| 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
И посмотрим результат:
| 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
В результате получается такая таблица:
| 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 оператор позволяет задавать дополнительные условия для выборки, редактирования, удаления и других операций, производимых с записями БД.
- Синтаксис SQL WHERE
- Примеры использования 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 | 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 | 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 | 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: