6. Виды Joinов?

6. Виды Joinов?

UNKNOWN

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

Особенностями операции соединения являются следующее:

  • в схему таблицы-результата входят столбцы обеих исходных таблиц (таблиц-операндов), то есть схема результата является «сцеплением» схем операндов;
  • каждая строка таблицы-результата является «сцеплением» строки из одной таблицы-операнда со строкой второй таблицы-операнда;
  • при необходимости соединения не двух, а нескольких таблиц, операция соединения применяется несколько раз (последовательно).

SELECT поля_таблиц

FROM таблица_1 

[INNER] | [[LEFT | RIGHT | FULL][OUTER]] JOIN таблица_2 

    ON условие_соединения

[[INNER] | [[LEFT | RIGHT | FULL][OUTER]] JOIN таблица_n 

    ON условие_соединения]

https://habr.com/ru/post/450528/

 

  • LEFT [OUTER]:

SELECT поля_таблиц

FROM левая_таблица LEFT JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

Получение всех данных из левой таблицы, соединённых с соответствующими данными из правой INNER JOIN, но дополнительно мы добавляем null для строк из первой таблицы, для которой ничего не нашлось во второй

RIGHT [OUTER]:

SELECT поля_таблиц

FROM левая_таблица RIGHT JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

Получение всех данных из правой таблицы, соединённых с соответствующими данными из левой это INNER JOIN + null для строк из  второй таблицы, для которой ничего не нашлось в первой

  • LEFT [OUTER]: правая_таблица.ключ IS NULL :

SELECT поля_таблиц

FROM левая_таблица LEFT JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

WHERE правая_таблица.ключ IS NULL

  • RIGHT [OUTER] левая_таблица.ключ IS NULL:

SELECT поля_таблиц

FROM левая_таблица RIGHT JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

WHERE левая_таблица.ключ IS NULL

Получение данных, относящихся только к правой таблице

  • INNER

SELECT поля_таблиц

FROM левая_таблица INNER JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

Тот же самый CROSS JOIN, у которого оставлены только те элементы, которые удовлетворяют условию, записанному в конструкции "ON".

  • FULL OUTER:

SELECT поля_таблиц 

FROM левая_таблица

    FULL OUTER JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

  • FULL OUTER Без совместных данных:

SELECT поля_таблиц 

FROM левая_таблица

    FULL OUTER JOIN правая_таблица

    ON правая_таблица.ключ = левая_таблица.ключ

WHERE левая_таблица.ключ IS NULL

    OR правая_таблица.ключ IS NULL

  • CROSS JOIN декартово произведение

При выборе каждая строка одной таблицы объединяется с каждой строкой второй таблицы, давая тем самым все возможные сочетания строк двух таблиц. Порядок таблиц для оператора не важен, поскольку оператор является симметричным.    

Статья на Хабре



Предыдущий вопрос: 5. Нюансы работы с NULL в SQL. Как проверить поле на NULL?

Следующий вопрос: 7. Что лучше использовать join или подзапросы? Почему?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page