Эффективно используйте SQL, понимая основы типов JOIN.

Присоединение — наиболее широко используемое предложение в SQL-серверах. Предложение соединения используется для извлечения и объединения данных из двух или более таблиц. Сегодня мы обсудим типы SQL Join, описанные с картинками.

Итак, начнем!

Пример схемы

Для нашего понимания мы предполагаем три таблицы. Вот таблицы ниже

Таблица 1

Таблица 2

Таблица 3

Приступим к описанию типов соединений SQL.

Выбрать из двух таблиц

SELECT *
FROM Table1;
SELECT *
FROM Table2;

Левое внешнее соединение

SELECT *
FROM Table1 t1
LEFT OUTER JOIN Table2 t2
ON t1.fk = t2.id;

Полуприсоединиться

SELECT *
FROM Table1 t1
WHERE EXISTS (SELECT 1
FROM Table2 t2
WHERE t1.fk = t2.id
);

LEFT OUTER JOIN с исключением

SELECT *
FROM Table1 t1
LEFT OUTER JOIN Table2 t2
ON t1.fk = t2.id
WHERE t2.id IS NULL;

ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ с исключением

SELECT *
FROM Table1 t1
FULL OUTER JOIN Table2 t2
ON t1.fk = t2.id
WHERE t1.fk IS NULL
OR t2.id IS NULL;

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.fk = t2.id;

ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

SELECT *
FROM Table1 t1
RIGHT OUTER JOIN Table2 t2
ON t1.fk = t2.id;

АНТИ ПОЛУСОЕДИНЕНИЕ

SELECT *
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1
FROM Table2 t2
WHERE t1.fk = t2.id
);

ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ с исключением

SELECT *
FROM Table1 t1
RIGHT OUTER JOIN Table2 t2
ON t1.fk = t2.id
WHERE t1.fk IS NULL;

ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ - декартово произведение

SELECT *
FROM Table1 t1
CROSS JOIN Table2 t2;

НЕРАВНОМЕРНОЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ

SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.fk >= t2.id;

ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ

SELECT *
FROM Table1 t1
CROSS APPLY
[dbo].[someTVF](t1.fk)
AS t;

НАРУЖНОЕ ПРИМЕНИТЬ

SELECT *
FROM Table1 t1
OUTER APPLY
[dbo].[someTVF](t1.fk)
AS t;

Два ПОЛНЫХ ВНЕШНИХ СОЕДИНЕНИЯ

SELECT *
FROM Table1 t1
FULL OUTER JOIN Table2 t2
ON t1.fk = t2.id
FULL OUTER JOIN Table3 t3
ON t1.fk_table3 = t3.id;

Два внутренних соединения

SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.fk = t2.id
INNER JOIN Table3 t3
ON t1.fk_table3 = t3.id;

Два ЛЕВЫХ ВНЕШНИХ СОЕДИНЕНИЯ

SELECT *
FROM Table1 t1
LEFT OUTER JOIN Table2 t2
ON t1.fk = t2.id
LEFT OUTER JOIN Table3 t3
ON t1.fk_table3 = t3.id;

ВНУТРЕННЕЕ СОЕДИНЕНИЕ и ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

SELECT *
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.fk = t2.id
LEFT OUTER JOIN Table3 t3
ON t1.fk_table3 = t3.id;

КРОМЕ

SELECT fk as id
FROM Table1
EXCEPT
SELECT ID

СОЮЗ

SELECT fk as id
FROM Table1
UNION
SELECT ID

ПЕРЕСЕЧАТЬ

SELECT fk as id
FROM Table1
INTERSECT
SELECT ID
FROM Table2:

Последние мысли

Надеюсь, вам понравилась эта статья, и она будет полезна для вас.

Удачного программирования! :D

Вот еще одна моя статья о шпаргалке по SQL. Надеюсь, это также будет полезно для вас, ребята.



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.