Прекрасный мир соединений, давайте сегодня погрузимся в него глубже!

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

Мы узнаем о перекрестных, внутренних, самостоятельных и внешних соединениях!

Понимание соединений

Почему присоединяется?

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

Что такое присоединение?

Соединение — это механизм связывания или соединения таблиц в операторе SELECT (отсюда и название соединения). Вы можете объединить несколько таблиц, используя специальный синтаксис, чтобы вернуть один набор выходных данных, и объединение связывает правильные строки в каждой таблице на лету.

Примечание. Помните, что объединение не является физическим объектом; то есть он не существует в самих таблицах базы данных. СУБД создает соединение по мере необходимости и сохраняет его на время выполнения запроса.

Создание объединения

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

Пример:

Что такое декартово произведение?

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

Что такое перекрестные соединения

Тип соединения, возвращающий декартово произведение, иногда называют перекрестным соединением.

Что такое внутренние соединения

Внутреннее соединение используется для возврата строк из обеих таблиц, соответствующих заданному условию. Это наиболее часто используемая операция соединения, и ее можно рассматривать как тип соединения по умолчанию.

Внутреннее соединение далее делится на три подтипа:

  1. Тета Присоединиться
  2. Естественное соединение
  3. ЭКВИ

Присоединиться к тета

Theta Join позволяет объединить две таблицы на основе тета-условия. Для всех операторов сравнения работает Theta joins. Он представлен символом . Соединение Theta — это общий случай операции JOIN.

A ⋈ A.column 2 > B.column 2 (B)

Присоединиться к EQUI

Equijoin — соединение, основанное на проверке равенства между двумя таблицами. Этот тип соединения также известен как внутреннее соединение. На самом деле для этих объединений можно использовать немного другой синтаксис, явно указав тип соединения.

Когда в соединении Theta используется только условие эквивалентности, оно называется соединением EQUI. Соединение EQUI — наиболее сложная для эффективной реализации операция в РСУБД, и это одна из причин критических проблем с производительностью РСУБД.

A ⋈ A.column 2 = B.column 2 (B)

Естественное присоединение

Natural Join не использует никаких операторов сравнения. Атрибуты в этом типе соединения должны иметь одно и то же имя и домен. Между двумя отношениями в Natural Join должен быть хотя бы один общий атрибут.

Он выполняет выборку, формируя равенство для тех атрибутов, которые появляются в обоих отношениях, и устраняет повторяющиеся атрибуты.

Пример:

Объединение нескольких таблиц

Количество таблиц, которые можно объединить в операторе SELECT в SQL, не ограничено. Основные правила создания соединения остаются неизменными. Сначала перечислите все таблицы, затем определите их отношения.

Примечание. Максимальное количество объединяемых таблиц Postgres составляет 61.

Примечание. Максимальное количество таблиц в объединении

Количество таблиц, которые можно объединить в ANSI SQL, не ограничено, но проверьте наличие реализаций в вашей СУБД.

Пример:

Использование псевдонимов таблиц

Пример:

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

Использование различных типов соединений

Давайте рассмотрим самосоединение, естественное соединение и внешнее соединение.

Что такое самостоятельные соединения

Как следует из названия, самосоединение соединяет таблицу с самой собой. Чтобы использовать самообъединение, в таблице должен быть столбец (назовем его X), который служит первичным ключом, и другой столбец (назовем его Y), в котором хранятся значения, которые можно сопоставить со значениями в столбце X. Столбцы X и Y не обязательно должны иметь одно и то же значение для любой данной строки, а столбец Y может даже быть нулевым.

Пример:

Предположим, вы хотите отправить письмо всем контактным лицам клиентов Джима Джонса, которые работают в одной компании. Этот запрос требует, чтобы вы сначала определили, в какой компании работает Джим Джонс, а затем какие клиенты работают в этой компании. Один из подходов к этой проблеме заключается в следующем:

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

Что такое естественные соединения

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

Natural Join соединяет две таблицы с одинаковым именем атрибута и типом данных. Результирующая таблица будет иметь все атрибуты обеих таблиц, но будет иметь только одну копию каждого общего столбца.

INNER и NATURAL соединения

Inner Join объединяет две таблицы на основе столбца, явно указанного в предложении ON. Результирующая таблица будет включать все атрибуты из обеих таблиц, включая общий столбец.

Пример:

Внешние соединения

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

Пример:

Примечание. Внешние соединения SQLite

SQLite поддерживает LEFT OUTER JOIN, но не RIGHT OUTER JOIN. К счастью, если вам нужна RIGHT OUTER JOINфункциональность в SQLite, есть очень простое решение, просто измените порядок таблиц.

Полные внешние соединения

Ключевое слово FULL OUTER JOIN возвращает все записи, если есть совпадение в левой (таблица 1) или правой (таблица 2) записях таблицы.

Пример:

Примечание. Синтаксис FULL OUTER JOIN не поддерживается MariaDB, MySQL или SQLite.

Примечание. Ключевое слово FULL OUTER JOIN возвращает все совпадающие записи из обеих таблиц, независимо от того, совпадает другая таблица или нет. Таким образом, если в «Заказчиках» есть строки, которым нет совпадений в «Заказах», или если в «Заказах» есть строки, которым нет совпадений в «Клиенты», эти строки также будут перечислены.

Использование объединений с агрегатными функциями

Пример:

Краткое содержание

Как вы видели, джойны не так страшны, когда вы их изучаете ❤️

Надеюсь, эта статья показалась вам интересной!