Язык структурированных запросов (SQL) предоставляет пользователям базы данных возможность создавать настраиваемые запросы для извлечения информации из баз данных. В предыдущей статье мы рассмотрели извлечение информации из базы данных с помощью запросов SQL SELECT . Давайте углубимся в это обсуждение и рассмотрим, как вы можете выполнять расширенные запросы для извлечения данных, соответствующих определенным условиям .
Давайте рассмотрим пример, основанный на широко используемой базе данных Northwind , которая часто поставляется с продуктами базы данных в качестве учебного пособия.
Вот выдержка из таблицы продуктов базы данных:
Идантификационный номер продукта | Наименование товара | SupplierID | QuantityPerUnit | Цена за единицу товара | UnitsInStock |
---|---|---|---|---|---|
1 | Chai | 1 | 10 коробок х 20 мешков | 18,00 | 39 |
2 | Чанг | 1 | Бутылки на 24 — 12 унций | 19,00 | 17 |
3 | Анисовый сироп | 1 | 12 — 550 мл флаконы | 10,00 | 13 |
4 | Cajun Приправа шеф-повара Антона | 2 | Банки на 48 — 6 унций | 22,00 | 53 |
5 | Шеф-повар Антон Гамбо Микс | 2 | 36 коробок | 21,35 | 0 |
6 | Бабушкин Бойзенберри Спред | 3 | Банки на 12 — 8 унций | 25,00 | 120 |
7 | Органические сушеные груши дяди Боба | 3 | 12 — 1 фунт фунтов. | 30,00 | 15 |
Простые граничные условия
Первые ограничения, которые мы наложим на наш запрос, касаются простых граничных условий. Мы можем указать их в предложении WHERE запроса SELECT, используя простые операторы условия, созданные с помощью стандартных операторов, таких как <,>,> = и <=.
Во-первых, давайте попробуем простой запрос, который позволит нам извлечь список всех продуктов в базе данных, у которых UnitPrice превышает 20,00:
ВЫБЕРИТЕ ProductName, UnitPrice
ИЗ продуктов,
ГДЕ UnitPrice> 20,00
Это создает список из четырех продуктов, как показано ниже:
ProductName UnitPrice
------- --------
Шеф-повар Антон Гамбо Микс 21,35
Шеф-повар Антон
Каджун Приправа 22,00 Бабушкин Бойзенберри Спред 25,00
Органические сушеные груши дяди Боба 30,00
Мы также можем использовать предложение WHERE со строковыми значениями. Это в основном приравнивает символы к числам, где A представляет значение 1, а Z представляет значение 26. Например, мы могли бы показать все продукты с именами, начинающимися с U, V, W, X, Y или Z, с помощью следующего запроса:
ВЫБЕРИТЕ ProductName
ИЗ ПРОДУКТОВ,
ГДЕ ProductName> = 'T'
Который дает результат:
ProductName
-------
Органические сушеные груши дяди Боба
Выражение диапазонов с использованием границ
Предложение WHERE также позволяет нам реализовать условие диапазона для значения, используя несколько условий. Например, если мы хотим взять наш запрос выше и ограничить результаты продуктами с ценами от 15.00 до 20.00, мы могли бы использовать следующий запрос:
ВЫБЕРИТЕ ProductName, UnitPrice
ИЗ продуктов,
ГДЕ UnitPrice> 15,00 И UnitPrice <20,00
Это дает результат, показанный ниже:
ProductName UnitPrice
------- --------
Чай 18.00
Чанг 19.00
Выражение диапазонов между
SQL также предоставляет сокращенный синтаксис BETWEEN, который уменьшает количество условий, которые мы должны включить, и делает запрос более читабельным. Например, вместо использования двух вышеупомянутых условий WHERE, мы могли бы выразить тот же запрос как:
ВЫБЕРИТЕ ProductName, UnitPrice
ИЗ продуктов,
ГДЕ UnitRrice МЕЖДУ 15.00 И 20.00
Как и в случае с другими нашими условиями, BETWEEN также работает со строковыми значениями. Если бы мы хотели создать список всех стран, начинающихся с V, W или X, мы могли бы использовать запрос:
ВЫБЕРИТЕ ProductName
ИЗ ПРОДУКТОВ,
ГДЕ ProductName МЕЖДУ «А» и «D»
Который дает результат:
ProductName
-------
Сироп с
анисовым
семенем
Шеф-повар Чай Чанг Шеф-повар Антона от шамана
Антона Приправа Каджуна Антона
Предложение WHERE является мощной частью языка SQL, которая позволяет ограничивать результаты значениями, попадающими в указанные диапазоны. Он очень часто используется, чтобы помочь выразить бизнес-логику и должен быть частью инструментария каждого специалиста по базам данных. Часто бывает полезно включить общие выражения в хранимую процедуру, чтобы сделать ее доступной для тех, кто не знает SQL.