Используя условие ORDER BY, мы можем упорядочить результаты по полю, где отображается каждая категория покупки в алфавитном порядке, начиная с Baseline Purchase (базовая покупка) и заканчивая Top Performer (значительная покупка). Для ясности мы присвоили каждой категории свои имена, но вы можете присвоить им любое другое имя.
Теперь, когда новые категории созданы, нам необходимо узнать больше о демографических характеристиках наших клиентов на основе наших новых категорий продаж. Существует множество способов структурировать остальную часть оператора SELECT.
Ответим на следующие вопросы.
• В каких городах осуществляются самые эффективные продажи?
• Самые эффективные продажи в основном осуществляются в США или в других странах?
• В каких городах совершается больше всего базовых покупок?
Рассмотрим первый вопрос. Чтобы получить данные только об эффективных продажах и упорядочить их по городам, мы можем изменить наш существующий запрос, используя условие WHERE.
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
WHERE PurchaseType = 'Top Performers'
ORDER BY
BillingCity
Рис. 61
Проанализировав результат запроса, мы можем определить, что самые эффективные продажи в основном осуществляются в США.
Комбинации полей, по которым проводится поиск, практически безграничны. Например, мы можем получить данные в зависимости от даты выставления счета, чтобы проанализировать сезонные продажи. Использование операторов CASE с условием WHERE и операторами, изученными в этой главе, поможет получить данные, необходимые для нашего отдела продаж.
Примечание
В примерах в этой главе мы использовали оператор CASE в части запроса SELECT после необходимых для отображения полей. Далее вы можете встретить запрос, в котором оператор CASE содержится в условии WHERE (редкий случай). Все, что сейчас важно, — это помнить, что оператор CASE должен быть указан в условии SELECT, но ссылаться на него можно из другого места программного кода.
Контрольные вопросы
1. Создайте запрос для таблицы invoices, включающий оператор CASE, который будет отмечать все продажи из США — страны, откуда выставлен счет — как Domestic Sales (Продажи на внутреннем рынке), а все другие продажи — как Foreign Sales (Продажи за рубежом). После оператора ENDAS создайте новое поле SalesType.
2. Отсортируйте эти данные по новому полю SalesType.
3. Сколько счетов от продаж на внутреннем рынке превышает сумму $15?
Резюме
• Операторы — это специальные ключевые слова SQL, которые используются с условиями SQL для фильтрации данных в зависимости от определенных условий.
• Использование условия WHERE с комбинацией различных операторов позволяет выполнять поиск определенного текста, даты и числа.
• Функция DATE() позволяет исключить время при указании параметров даты.
• Порядок операций при использовании логических операторов (таких как AND/OR) устанавливается с помощью круглых скобок ().
• Оператор CASE позволяет отмечать записи специальным именем поля в зависимости от заданных пользователем логических условий.
*** Существует некая путаница в терминологии. В английском языке есть два разных слова, statement и operator, которые чаще всего переводят одинаково — оператор. Встречается также перевод слова operator (в применении к арифметическим, логическим и сравнения) как «операция», а перевод слова statement как «инструкция». Мы будем использовать термин «оператор» как наиболее привычный. —
Глава 6. Работа с несколькими таблицами
Во всех предыдущих запросах мы рассматривали получение данных только из одной таблицы. Хотя мы изучили некоторые мощные запросы, они не используют все возможности реляционной базы данных. База данных sTunes содержит тринадцать таблиц. Каждая таблица содержит некоторую, но не всю, информацию о компании. Чтобы ответить на более сложные вопросы о компании sTunes, понадобится одновременный доступ к данным из нескольких таблиц. В этой главе мы узнаем, как получить данные из двух или более таблиц с помощью одного запроса и инструментов, называемых соединениями.
Что такое соединение
Соединение (join) — это операция, которая объединяет поля двух или более таблиц реляционной базы данных. Рассмотрим очень простой пример использования таблицы invoices в базе данных sTunes. В предыдущих главах мы много работали с таблицей invoices, поэтому она хорошо нам знакома. На вкладке Browse Data (Просмотр данных) браузера SQL (рис. 62) видно, что таблица invoices состоит из девяти полей. Поле InvoiceId содержит идентификационный номер каждого счета. Поле CustomerId — идентификационный номер каждого клиента (которому выставлен счет). Таблица invoices также содержит поля с информацией о дате и сумме счета. Остальные поля в этой таблице предназначены для адреса плательщика.
Рис. 62