SQL: быстрое погружение - [18]

Шрифт
Интервал

. Затем отдельно обрабатывается условие справа от оператора OR, как если бы оператора AND не существовало. Другими словами, запрос сначала выполняет поиск результатов, где Total>1.98ANDBillingCityLIKE'p%'. Затем выполняется поиск всех результатов, где BillingCityLIKE'd%', а затем возвращаются результаты для обоих условий в порядке возрастания в поле Total.

Если вышеуказанный запрос вы ввели в свой браузер SQL, то заметите, что получены данные, соответствующие значению менее $1,98, но только для городов, начинающихся с буквы D.

Это связано с тем, что порядок операций SQL определен следующим образом: сначала обрабатывается оператор AND, а затем — оператор OR. Это не совсем так, как мы изначально хотели, но есть простой способ обрабатывать наш запрос именно так, как мы планировали, без необходимости прибегать к логическим операторам.

Примечание

В SQL порядок оператора AND соответствует порядку операции умножения, а оператора OR — операции сложения, если не добавлены круглые скобки. При отсутствии круглых скобок оператор AND будет обрабатываться по принципу, аналогичному арифметике: 3*2+1 равно 7, а 3*(2+1) равно 9.

При добавлении круглых скобок, как показано в примере ниже, браузер SQL сначала выполняет поиск данных, удовлетворяющих условиям внутри скобок: (BillingCityLIKE'p%'ORBillingCityLIKE'd%'). Затем только из этих записей, он ищет данные, общая сумма которых превышает $1,98 (Total>1.98).

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

Total

FROM

invoices

WHERE

Total > 1.98 AND (BillingCity LIKE 'p%' OR

BillingCity LIKE 'd%')

ORDER BY

Total

Рис. 59

Теперь мы переписали запрос так, что все счета, сумма которых превышает $1,98, будут сформированы в городах, начинающихся либо с буквы P, либо с буквы D, что и требовалось изначально.

На мой взгляд,

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

Практические задания

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

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

Оператор CASE

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

Сценарий

Цель отдела продаж компании 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 будет отображаться вместе с другими уже существующими полями в нашем запросе, как если бы это было просто еще одно поле в базе данных.

Использование в запросе оператора CASE

Сначала создадим простой запрос 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.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


В работу с головой. Паттерны успеха от IT-специалиста

Не можете сосредоточиться на работе? Постоянно отвлекаетесь на проверку электронной почты, социальные сети и новостные ленты? Пора воспользоваться советами от ведущих IT-специалистов и погрузиться в работу с головой.Освойте один из самых ценных навыков – умение сосредоточиться на сложной задаче, не отвлекаясь на мелочи. Только так можно справиться со сложной информацией и добиться лучших результатов за минимальное время. Погружение в работу – это суперсила в нашей все более конкурентной экономике XXI века.


Чистый код. Создание, анализ и рефакторинг

Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.


Изучаем Python

Книга "Изучаем Python" - это ускоренный курс, который позволит вам сэкономить время и сразу начать писать работоспособные программы (игры, визуализации данных, веб-приложения и многое другое). Хотите стать программистом? В первой части книги вам предстоит узнать о базовых принципах программирования, познакомиться со списками, словарями, классами и циклами, вы научитесь создавать программы и тестировать код. Во второй части книги вы начнете использовать знания на практике, работая над тремя крупными проектами: создадите собственную "стрелялку" с нарастающей сложностью уровней, займетесь работой с большими наборами данных и освоите их визуализацию, и, наконец, создадите полноценное веб-приложение на базе Django, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том что такое программирование, не нужно ждать.


Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих

Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузится в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.