Предложение WHERE
в SQL указывает, что оператор языка манипулирования данными SQL (DML) должен влиять только на строки , соответствующие указанным критериям. Критерии выражаются в виде предикатов. WHERE
Предложения не являются обязательными предложениями операторов SQL DML, но могут использоваться для ограничения количества строк, на которые влияет оператор SQL DML или возвращаемых запросом. Вкратце, предложение SQL WHERE используется для извлечения только тех результатов из оператора SQL, например: SELECT
, INSERT
, UPDATE
или DELETE
оператор. [1]
WHERE
является зарезервированным словом SQL .
Это WHERE
предложение используется вместе с операторами SQL DML и принимает следующую общую форму:
SQL – DML – Оператор FROM table_name WHERE, предикат
все строки, для которых предикат в предложении WHERE
имеет значение True, затрагиваются (или возвращаются) оператором или запросом SQL DML. Строки, для которых предикат имеет значение False или Unknown ( NULL ), не затрагиваются оператором или запросом DML.
Следующий запрос возвращает только те строки из таблицы mytable , где значение в столбце mycol больше 100.
ВЫБРАТЬ * ИЗ mytable ГДЕ mycol > 100
Следующий DELETE
оператор удаляет из таблицы mytable только те строки , в которых столбец mycol имеет значение NULL или значение, равное 100.
УДАЛИТЬ ИЗ mytable , ГДЕ mycol НУЛЕВОЙ ИЛИ mycol = 100
Простые предикаты используют один из операторов =
, <>
, >
, >=
, <
, <=
, , , или IN
.BETWEEN
LIKE
IS NULL
IS NOT NULL
При желании предикаты можно заключать в круглые скобки. Ключевые слова AND
и OR
можно использовать для объединения двух предикатов в новый. Если применяется несколько комбинаций, для группировки комбинаций можно использовать круглые скобки, чтобы указать порядок оценки. Без круглых скобок AND
оператор имеет более сильную привязку, чем OR
.
В следующем примере удаляются строки из mytable , где значение mycol больше 100, а значение item равно строковому литералу Hammer:
УДАЛИТЬ ИЗ mytable ГДЕ mycol > 100 И item = 'Hammer'
IN
найдет любые значения, существующие в наборе кандидатов.
ВЫБЕРИТЕ ename ГДЕ ename IN ( «Монреаль» , «Квебек» )
Все строки соответствуют предикату, если их значение является одним из возможных значений. Это то же самое поведение, что и
ВЫБЕРИТЕ ename WHERE ename = 'value1' ИЛИ ename = 'value2'
за исключением того, что последний может позволить сравнивать несколько столбцов, чего IN
нет в каждом предложении. Для большего числа кандидатов IN
менее многословен.
BETWEEN
найдет любые значения в пределах диапазона.
ВЫБЕРИТЕ ename ГДЕ ename МЕЖДУ «значением1» И «значением2»
ВЫБЕРИТЕ зарплату из emp ГДЕ зарплата МЕЖДУ 5000 ДО 10000
Все строки соответствуют предикату, если их значение находится между значениями «значение1» и «значение2» включительно.
LIKE
найдет строку, соответствующую определенному описанию.
SELECT 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_]%' ;
Предикат LIKE обычно выполняет поиск без обычного повышения производительности индексов. Вместо этого использование '=', '<>' и т. д. повысит производительность. Чувствительность к регистру (например, «S» или «s») может различаться в зависимости от продукта или конфигурации базы данных.
Он используется в PostgresSQL , который поддерживает регулярные выражения со следующим синтаксисом: [3]
строка [ НЕ ] ПОХОЖЕ НА шаблон [ ESCAPE escape - символ ]
Он работает аналогично оператору LIKE, упомянутому выше.