A Предложение WHERE
в SQL указывает, что оператор SQL языка обработки данных (DML) должен влиять только на строк, соответствующих указанным критериям. Критерии выражаются в форме предикатов. Предложения WHERE
не являются обязательными предложениями операторов SQL DML, но могут использоваться для ограничения количества строк, затронутых оператором SQL DML или возвращаемых запросом. Вкратце предложение SQL WHERE используется для извлечения только тех результатов из оператора SQL, как: SELECT, INSERT, UPDATE или DELETE.
ГДЕ
- зарезервированное слово SQL.
Предложение WHERE
используется вместе с операторами SQL DML и принимает следующую общую форму:
SQL-DML-Statement FROM table_name WHERE predicate
все строки, для которых предикат в предложении WHERE
имеет значение True, на них влияет (или возвращается) оператор SQL DML или запрос. Строки, для которых предикат оценивается как False или Unknown (NULL ), не затрагиваются оператором DML или запросом.
Следующий запрос возвращает только те строки из таблицы mytable, где значение в столбце mycol больше 100.
SELECT * FROM mytable WHERE mycol>100
Следующий DELETE
инструкция удаляет только те строки из таблицы mytable, где столбец mycol либо равен NULL, либо имеет значение, равное 100.
DELETE FROM mytable WHERE mycol IS NULL OR mycol = 100
Простые предикаты используют один из операторов =
, <>
, >
, >=
, <
, <=
, IN
, BETWEEN
, LIKE
, IS NULL
или IS NOT NULL
.
При желании можно заключить предикаты в круглые скобки. Ключевые слова AND
и OR
можно использовать для объединения двух предикатов в новый. Если применяется несколько комбинаций, можно использовать круглые скобки для группировки комбинаций, чтобы указать порядок оценки. Без круглых скобок оператор И
имеет более сильную привязку, чем OR
.
. В следующем примере удаляются строки из mytable, где значение mycol больше 100, и значение элемента равно к строковому литералу 'Hammer':
DELETE FROM mytable WHERE mycol>100 AND item = 'Hammer'
IN
найдет любые значения, существующие в наборе кандидатов.
SELECT ename WHERE ename IN ('Montreal', 'Quebec')
Все строки соответствуют предикату, если их значение является одним из возможных наборов значений. Это то же поведение, что и для
SELECT ename WHERE ename = 'value1' OR ename = 'value2'
, за исключением того, что последнее может позволить сравнение нескольких столбцов, чего не позволяет каждое предложение IN
. Для большего числа кандидатов IN
менее подробен.
BETWEEN
найдет любые значения в пределах диапазона.
SELECT ename WHERE ename BETWEEN 'value1' AND 'value2'
SELECT salary from emp WHERE salary BETWEEN 5000 AND 10000
Все строки соответствуют предикату, если их значение находится между 'value1' и 'value2' включительно.
LIKE
найдет строку, соответствующую определенному описанию.
ВЫБРАТЬ ename FROM emp WHERE ename LIKE 'S%';
SELECT ename FROM emp WHERE ename LIKE '% S';
SELECT ename FROM emp WHERE ename LIKE '% S%';
SELECT ename FROM emp WHERE ename LIKE '% A_E % ';
ВЫБРАТЬ ename FROM emp WHERE ename LIKE '[a-zA-Z0-9_] % ';
Программисты SQL должны знать, что предикат LIKE обычно выполняет поиск без обычного повышения производительности индексов. Использование '=', '<>' и т. Д. Вместо этого повысит производительность. Пользователи предиката LIKE должны знать, что чувствительность к регистру (например, «S» по сравнению с «s») может быть разной в зависимости от продукта или конфигурации базы данных.