Найти в Дзене
ГАУС IT

Разберем JOIN за 5 мин

Все это время мы работали с одной таблицей, но обычно информация раздроблена и хранится в разных таблица, а эти таблицы связаны по первичным ключам, или же другими соединениями, что такое первичные ключи мы с вами разбирали в первой статье. Чтоб получить информацию сразу из нескольких связанных таблиц нам понадобится такая операция как JOIN, которая обозначает явное объединение. Как всегда мы сначала начнем с синтаксиса: FROM <таблица 1> [INNER] {{LEFT | RIGHT | FULL } [OUTER]} JOIN <таблица 2> [ON <предикат>] Как можно заметить соединение может быть либо внутренним (INNER), либо одним из внешних (OUTER). Служебные слова INNER и OUTER можно опускать, поскольку внешнее соединение однозначно определяется его типом — LEFT (левое), RIGHT (правое) или FULL (полное), а просто JOIN будет означать внутреннее соединение. Давайте посмотрим на 2 таблицы: Если мы напишем запрос: SELECT us.ID, us.NAME as user_name, c.NAME as city_name FROM USER us JOIN CITY c on us.CITYID = c.CITYID То мы получим

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

Чтоб получить информацию сразу из нескольких связанных таблиц нам понадобится такая операция как JOIN, которая обозначает явное объединение.

Как всегда мы сначала начнем с синтаксиса:

FROM <таблица 1>
[INNER] {{LEFT | RIGHT | FULL } [OUTER]} JOIN <таблица 2>
[ON <предикат>]

Как можно заметить соединение может быть либо внутренним (INNER), либо одним из внешних (OUTER). Служебные слова INNER и OUTER можно опускать, поскольку внешнее соединение однозначно определяется его типом — LEFT (левое), RIGHT (правое) или FULL (полное), а просто JOIN будет означать внутреннее соединение.

Давайте посмотрим на 2 таблицы:

Таблица User и City
Таблица User и City

Если мы напишем запрос:

SELECT us.ID, us.NAME as user_name, c.NAME as city_name
FROM USER us
JOIN CITY c on us.CITYID = c.CITYID

То мы получим только те данные, которые пересекаются:

Результат
Результат

Город Санкт-Петербург не попал потому что никто не живет там.

Так же существует 2 внешних объединения это Left и Right join.

Давай-те добавим еще одного пользователя. 5 Иван, который не живет не в одном из текущих городов и напишем запрос:

SELECT us.ID, us.NAME as user_name, c.NAME as city_name
FROM USER us
LEFT JOIN CITY c on us.CITYID = c.CITYID
Результат
Результат

У нас отбираются записи все из левой таблице, левая таблица это таблица USER.

Если же мы поменяем LEFT на RIGHT:

SELECT us.ID, us.NAME as user_name, c.NAME as city_name
FROM USER us
RIGHT JOIN CITY c on us.CITYID = c.CITYID

То ситуация будет следующая:

Результат
Результат

Отберем все города и только тех людей которые в них проживают.

Соединяя записи с помощью JOIN и условно создаем новую таблицу в памяти и можем с ней работать как и с обычной таблице, т.е. делать из нее выборку, группировать и т.п., все что мы делаем с обычной таблице.

Таким образом мы можем отобрать всех людей, которые живут только в Москве сделав следующее:

SELECT us.ID, us.NAME as user_name, c.NAME as city_name
FROM USER us
JOIN CITY c on us.CITYID = c.CITYID
WHERE c.NAME = ‘Москва’

Мы так же можем использовать под запросы в JOIN или же делать JOIN на под запросы. Будет выглядеть это так:

SELECT us.ID, us.NAME as user_name, c.NAME as city_name
FROM USER us
JOIN (
SELECT c.CITYID, c.Name
FROM CITY
) c on us.CITYID = c.CITYID
WHERE c.NAME = ‘Москва’

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

Тут главное знать несколько нюансов, результат подзапроса создает, так сказать, виртуальную таблицу, которую мы должны обозвать и в нашем случае это C, и мы соединяем ее как обычную таблицу по CITYID

Про JOIN и подзапросы можно говорить ещё очень много, но эта статья дала вам основы, которые можно использовать и решать более сложные задачи!

Подведем итог

Мы разобрали синтаксис JOIN, так же какие они бывают, и использование JOIN и подзапроса

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

#it #sql #обучение #курс