SQL: быстрое погружение - [21]
Если бы таблица invoices содержала поле, включающее все имена клиентов, то в соединении таблиц не было бы необходимости. Также вместо базы данных с тринадцатью таблицами можно было бы создать одну гигантскую таблицу, содержащую все поля.
Вопрос. Зачем в базах данных нужно иметь несколько таблиц?
Ответ. Нормализация — это процесс организации данных в реляционной базе данных. Нормализация включает создание таблиц и установку отношений между таблицами. Нормализация позволяет уменьшить размеры баз данных, так как не надо хранить повторяющиеся поля в одной таблице. По мере увеличения размера базы данных возрастает потребность в ее нормализации. Это целесообразно, даже если экономится всего нескольких секунд при обработке запроса. Учитывая гигантский размер некоторых баз данных, каждая секунда имеет значение. Представьте, что поиск в Google занимает пять минут, а не несколько секунд.
Рис. 65
Теперь, когда мы определили общую связь между двумя полями в таблице invoices и в таблице customers, стоит более внимательно разобрать, как писать запросы с соединениями.
Псевдонимы соединяемых таблиц
Из первого примера видно, что при обращении к полям соединения JOIN имеют особый синтаксис. Поскольку две таблицы в любой базе данных могут содержать поля с одинаковыми именами, при создании соединений необходимо для указания определенного поля задать имя таблицы, чтобы браузер SQL точно знал, какое поле имеется в виду. По правилам синтаксиса необходимо сначала указать имя таблицы, а затем через точку — имя поля. Чтобы уменьшить объем текста и повысить удобочитаемость, в соединениях часто используются псевдонимы. Следующие два соединения идентичны по функциям.
SELECT
*
FROM
invoices
INNER JOIN
customers
ON
invoices.CustomerId = customers.CustomerId
-----------------------
SELECT
*
FROM
invoices AS i
INNER JOIN
customers AS c
ON
i. CustomerId = c.CustomerId
Примечание
Псевдонимы для соединений должны быть краткими и удобочитаемыми. Они, как правило, состоят из одной буквы, причем используется первая буква соответствующей таблицы (tablename.FieldName будет записано как t.FieldName). Далее в этой главе для имен таблиц мы будем использовать однобуквенные псевдонимы.
Чтобы продемонстрировать необходимость использования псевдонимов при работе с соединениями, давайте рассмотрим наш первоначальный сценарий. Руководству sTunes необходим список с указанием имен клиентов и счетов, выставленных каждому клиенту. Когда в этой главе мы писали наше первое соединение, для выбора всех полей из каждой таблицы был использован символ *. Результатом данного запроса стал массивный набор результатов из двадцати двух полей. Однако нам требуются только имена клиентов и информация о счете. Также, когда мы используем символ *, мы не можем контролировать порядок отображения полей. Предположим, что руководству sTunes необходимо в списке клиентов сначала отображать фамилию. Чтобы определить порядок вывода, следует в операторе SELECT вместо символа * указать имена полей. Давайте создадим аналогичное приведенному выше соединение, но на этот раз в запросе укажем, что из таблицы customers необходимо отобразить поля LastName и FirstName, а из таблицы invoices — поля InvoiceId, CustomerId, InvoiceDate и Total. Поскольку мы работаем с двумя таблицами, содержащими отдельные поля с одинаковыми именами, в условии SELECT следует использовать обозначение tablename.FieldName, как и в условии ON наших соединений, но с одним изменением: вместо полного имени таблицы мы зададим псевдоним, состоящий из первой буквы таблицы, за которой следует точка, а затем имя поля. Наконец, необходимо отсортировать результаты по фамилии клиента. В результате запрос будет выглядеть следующим образом:
SELECT
c. LastName,
c. FirstName,
i. InvoiceId,
i. CustomerId,
i. InvoiceDate,
i. Total
FROM
invoices AS i
INNER JOIN
customers AS c
ON
i. CustomerId = c.CustomerId
ORDER BY
c. LastName
Рис. 66
Примечание
Кажется странным, что мы ссылаемся на псевдонимы (в условии SELECT), прежде чем определим их (в условиях FROM и INNER JOIN). Но следует помнить, что браузер SQL обрабатывает запросы не в той очередности, как их прочел бы человек.
Анализируя первые десять результатов данного запроса, мы видим, что перечисление определенных полей в заданном порядке намного проще, чем вывод всех полей с использованием символа *. Мы также можем представить, насколько сложнее было бы соединение, если бы нам пришлось вводить имя таблицы каждый раз, когда мы ссылаемся на имя поля.
Примечание
В большинстве случаев в условии SELECT рекомендуется указывать отдельные имена полей и избегать использования символа *. В этой главе мы будем использовать символ * только в демонстрационных целях для объяснения структуры JOIN.
Типы соединений
Существует несколько различных типов соединений. До сих пор мы использовали соединения, чтобы предоставить доступ к полям из нескольких таблиц. Мы определили первичный ключ таблицы customers, определили аналогичный внешний ключ в таблице invoices и использовали ключевое слово ON, чтобы связать две таблицы вместе.
Вопрос. Что произойдет, если данные из таблиц, которые мы объединяем, не полностью совпадают?
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система 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, гарантирующее конфиденциальность пользовательской информации. Если вы решились разобраться в том что такое программирование, не нужно ждать.
Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузится в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.