Изучение оператора SQL WHERE
В этой статье речь пойдет об операторе SQL WHERE.
Таблицы реляционной базы данных могут содержать миллиарды строк данных. В практическом сценарии вы можете не захотеть работать со всеми наборами записей одновременно. Например, если у нас есть таблица, в которой записаны все заказы клиента, мы можем не захотеть отображать все данные, доступные в приложении, с момента создания таблицы. Вам могут понадобиться данные для определенного заказа, заказов на определенный срок, например кварталы, годы или заказы для определенного клиента или региона.
Язык структурированных запросов (SQL) использует предложение SQL WHERE для фильтрации данных на основе применяемых условий. Он обычно используется в операторе Select, Update или delete .
Давайте продолжим и рассмотрим предложение WHERE, его синтаксис, использование для одного или нескольких условий, включая и исключая данные на основе выражения запроса.
Введение в SQL Где Пункт
Предложение Where полезно в операторах SQL Select, Update, Delete для фильтрации данных, удовлетворяющих определенному условию. Следующий запрос SQL извлекает все данные, хранящиеся в таблице [SalesLT].[SalesOrderDetail]. Как показано ниже, он извлекает 540 записей.
SELECT * FROM SalesLT.SalesOrderDetail
|
Предположим, ваш клиент звонит в службу поддержки клиентов, чтобы получить некоторую информацию о своем заказе. Если таблица огромна, и вы извлекаете все записи для поиска определенного идентификатора заказа клиента. В этом случае,
- Выполнение запроса займет больше времени из-за количества записей
- Ваше время обработки будет выше, и вы можете не удовлетворить клиентов из-за длительного удержания
- Трудно найти конкретный идентификатор заказа, если набор данных огромен и несортирован.
Поэтому вы можете добавить предложение where после предложения from и указать условие. Оптимизатор запросов извлечет только определенные строки, удовлетворяющие условиям, и отобразит их вам.
SELECT * FROM SalesLT.SalesOrderDetail WHERE SalesOrderID=71776
|
Давайте сравним выполнение обоих запросов с точки зрения производительности.
- Запрос 1 имеет относительную стоимость 70 % в пакете и использует оператор сканирования кластеризованного индекса.
- Запрос 2 относительно дешевле, чем запрос (стоимость 30%), и он использует оператор поиска по кластеризованному индексу.
Если мы глубоко погрузимся в сканирование кластерного индекса и операторы поиска, мы увидим разницу в предполагаемой стоимости ЦП, стоимости ввода-вывода, количестве прочитанных строк.
Примечание. Операторы плана выполнения и их производительность зависят от различных факторов, таких как индекс, статистика, методы написания запросов.
Оператор SQL WHERE Примеры
Давайте рассмотрим примеры предложения WHERE в SQL в этом разделе.
Оператор SQL WHERE с числовым сравнением
Вы можете использовать предложение where с числовым сравнением для поддерживаемого типа столбца, такого как int, bigint.
SELECT * FROM SalesLT.SalesOrderDetail WHERE OrderQty=1
|
Примечание. Вы не можете использовать числовое сравнение для столбца с другими типами данных, такими как varchar, nvarchar.
Оператор SQL WHERE со сравнением символов
По умолчанию SQL Server выполняет поиск без учета регистра. Вы можете фильтровать записи из таблицы, используя такие символы, как строки. Например, ниже запрос возвращает записи с названиями продуктов, указанными в предложении where.
SELECT * FROM SalesLT.Product WHERE name=’awc Logo Cap’
|
Если мы указываем строки в верхнем или нижнем регистре, SQL Server возвращает аналогичные результаты.
SELECT * FROM SalesLT.Product WHERE name=’AWC LOGO CAP’
|
Оператор SQL Where с операторами сравнения
SQL Server имеет различные операторы сравнения для построения условия и возвращает результаты, удовлетворяющие запросу. Операторы сравнения приведены ниже.
- оператор равенства (=)
- больше (>) и меньше (<)
- больше или равно (>=)
- меньше или равно (<=)
- не равно(<>)
Например, в приведенном ниже запросе используется оператор «не равно» (<>) в предложении where, чтобы исключить имя продукта, указанное в предложении where.
SELECT * FROM SalesLT.Product WHERE name<>‘AWC LOGO CAP’
|
Точно так же приведенный ниже запрос возвращает все продукты, у которых идентификатор продукта больше или равен 800.
SELECT * FROM SalesLT.Product WHERE ProductID >= 800
|
Оператор SQL Where с логическими операторами
SQL Server имеет логические операторы, которые возвращают истинный или ложный результат при определенных условиях. Это логические операторы И, ИЛИ и НЕ.
- Операторы И В операторах И все выражения должны удовлетворять для получения результатов.
- Запрос возвращает записи, удовлетворяющие следующим условиям.
- Цвет = красный
- Название= Дорога-150 Красная, 44
SELECT * FROM SalesLT. Product WHERE color= ‘Red’ and [Name]=’Road-150 Red, 44′
|
Если какое-либо из условий не возвращает true, запрос не получает никаких записей в выходных данных.
- Оператор ИЛИ: если какое-либо из условий удовлетворяет предложению ИЛИ, запрос возвращает результат.
- Запрос возвращает записи, удовлетворяющие хотя бы одному из следующих условий.
- Цвет = синий
- Название= Дорога-150 Красная, 44
SELECT * FROM SalesLT.Product WHERE color= ‘Blue’ OR [Name]=’Road-150 Red, 44′
|
- Оператор Not: оператор Not обращает результат условия. Например, приведенный ниже запрос возвращает запрос с идентификатором продукта 707 или 708.
Мы можем использовать логический оператор НЕ, чтобы исключить из вывода идентификатор продукта 707 или 708.
Использовать оператор SQL where с датами
Запрос SQL может фильтровать записи, используя столбец даты. Это похоже на символьные типы данных и записи фильтров операторов сравнения.
ВЫБЕРИТЕ ProductID, Имя, SellStartDate FROM SalesLT.Product ГДЕ SellStartDate>=’2005-06-30′
|
Функции в операторе where
Вы можете комбинировать такие функции, как YEAR(), Month() в предложении where для фильтрации записей по определенному условию. Например, приведенный ниже запрос использует функцию year() и находит записи, дата начала продажи которых — 2005 год.
ВЫБЕРИТЕ ProductID, Имя, SellStartDate FROM SalesLT.Product ГДЕ year(SellStartDate)=’2005′
|
Обновление и удаление с помощью инструкции WHERE
Оператор обновления также использует предложение where для обновления определенных строк. Например, если вы хотите обновить стоимость определенного продукта, вы можете указать идентификатор продукта в предложении where и обновить записи.
Примечание. Предложение where означает, что если вы не укажете условие where в операторе обновления, SQL-запрос обновит все записи в таблице.
UPDATE SalesLT.Product SET standardcost=100 WHERE Productid=710
|
Точно так же мы можем указать, где предложение в операторе удаления удаляет определенные записи для таблицы.
УДАЛИТЬ из SalesLT.Product WHERE Productid=710
|
Пункты «Где и наличие»
Иногда вы работаете с агрегированными данными, такими как среднее значение, минимальное и максимальное значения. Вы не можете фильтровать записи из агрегированных данных с помощью предложения where.
Поэтому в определенных случаях, таких как функция GROUP BY, MAX(), MIN(), AVG(), мы можем использовать предложение HAVING для фильтрации записей.Например, приведенный ниже сценарий T-SQL группирует строки на основе идентификатора продукта и вычисляет среднюю цену, используя функцию AVG() для идентификатора продукта больше 976. Он использует предложение have для фильтрации записей из агрегированных данных.
ВЫБРАТЬ avg(standardcost) as AvgPrice,ProductID FROM SalesLT.Product GROUP BY ProductID HAVING ProductID>976
|
Аналогичным образом следующий сценарий T-SQL вычисляет суммы стандартных затрат для идентификатора продукта в диапазоне от 976 до 980 в таблице продуктов.
GROUP BY ProductID ИМЕЕТ ProductID между 976 И 980 0
|
Полезные сведения об операторе WHERE
- Вам следует избегать выбора всех записей из большой таблицы, чтобы избежать проблем с производительностью. Хорошо использовать предложение SQL Where, чтобы ограничить количество строк в выводе.
- Вы можете использовать предложение where для числовых, символьных типов данных, логических операторов сравнения.
- Вы всегда должны использовать оператор удаления с предложением where. Если вы хотите удалить все записи из таблицы, используйте оператор TRUNCATE TABLE.
- Вы можете комбинировать несколько условий в предложении where и комбинировать их с логическими операторами.
- Автор
- Последние сообщения
Раджендра Гупта
Привет! Я Раджендра Гупта, специалист по базам данных и архитектор, помогаю организациям быстро и эффективно внедрять решения Microsoft SQL Server, Azure, Couchbase, AWS, устранять связанные проблемы и настраивать производительность с более чем 14-летним опытом.
Я автор книги «DP-300 Administering Relational Database on Microsoft Azure». Я опубликовал более 650 технических статей о MSSQLTips, SQLShack, Quest, CodingSight и MultipleNines.
Я создатель одной из крупнейших бесплатных онлайн-коллекций статей по одной теме, включая его серию из 50 статей о группах доступности SQL Server Always On.
На основании моего вклада в сообщество SQL Server я был признан престижным лучшим автором года непрерывно в 2019, 2020 и 2021 годах (2-й ранг) в SQLShack и награждение чемпионов MSSQLTIPS в 2020 году.
Личный блог: https://www.dbblogger.com
помогите, свяжитесь со мной по адресу [email protected]
Просмотреть все сообщения Раджендры Гупты
Последние сообщения Раджендры Гупты (посмотреть все)
Примеры SQL-запросов для нескольких условий WHERE — Srinimf
Несколько условий, как дать в предложении SQL WHERE, о котором я рассказал в этом посте. Это IN, LT, GT, =, AND, OR и CASE. Требуется больше процессорного времени, если условие WHERE неверно, для выборки строк — поскольку строк больше.
- IN – список
- GT – больше
- LT – меньше
Объявления
1. Предложение SQL WHERE «Равно» или «Нравится».
ВЫБЕРИТЕ МОЕ_ИМЯ ОТ СОТРУДНИКА ГДЕ MY_NAME НРАВИТСЯ %SRI% или ВЫБИРАТЬ * ОТ СОТРУДНИКА ГДЕ МОЕ_ИМЯ = 'СРИНИМФ'
В приведенном выше примере отфильтровываются имена, содержащие только «SRI».
ВЫБИРАТЬ * ОТ СОТРУДНИКА ГДЕ МОЙ_БОНУС = '959.00'
После выполнения этого запроса вы получите все реквизиты, чей бонус равен «959.00».
2. Результат сравнения значений NULL.
S.No | Column 1 | Operator | Column 2 | Result | |
---|---|---|---|---|---|
1 | NULL | + | NULL | NULL | |
2 | NULL | – | NULL | NULL | |
3 | NULL | / | NULL | NULL | |
4 | NULL | * | NULL | NULL | |
5 | NULL | > | NULL | UNKNOWN/FALSE | |
6 | NULL | >= | NULL | UNKNOWN/FALSE | |
7 | NULL | < | NULL | UNKNOWN/FALSE | |
8 | NULL | <= | NULL | UNKNOWN/FALSE | |
9 | NULL | = | NULL | UNKNOWN/FALSE | |
10 | NULL | <> | NULL | UNKNOWN/FALSE | |
11 | NULL | > | NULL | Неизвестно/FALSE | |
12 | NULL | < | NULL | UNTLONSS/FALSE | |
13 | 13 | 13 | UNTLONSS/FALSE | ||
20202020202020 2020202020 20202020 20202020 202020 20202020 202020202020202019 13 | 0019 | NULL | >= | NULL | UNKNOWN/FALSE |
14 | NULL | <= | NULL | UNKNOWN/FALSE | |
15 | NULL | + | NULL | Неизвестно/False | |
16 | NULL | <> | NULL | UNTONKSE/FALS0195ВЫБИРАТЬ * ОТ СОТРУДНИКА ГДЕ MY_BONUS НОЛЬ Результатом вышеуказанного запроса будет тот, кто не получит никаких бонусов. Оставить комментарий
|