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 напоминает щедрый шведский стол, где представлено всё без исключения.

Пошаговый план для смены профессии

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

На "кухне" 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.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой тип соединения в SQL возвращает только совпадающие строки из двух таблиц?
1 / 5