Условие 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" во втором примере). Запросы с текстовыми строками также чувствительны к регистру. Если выполнить второй запрос с "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").