хотя важно и полезно знать, как SQL обрабатывает логические операторы, целесообразно при использовании нескольких операторов просто добавлять круглые скобки, что упрощает понимание сложной логики кода. Если вам хочется потренироваться, выполните следующие упражнения как со скобками, так и без них, и вы увидите, как это влияет на результат.

<p id="практические_задания_9">Практические задания</p>

• Снова запустите запрос и проанализируйте, имеются ли в столбце Total какие-либо данные, значения которых меньше $1,98.

• Найдите все счета с общей суммой выше $3,00, выставленные в городах, название которых начинается с буквы P или D.

<p id="_8_xhtml_2523toc_marker_8_10"><strong>Оператор CASE</strong></p>

Оператор CASE позволяет создать новое временное поле в базе данных, которое станет меткой для данных на основе заданных пользователем условий. Чтобы лучше понять смысл оператора CASE, рассмотрим следующий сценарий.

<p id="сценарий">Сценарий</p>

Цель отдела продаж компании sTunes — чтобы как можно больше клиентов потратили от $7 до $15 на покупку музыкальной продукции в онлайн-магазине. Для этой цели были созданы следующие категории покупок: Baseline Purchase (базовая покупка), Low Purchase (незначительная покупка), Target Purchase (целевая покупка) и Top Performer (значительная покупка).

Поскольку стоимость песни составляет от $0,99 до $1,99, любой счет из этого диапазона считается Baseline Purchase (базовой покупкой). Сумма счетов от $2,00 до $6,99 относится к Low Purchase (незначительной покупке). Поскольку основная цель продаж составляет от $7 до $15, любые покупки в этой категории — это Target Purchase (целевая покупка), а выше $15— Top Performer (значительная покупка).

Отдел продаж sTunes хочет узнать, можно ли получить из базы данных какую-либо информацию о продажах для всех перечисленных категорий.

Для создания нового поля PurchaseType в таблице invoices мы можем использовать оператор CASE. Поле PurchaseType будет отображаться вместе с другими уже существующими полями в нашем запросе, как если бы это было просто еще одно поле в базе данных.

<p id="использование_в_запросе_оператора_case">Использование в запросе оператора CASE</p>

Сначала создадим простой запрос SELECT, как в главе 4.

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

Total

FROM

invoices

ORDER BY

BillingCity

Теперь нам необходимо отсортировать наши результаты в зависимости от названия города, где выставлен счет, чтобы мы могли увидеть целевые покупки в зависимости от региона.

Чтобы добавить оператор CASE к данному запросу, необходимо добавить его в нижнюю часть блока SELECT после всех существующих полей. Начнем с ключевого слова CASE, за которым вставим ключевое слово END. Между этими двумя ключевыми словами нам необходимо определить условия. Каждая проверка начинается с ключевого слова WHEN, за которым следует условие. Наше первое условие — это Baseline Purchase (базовая покупка), то есть любой счет, сумма которого менее $2,00, другими словами "TOTAL<2.00". После логического условия в случае его выполнения необходимо указать ожидаемый результат. Для этой цели используем оператор THEN. Наш ожидаемый результат — покупки менее $2,00 с меткой Baseline Purchase (базовая покупка), что и предусмотрено для нашего сценария.

Эту же последовательность можно повторить для любого количества условий. Поэтому этот метод мы повторим для остальных категорий покупок. Ключевое слово ELSE всегда ставят за последним явным перечисленным условием. Любые записи, которые еще не определены, будут отнесены к категории, указанной в условии ELSE.

Внимание

Ключевое слово ELSE указывать не обязательно, но рекомендуется. В данных могут быть значения, выходящие за рамки требуемых условий. Условие ELSE фиксирует эти значения, и вы можете понять, что с ними делать. Если условие ELSE не добавлено, любые результаты в вашем наборе данных, выходящие за рамки требуемых условий, будут возвращены как значение NULL.

Последнее, что мы делаем, — создаем псевдоним, то есть новое поле в нашей базе данных. Этот псевдоним будет расположен после оператора END. Создадим новое поле с именем PurchaseType.

НАПОМИНАНИЕ

Мы создаем псевдонимы с помощью ключевого слова AS. Таким образом, оператор CASE завершается словом END AS, а затем псевдонимом, который мы выбрали для нового поля.

Запрос будет выглядеть следующим образом (рис. 60):

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

Total,

CASE

WHEN TOTAL < 2.00 THEN 'Baseline Purchase'

WHEN TOTAL BETWEEN 2.00 AND 6.99 THEN 'Low

Purchase'

WHEN TOTAL BETWEEN 7.00 AND 15.00 THEN 'Target

Purchase'

ELSE 'Top Performers'

END AS PurchaseType

FROM

invoices

ORDER BY

BillingCity

Проанализировав полученные результаты, мы увидим, что добавлена новая категория с именем PurchaseType и к данным добавлены все категории покупок.

Из полученных результатов мы видим, что все категории, которые мы проверяли, представлены в соответствии с их соответствующими категориями покупки (PurchaseType).

Рис. 60

Примечание

Перейти на страницу:

Все книги серии Библиотека программиста

Похожие книги