INNER JOIN vs OUTER JOIN: разъяснение концепций SQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

INNER JOIN возвращает такие строки, по которым фигурируют совпадения в обеих связываемых таблицах.

SQL
Скопировать код
SELECT a.id, b.value
FROM TableA a
INNER JOIN TableB b ON a.key = b.key;

OUTER JOIN позволит получить все строки из одной таблицы и соответствующие им строки из второй, или даже все строки из обеих таблиц, если такие имеются. OUTER JOIN разделяют на три вида: LEFT (исходные данные из "левой" таблицы), RIGHT (из "правой") и FULL (из обеих).

SQL
Скопировать код
-- LEFT OUTER JOIN
SELECT a.id, b.value
FROM TableA a
LEFT JOIN TableB b ON a.key = b.key;

-- RIGHT OUTER JOIN
SELECT a.id, b.value
FROM TableA a
RIGHT JOIN TableB b ON a.key = b.key;

-- FULL OUTER JOIN
SELECT a.id, b.value
FROM TableA a
FULL JOIN TableB b ON a.key = b.key;

Для понимания различий можно сделать аналогию с принципами кулинарии: INNER JOIN работает с точностью шеф-повара, используя только идеально сочетающиеся ингредиенты, в то время как OUTER JOIN напоминает щедрый шведский стол, где представлено всё без исключения.

Кинга Идем в IT: пошаговый план для смены профессии

Механизмами операций соединения

На "кухне" SQL операции JOIN составляют детальный план, определяя структуру будущего датасета.

INNER JOIN: Тщательный отбор

  • Ключевые особенности: Объединяет пары данных, в которых есть совпадения из двух указанных таблиц.
  • Применение: Необходим при важности строгих соответствий данных.
  • Результат: Вернет компактный набор данных, без несопоставленных элементов.

OUTER JOIN: Включительность

  • LEFT JOIN: Дает преимущество "левой" таблице.
  • RIGHT JOIN: Концентрация на "правой" таблице.
  • FULL JOIN: Объединяет данные с обеих таблиц.
  • Особенность: Особое внимание стоит уделить правильному формулированию условий в присоединении ON — ошибка может привести к потере данных.
  • Фильтрация после соединения: Применение оператора WHERE после OUTER JOIN может узкоспециализировать результаты, приближая их к INNЕR JOIN.

Нестандартные условия соединения

  • OUTER JOIN ON 1=0: Запрос выведет все строки, но вместо соответствующих данных – значения NULL, по принципу 'UNION ALL'.
  • INNER JOIN ON 1=1: Такой подход аналогичен CROSS JOIN и создает декартово произведение из строк.

Поясним на анимациях и SQL Fiddle

Наглядные примеры и интерактивные практикумы на сервисах вроде SQL Fiddle объясняют принцип работы операций JOIN с понятностью даже для новичков в SQL.

Выбор вашего типа соединения

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

Примеры на SQL

Рассмотрим несколько примеров SQL-запросов для наглядного представления различных типов JOIN:

Точная подборка через INNER JOIN

SQL
Скопировать код
-- Сопоставление сотрудников с их отделами
SELECT e.Name, d.DepartmentName
FROM Employees e
INNER JOIN Departments d ON e.DepartmentID = d.ID;

Обширное покрытие данных с LEFT JOIN

SQL
Скопировать код
-- Список всех продуктов, включая не проданные товары
SELECT p.ProductName, s.SaleDate
FROM Products p
LEFT JOIN Sales s ON p.ID = s.ProductID;

Помните, что использование WHERE после OUTER JOIN может сократить выходной датасет.

Визуализация

Предположим, у нас есть две кухни: A (🍔) и B (🍣):

Кухня A (🍔): [Бургер, Картофель фри, Салат] Кухня B (🍣): [Суши, Картофель фри, Салат]

Оператор INNER JOIN отобразит Комбинированное меню 🍽, в котором будут только те блюда, которые присутствуют и на кухне A, и на кухне B: [Картофель фри, Салат].

Оператор OUTER JOIN выдаст Полное меню🍱, включающее в себя все блюда с каждой кухни: [Бургер, Картофель фри, Салат, Суши].

Ехидная аналогия сочетания данных для гастрономических гурманов! 🌟

Нестандартное соединение

SQL при работе с JOIN не ограничивается только стандартными условиями. Осознание возможности аномальных случаев открывает перед вами широкие горизонты настройки запросов.

LEFT JOIN с искусным подходом

SQL
Скопировать код
-- Поиск сотрудников без привязки к отделам
SELECT a.id, b.value
FROM TableA a
LEFT JOIN TableB b ON a.key = b.key
WHERE b.key IS NULL;

Состояние вещей в FULL OUTER JOIN

SQL
Скопировать код
-- Определение записей без пары из обеих таблиц
SELECT a.id AS 'A_id', b.id AS 'B_id', a.value, b.value
FROM TableA a
FULL OUTER JOIN TableB b ON a.key = b.key
WHERE a.key IS NULL OR b.key IS NULL;

Полезные материалы

  1. Визуальное представление SQL JOIN – CodeProject.
  2. SQL Joins – W3Schools.
  3. Сравнение Inner Join и Outer Join – Difference and Comparison | Diffen.
  4. Обзор типов SQL JOIN и руководство по их использованию – SQL Shack.
  5. FROM clause plus JOIN, APPLY, PIVOT (T-SQL) – SQL сервер.
  6. В чем разница между "INNER JOIN" и "OUTER JOIN"? – Stack Overflow.
  7. 13.2.13.2 Предложение JOIN – Oracle.