SQL: быстрое погружение - [25]
SELECT * FROM albums AS al RIGHT OUTER JOIN tracks AS t ON t.AlbumId = al.AlbumId
аналогично
SELECT * FROM tracks AS t LEFT OUTER JOIN albums AS al ON t.AlbumId = al.AlbumId
Рис. 83
SELECT
t. TrackId,
t. Composer,
t. Name,
al.AlbumId,
al.Title
FROM
albums AS al
RIGHT OUTER JOIN
tracks AS t
ON
t. AlbumId = al.AlbumId
При выполнении предыдущего запроса возникнет следующая ошибка: RIGHTandFULLOUTERJOINsarenotcurrentlysupported (Правое и полное внешние соединения в настоящее время не поддерживаются).
Однако для решения данной проблемы мы можем просто поменять местами таблицы. Рассмотрим следующий запрос, единственное отличие которого от предыдущего — порядок перечисления таблиц.
SELECT
t. TrackId,
t. Composer,
t. Name,
al.AlbumId,
al.Title
FROM
tracks AS t
LEFT OUTER JOIN
albums AS al
ON
t. AlbumId = al.AlbumId
Выполним его и проанализируем полученные результаты (рис. 84). Мы получим следующую информацию в одном наборе результатов: композитор, название песни и название альбома. Обратите внимание, что в поле Composer (Композитор) обнаружилось несколько нулевых значений. Теперь можно написать другой запрос, чтобы разобраться, в чем дело.
Главный вывод от использования левых/правых соединений: они могут «устранить неполадки» в нашей базе данных и выявить несоответствия в данных.
Если вам нужно найти соответствующие данные и вам не критично потерять несколько записей из-за ошибок в базе данных, то просто пользуйтесь соединением INNER JOINT.
Рис. 84
Практическое задание
• Измените приведенный выше запрос так, чтобы отображались только записи, в которых поле Composer содержит значение NULL.
Контрольные вопросы
1. Используя DB Browser и вкладку Browse Data (Просмотр данных) или ER-диаграмму (рис. 65), проанализируйте таблицу tracks. Определите, какие поля в этой таблице будут внешними ключами в другой таблице. На основании определенных вами внешних ключей определите, какие таблицы связаны с таблицей tracks.
2. Создайте внутреннее соединение между таблицами albums и tracks и отобразите названия альбомов и названия треков в едином наборе результатов.
3. Создайте третье внутреннее соединение — с таблицей genres, которую вы нашли, отвечая на вопрос 1. Включите в ваш набор результатов поле Name из этой таблицы.
Резюме
• Соединения используются для соединения данных из разных таблиц.
• При написании соединений полезно использовать ER-диаграмму.
• При одновременном выборе полей из нескольких таблиц для указания исходной таблицы необходимо использовать псевдонимы.
• Внутренние соединения не включают строки, для которых нет соответствующих данных.
• Внешние соединения включают все строки одной из таблиц, даже если между таблицами нет соответствующих данных. Несовпадающие строки будут отображаться как Null.
• Для проверки нулевых значений необходимо использовать специальные операторы IS и NOT.
• Правые соединения могут использоваться в реализациях SQL, отличных от SQLite. Чтобы в SQLite выполнить эквивалент правого соединения, просто поменяйте местами две сравниваемые таблицы в операторе запроса.
Глава 7. Функции языка SQL
Если вы проверяли свои знания с помощью контрольных вопросов в конце каждой главы, вы, возможно, заметили, что для ответа на некоторые вопросы требуются дополнительные действия после написания запроса. Например, в главе 4 мы задали вопрос: сколько фамилий клиентов начинаются с буквы B? Или попросили найти итоговые суммы счетов в определенном ценовом диапазоне. Чтобы ответить на такие вопросы, требовалось вручную подсчитывать результаты запроса. Чтобы получить все фамилии, начинающиеся на букву B, при помощи информации из главы 4 вы могли выбрать поле LastName в таблице клиентов, отсортировать по фамилии, прокрутить вниз до тех, что начинаются с буквы B, а затем подсчитать их вручную. Если применить материал из главы 5, можно немного упростить задачу, ограничив набор данных, чтобы возвращались только фамилии, начинающиеся с буквы B (запрос WHERELastNameLIKE'B%'). Однако вам все равно придется считать вручную. В этой главе мы расскажем, как упростить вычисления с помощью функций.
Добавление вычислений к запросам
Вычисления (например, подсчет количества полученных записей) можно выполнять, добавляя функции к запросам. Используя функцию COUNT(), можно произвести подсчет LastName и использовать псевдоним NameCount для возврата значения. Добавим функцию к базовому оператору SELECT:
SELECT
COUNT(LastName) AS [NameCount]
FROM
customers
WHERE
LastName LIKE 'B%'
Рис. 85
Для суммирования всех полей в таблице customers, удовлетворяющих условию WHERE, мы можем использовать функцию COUNT(), а не перечислять все записи, начинающиеся с буквы B (чтобы их затем подсчитать). Конечный результат — это поле с псевдонимом и количество фамилий, начинающихся с буквы B.
Это всего лишь один пример того, как использование функций может сэкономить время, выполняя за нас часть работы. В данной главе мы рассмотрим три различных типа функций и проиллюстрируем наиболее полезные.
Типы функций в SQL
Функции в SQL — это специальные ключевые слова, которые принимают определенные параметры, выполняют определенные операции (например, вычисление или изменение данных в поле) и возвращают результат в виде значения. В главе 5 мы уже рассматривали функцию DATE(). В качестве параметров были заданы данные в формате DATETIME, выполнена операция (отредактирован формат написания времени), а затем в результате был возвращен только определенный фрагмент даты. Как мы уже упоминали в главе 5, в SQL для выполнения задач предусмотрено множество типов функций. На рис. 86 показаны наиболее распространенные и полезные.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.
Не можете сосредоточиться на работе? Постоянно отвлекаетесь на проверку электронной почты, социальные сети и новостные ленты? Пора воспользоваться советами от ведущих IT-специалистов и погрузиться в работу с головой.Освойте один из самых ценных навыков – умение сосредоточиться на сложной задаче, не отвлекаясь на мелочи. Только так можно справиться со сложной информацией и добиться лучших результатов за минимальное время. Погружение в работу – это суперсила в нашей все более конкурентной экономике XXI века.
Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.
Книга "Изучаем Python" - это ускоренный курс, который позволит вам сэкономить время и сразу начать писать работоспособные программы (игры, визуализации данных, веб-приложения и многое другое). Хотите стать программистом? В первой части книги вам предстоит узнать о базовых принципах программирования, познакомиться со списками, словарями, классами и циклами, вы научитесь создавать программы и тестировать код. Во второй части книги вы начнете использовать знания на практике, работая над тремя крупными проектами: создадите собственную "стрелялку" с нарастающей сложностью уровней, займетесь работой с большими наборами данных и освоите их визуализацию, и, наконец, создадите полноценное веб-приложение на базе Django, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том что такое программирование, не нужно ждать.
Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузится в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.