Внутреннее Соединение против Внешнего Соединения
Внутреннее соединение и Внешнее соединение - это два метода соединения SQL, используемые при обработке запросов к базам данных. Они принадлежат к семейству положений о соединении (два других - это левое и правое соединения). Тем не менее, есть Self Join, который может использоваться для специализированных ситуаций. Цель объединения - объединить поля, используя общие значения для двух таблиц. Эти объединения объединяют записи из нескольких таблиц в базе данных. Создает результирующие наборы, которые могут быть сохранены как другая таблица.
Что такое Inner Join?
Наиболее часто используемой операцией SQL Join является Inner Join. Это можно рассматривать как тип соединения по умолчанию, используемый в приложениях. Внутреннее объединение использует предикат объединения для объединения двух таблиц. Предполагая, что двумя таблицами являются A и B, объединяющий предикат будет сравнивать строки A и B, чтобы найти все пары, которые удовлетворяют предикату. Значения столбцов всех удовлетворенных строк таблиц A и B объединяются для создания результата. Это можно рассматривать как сначала получение перекрестного объединения (декартово произведение) всех записей, а затем возвращение только тех записей, которые удовлетворяют предикату соединения. Однако в действительности декартово произведение не рассчитывается, поскольку оно очень неэффективно. Вместо этого используется хеш-соединение или сортировка-слияние.
Что такое внешнее соединение?
В отличие от внутреннего объединения, внешнее объединение сохраняет все записи, даже если не может найти подходящую запись. Это означает, что внешнему соединению нужна запись, чтобы найти соответствующую запись, чтобы она появилась в результате. Вместо этого он вернет все записи, но у несопоставленных записей будут нулевые значения. Внешние объединения делятся на три подкатегории. Это левое внешнее соединение, правое внешнее соединение и полное внешнее соединение. Это различие основано на том, какая строка таблицы (левая таблица, правая таблица или обе таблицы) сохраняется при обнаружении несопоставленных записей. Левые внешние объединения (также известные как просто левое соединение) сохраняют все записи левой таблицы. Это означает, что даже если число совпадающих записей равно нулю, в таблице результатов все равно будут записи, но для всех столбцов таблицы B будут нулевые значения. Другими словами, все значения из левой таблицы возвращаются с соответствующими значениями справа таблица (или нулевые значения, когда не найдено). Если значения из нескольких строк из левой таблицы сопоставляются с одной строкой из правой таблицы, строка из правой таблицы будет повторяться по мере необходимости. Правое внешнее соединение во многом похоже на левое внешнее соединение, но обработка таблиц ценится. Это означает, что у результата будут все строки правой таблицы хотя бы один раз с соответствующими значениями левой таблицы (и нулевыми значениями для несоответствующих правых значений). Полное внешнее соединение является более полным, чем левое и правое внешние соединения. Это приводит к объединению эффекта применения как левого, так и правого внешнего соединенного вместе.
В чем разница между внутренним и внешним соединением?
Внутреннее объединение не сохраняет несопоставленные строки в результате, но внешнее объединение сохранит все записи хотя бы из одной таблицы (в зависимости от того, какое внешнее объединение было использовано). Таким образом, поведение отсутствия информации о несоответствующих строках в таблице результатов нежелательно, вам необходимо всегда использовать одно из внешних объединений (вместо внутреннего объединения). Внутреннее объединение может не дать результата, если совпадений не найдено. Но внешнее объединение всегда будет создавать результирующую таблицу, даже без соответствующих строк. Внутреннее объединение всегда будет возвращать таблицы со значениями (если возвращено). Но внешние объединения могут привести к таблицам с нулевыми значениями.