Предложение WHERE (Transact-SQL)
Определяет условия поиска строк, возвращаемых запросом.
Синтаксис
[ WHERE ]
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
search_condition> Определяет условия, которые должны быть выполнены для всех возвращаемых строк. Количество предикатов, которое может содержать условие поиска, не ограничено. Дополнительные сведения об условиях поиска и предикатах см. в статье Условие поиска (Transact-SQL).
Примеры
В следующих примерах показывается, как можно использовать в предложении WHERE различные распространенные условия поиска.
А. Нахождение строки с помощью простого равенства
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE LastName = 'Smith' ;
B. Нахождение строк, содержащих значение как часть строки
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE LastName LIKE ('%Smi%');
C. Нахождение строк с использованием оператора сравнения
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE EmployeeKey
D. Нахождение строк, удовлетворяющих любому из трех условий
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE EmployeeKey = 1 OR EmployeeKey = 8 OR EmployeeKey = 12;
Д. Нахождение строк, которые должны удовлетворять нескольким условиям
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE EmployeeKey
F. Нахождение строк, находящихся в списке значений
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');
G. Нахождение строк, содержащих значение, расположенное между двумя значениями
-- Uses AdventureWorksDW SELECT EmployeeKey, LastName FROM DimEmployee WHERE EmployeeKey Between 100 AND 200;
Оператор SQL WHERE
Оператор SQL WHERE служит для задания дополнительного условия выборки, операций вставки, редактирования и удаления записей.
Оператор SQL WHERE имеет следующий синтаксис:
WHERE condition
Условие (condition) может включать в себя предикаты AND, OR, NOT, LIKE, BETWEEN, IS, IN, ключевое слово NULL, операторы сравнения и равенства (, =).
Примеры оператора SQL WHERE. Имеется следующая таблица Planets :
ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
1 | Mars | 3396 | 687 | 1659 | No | Christiaan Huygens |
2 | Saturn | 60268 | 10759.22 | — | Yes | — |
3 | Neptune | 24764 | 60190 | 1846 | Yes | John Couch Adams |
4 | Mercury | 2439 | 115.88 | 1631 | No | Nicolaus Copernicus |
5 | Venus | 6051 | 243 | 1610 | No | Galileo Galilei |
Пример 1. Используя оператор SQL WHERE вывести записи, значение радиуса (Radius) которых находится в пределах от 3000 до 9000:
SELECT * FROM Planets WHERE Radius BETWEEN 3000 AND 9000
ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
1 | Mars | 3396 | 687 | 1659 | No | Christiaan Huygens |
5 | Venus | 6051 | 243 | 1610 | No | Galileo Galilei |
Пример 2. Используя оператор SQL WHERE вывести название планеты (PlanetName), год ее открытия (OpeningYear) и имя первооткрывателя (Opener), планет, чье название не начинается или не заканчивается на букву «s»:
SELECT PlanetName, OpeningYear, Opener FROM Planets WHERE PlanetName NOT LIKE '%s' AND PlanetName NOT LIKE 'S%'
PlanetName | OpeningYear | Opener |
Neptune | 1846 | John Couch Adams |
Mercury | 1631 | Nicolaus Copernicus |
SQL-Урок 4. Фильтрация данных (WHERE)
В большинстве случаев необходимо получать не все записи, а только соответствующие определенным критериям. Поэтому для осуществления фильтрации выборки в SQL имеется специальный оператор WHERE.
1. Простая фильтрация оператором WHERE.
Давайте из нашей таблицы, например, отберем записи, относящиеся только к определенному товару. Для этого мы укажем дополнительный параметр отбора, который будет фильтровать значение по колонке Product.
Пример запроса для отбора текстовых значений:
Run SQLSELECT * FROM Sumproduct WHERE Product = 'Bikes'
Try it Yourself
Как видим, условие отбора взято в одинарные кавычки, что является обязательным при фильтрации текстовых значений. При фильтрации числовых значений кавычки не требуются.
Пример запроса для отбора числовых значений:
Run SQLSELECT * FROM Sumproduct WHERE Amount > 40000 ORDER BY Amount
Try it Yourself
В этом примере мы отобрали записи, в которых выручка от реализации составляла более 40 тыс.$ и, вдобавок, все записи рассортировали по росту по полю Amount.
В таблице ниже указан перечень условных операторов, поддерживаемых SQL:
Знак операции | Значение |
---|---|
= | Равняется |
<> | Не равно |
Больше | |
>= | Большее или ровное |
BETWEEN | Между двумя значениями |
IS NULL | Отсутствует запись |
2. Фильтрация по диапазону значений (BETWEEN)
Для отбора данных, лежащих в определенном диапазоне, используется оператор BETWEEN. В следующем запросе будут отобраны все значения, лежащие в пределах от $1000 до $2000 включительно, в поле Amount.
Run SQLSELECT * FROM Sumproduct WHERE Amount BETWEEN 1000 AND 2000
Try it Yourself
Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.
3. Выборка пустых записей (IS NULL)
В SQL существует специальный оператор для выборки пустых записей (называется NULL). Пустой записью считается любая ячейка в таблице, в которую не введен ни один символ. Если в ячейку введено 0 или пробел, то считается, что поле заполнено.
SELECT * FROM Sumproduct WHERE Amount IS NULL
В примере выше мы умышленно удалили два значения в поле Amount, чтобы продемонстрировать работу оператора NULL.
4. Расширенная фильтрация (AND, OR)
Язык SQL не ограничивается фильтрацией по одному условию, для собственных целей вы можете использовать достаточно сложные конструкции для выборки данных одновременно по многим критериям. Для этого в SQL есть дополнительные операторы, расширяющие возможности оператора WHERE. Такими операторами являются: AND, OR, IN, NOT. Приведем несколько примеров работы данных операторов.
Run SQLSELECT * FROM Sumproduct WHERE Amount > 40000 AND City = 'Toronto'
Try it Yourself
Run SQLSELECT * FROM Sumproduct WHERE Month = 'April' OR Month = 'March'
Try it Yourself
Давайте объединим операторы AND и OR. Для этого произведем выборку велосипедов (Bikes) и коньков (Skates), проданных в марте (March).
Run SQLSELECT * FROM Sumproduct WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'
Try it Yourself
Видим, что в нашу выборку попало много значений (кроме марта (March), также январь (January), февраль (February) и апрель (April)). В чем причина? А в том, что SQL имеет приоритеты выполнения команд. То есть оператор AND имеет более приоритет, чем оператор OR, поэтому сначала были отобраны записи с коньками, проданными в марте, а затем все записи, касающиеся велосипедов.
Итак, чтобы получить правильную выборку, нам нужно изменить приоритеты выполнения команд. Для этого используем скобки, как в математике. Тогда, сначала будут проработаны операторы в скобках, а затем – все остальные.
Run SQLSELECT * FROM Sumproduct WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'
SQL — Условие WHERE
От автора: в SQL условие WHERE используется для указания условия при извлечении данных из одной таблицы или при соединении их к нескольким таблицам. Если заданное условие выполняется, то только в этом случае возвращаются определенные значения из таблицы. Вы можете использовать условие WHERE для фильтрации записей и получения только необходимых данных.
Условие WHERE используется не только в инструкции SELECT, но также в операциях UPDATE, DELETE и т. д., которые мы рассмотрим в последующих главах.
Синтаксис
Основной синтаксис инструкции SELECT с условием WHERE приведен ниже.