⛓️🗄️ Соединения в SQL. Часть 2. Сложные типы соединений
В первой части статьи мы узнали, что такое соединения и рассмотрели простые типы соединений: внутреннее, правое и левое. В заключение рассмотрим более сложные варианты, которые позволяют получать выборки для более интересных случаев.
Данная статья является переводом. Ссылка на оригинал.
Полное соединение (или полное внешнее соединение) возвращает все строки с учетом совпадений, найденных в одной из таблиц. Другими словами, мы получим результат, будто мы применили левое и правое соединения одновременно.
Вот пример полного соединения:
Результат:
Этот запрос возвращает тот же результат, что и при правом соединении, однако он вернул бы другой результат, если бы в левой таблице была строка без соответствующего значения в правой таблице.
Давайте поменяем местами таблицы и запустим его еще раз.
Как видите, результат тот же самый. Для полного соединения порядок соединяемых таблиц не имеет значения.
Перекрестное соединение возвращает строки, составленные из всех возможных комбинаций левой и правой частей, полученных их соединяемых таблиц. Иначе говоря, оно возвращает декартово произведение (Cartesian product) таблиц, которые участвуют в соединении.
Результат:
Нетрудно себе представить, что такое соединения может быть весьма ресурсоемким, если его выполнить для достаточно больших таблиц. Например, вот так:
Чтобы ограничить размер выборки, в запрос нужно добавить оператор WHERE, который превратит его во внутреннее соединение:
Комментарии