Каждый результат операции SQL является функционально новой таблицей, независимо от того, хранится она на диске или в памяти.
Функция объединения состоит в том, чтобы «объединить» две таблицы в синтетическую третью таблицу, которая (обычно) существует в памяти только во время ее вывода в приложение.
Причина использования объединения состоит в том, чтобы уменьшить аномалии данных , гарантируя, что данные появляются в одном и только одном месте в базе данных.
Учтите следующее:
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
Здесь всякий раз, когда правительство меняет почтовые индексы (что происходит слишком часто для вкусов разработчиков баз данных *), необходимо обновлять таблицу персон, чтобы все старые почтовые индексы правильно принадлежали правильному городу и новому почтовому индексу.
В этом случае один и тот же почтовый индекс находится в нескольких кортежах таблицы, и, если таблица редактируется вручную, это приведет к серьезным аномалиям обновления, поскольку новые комбинации города / почтового индекса вводятся без обновления базы данных в целом.
Имея три таблицы вместо этого, мы получаем те же данные, но с повышенной гибкостью и надежностью (за счет некоторой производительности, хотя вопросы «соответствующей денормализации» являются темой для другой серии ответов).
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
И мы можем получить одну «таблицу» из вышеперечисленного с помощью следующего запроса:
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
Это позволяет нам обновлять отдельные таблицы всякий раз, когда что-то конкретное в них изменяется, не повреждая остальные связанные данные.
An INNER JOIN
является типом соединения по умолчанию. Грубо говоря, он отмечает: «объединить кортежи, где эта запись из таблицы a совпадает с этой записью из таблицы b». Другие типы объединений:OUTER JOINS
и так называемый a CARTESIAN PRODUCT
. Внешнее объединение: «Возьмите все из левой или правой таблицы (как указано) и там, где другая таблица совпадает, соедините ее. Если она не совпадает, заполните ее нулями» И декартово произведение (без попадания в реляционную алгебру is: Возьмите все возможные комбинации кортежей в обеих таблицах и выведите их в одну таблицу, не сопоставляя ничего.
* Больше, чем когда-либо, особенно в случае перемещения границ почтовых индексов из-за Gerrymandering