Эффективно используйте 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 и присоединитесь к нашему Коллективу талантов.