Условие WHERE в SQL
В этой статье вы научитесь выбирать данные из таблицы с определенным условием с помощью WHERE.
В предыдущей статье мы узнали, как получить все записи из таблицы или столбцов таблицы. Но в реальном мире обычно нужно выбрать, обновить или удалить только те записи, которые удовлетворяют определенным условиям. Например, могут понадобиться только пользователи, принадлежащие к определенной возрастной группе, живущие в определенной стране и т.д.
Условие WHERE используется с операторами SELECT, UPDATE и DELETE. В этой статье мы остановимся на использовании WHERE с SELECT.
Синтаксис
Условие WHERE используется с оператором SELECT для извлечения только тех записей, которые удовлетворяют заданным условиям.
Базовый синтаксис выглядит так:
SELECT список_столбцов FROM имя_таблицы WHERE условие;
список_столбцов — это имена столбцов/полей, таких как имя, возраст, страна и т.д. таблицы базы данных, значения которых вы хотите получить.
Если вам нужны значения из всех столбцов, имеющихся в таблице, можете использовать следующий синтаксис:
SELECT * FROM имя_таблицы WHERE условие;
Операторы для условий
Для условий используются операторы сравнения: =, !=, >, <, >= и <=.
| Оператор | Описание | Пример |
|---|---|---|
= |
Равно | WHERE id = 2 |
> |
Больше чем | WHERE age > 30 |
< |
Меньше чем | WHERE age < 18 |
>= |
Больше или равно | WHERE rating >= 4 |
<= |
Меньше или равно | WHERE price <= 100 |
LIKE |
Сопоставление паттерна | WHERE name LIKE 'An%' |
IN |
Проверяет, совпадает ли указанное значение с любым значением в списке или подзапросе | WHERE country IN ('RUSSIA', 'BELARUS') |
BETWEEN |
Проверяет, находится ли указанное значение в данном диапазоне значений | WHERE rating BETWEEN 3 AND 5 |
Используем WHERE
В прошлой статье мы тренировались на датасете Austin_Animal_Center_Intakes.csv (Google Disc →). Скачайте и установите таблицу в свою СУБД.
Допустим, мы хотим узнать все месяцы, в которых было принято более 1 000 особей одного вида животных. Это поможет сделать следующий SQL-запрос:
SELECT year,
month,
animal_type,
count
FROM austin_animal_center_intakes_by_month
WHERE COUNT > 1000
Результат:
| year | month | animal_type | count |
|---|---|---|---|
| 2016 | 5 | Dog | 1,020 |
| 2015 | 5 | Cat | 1,009 |
| 2015 | 6 | Cat | 1,103 |
| 2015 | 6 | Dog | 1,014 |
Вы также можете использовать WHERE с = и != для ограничения результатов для текстовых полей. Например, если нужно просмотреть информацию только о кошках, взятых в центр животных Остина, можно выполнить такой запрос:
SELECT year,
month,
count,
animal_type
FROM austin_animal_center_intakes_by_month
WHERE animal_type = 'Cat'
Примечание. Для числовых значений сравниваемое число (1000 в первом примере) не заключено в кавычки. При сравнении текстовых строк сравниваемый текст заключается в кавычки ('Cat' во втором примере). По стандарту SQL строки берутся в одинарные кавычки, и это работает во всех СУБД (MySQL, PostgreSQL, SQLite). MySQL также допускает двойные кавычки, но в PostgreSQL и SQLite двойные кавычки означают идентификатор, а не строку, поэтому надёжнее всегда использовать одинарные. Запросы с текстовыми строками также чувствительны к регистру. Если выполнить второй запрос с "cat" вместо "Cat", то SQL ничего не найдет.
Результат:
| year | month | count | animal_type |
|---|---|---|---|
| 2013 | 10 | 542 | Cat |
| 2015 | 11 | 488 | Cat |
| 2015 | 12 | 320 | Cat |
| 2016 | 1 | 304 | Cat |
| 2016 | 2 | 279 | Cat |
| 2014 | 1 | 335 | Cat |
| 2016 | 3 | 333 | Cat |
Примечание. Результаты запросов с использованием символов >, <, >= и <= для столбцов со строковыми значениями могут оказаться неожиданными. Текстовые строки рассматриваются как числа с алфавитным порядком — больше строка или меньше определяется именно по нему. Если мы выполним запрос к таблице Intakes для всех типов животных
> "Cat", результаты будут включать всех собак ("Dog" > "Cat"), диких животных ("Wildlife" > "Cat") и других животных ("Other" > "Cat"), но не кошек ("Cat" > "Cat" → false, т. к. "Cat" = "Cat").