Где (SQL)
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2014 г. ) |
А WHERE
Предложение в SQL указывает, что оператор языка манипулирования данными SQL (DML) должен влиять только на строки , соответствующие указанным критериям. Критерии выражаются в виде предикатов. WHERE
Предложения не являются обязательными предложениями операторов SQL DML, но могут использоваться для ограничения количества строк, на которые влияет оператор SQL DML или возвращаемых запросом. Вкратце, предложение SQL WHERE используется для извлечения только таких результатов из оператора SQL, например: SELECT
, INSERT
, UPDATE
, или DELETE
заявление. [1]
Обзор
[ редактировать ]WHERE
является зарезервированным словом SQL .
The 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
может использоваться для объединения двух предикатов в новый. Если применяется несколько комбинаций, для группировки комбинаций можно использовать круглые скобки, чтобы указать порядок оценки. Без скобок, AND
оператор имеет более сильную привязку, чем OR
.
В следующем примере из таблицы mytable удаляются строки , где значение mycol больше 100, а значение item равно строковому литералу 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
Все строки соответствуют предикату, если их значение находится между значениями «значение1» и «значение2» включительно.
НРАВИТЬСЯ
[ редактировать ]LIKE
найдет строку, соответствующую определенному описанию.
- Конечный подстановочный знак
- Найдите любую строку, начинающуюся с буквы «S».
SELECT ename FROM emp WHERE ename LIKE 'S%';
- Найдите любую строку, начинающуюся с буквы «S».
- Ведущий подстановочный знак
- Найдите любую строку, оканчивающуюся на букву «S».
SELECT ename FROM emp WHERE ename LIKE '%S';
- Найдите любую строку, оканчивающуюся на букву «S».
- Несколько подстановочных знаков
- Найдите любую строку, содержащую где угодно букву «S».
SELECT ename FROM emp WHERE ename LIKE '%S%';
- Найдите любую строку, содержащую где угодно букву «S».
- Подстановочный знак из одного символа
- Найдите любую строку, содержащую букву «А», за которой следует любой одиночный символ, за которым следует буква «Е».
SELECT ename FROM emp WHERE ename LIKE '%A_E%';
- Найдите любую строку, содержащую букву «А», за которой следует любой одиночный символ, за которым следует буква «Е».
- Классы персонажей [2]
- Найдите любую строку, начинающуюся с буквы, цифры или символа «_».
SELECT ename FROM emp WHERE ename LIKE '[a-zA-Z0-9_]%';
- Найдите любую строку, начинающуюся с буквы, цифры или символа «_».
Предикат LIKE обычно выполняет поиск без обычного повышения производительности индексов. Вместо этого использование '=', '<>' и т. д. повысит производительность. Чувствительность к регистру (например, «S» и «s») может различаться в зависимости от продукта или конфигурации базы данных.
ПОХОЖО НА
[ редактировать ]Он используется в PostgresSQL , который поддерживает регулярные выражения со следующим синтаксисом: [3]
string [NOT] SIMILAR TO pattern [ESCAPE escape-character]
Он работает аналогично оператору LIKE, упомянутому выше.
Ссылки
[ редактировать ]- ^ «Предложение SQL WHERE – что следует знать новичкам» .
- ^ Microsoft Technet, дата обращения 21 ноября 2013 г.
- ^ «9.7. Сопоставление с образцом» . Документация PostgreSQL . 11 мая 2023 г. Проверено 10 июня 2023 г.
Внешние ссылки
[ редактировать ]- PSOUG Домашняя страница Группа пользователей Oracle в Пьюджет-Саунде приводит несколько примеров операторов SELECT с предложениями WHERE.