Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 INNER JOIN  [new]
Morskoi_kotik
Member

Откуда:
Сообщений: 25
Подскажите, пожалуйста! Вот возник такой банальный вопрос в голове.

Есть например одна таблица в которой один столбец, пять строк и в каждой строке цифра 5. И есть вторая точно такая же таблица. Какой результат получится если выполнить INNER JOIN ? Сколько строк получится в результате выполнения запроса?
9 ноя 21, 17:25    [22393760]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
Oleg_SQL
Member

Откуда: от туда
Сообщений: 241
Morskoi_kotik,

DECLARE @t TABLE(ID INT);
INSERT INTO @t VALUES (5), (5), (5), (5), (5);
SELECT * FROM @t AS a INNER JOIN @t AS b ON a.id = b.id;


количество букв в вашем вопросе больше чем сам запрос....

Сообщение было отредактировано: 9 ноя 21, 17:37
9 ноя 21, 17:32    [22393762]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9155
+
– Любопытно бы знать, – сказал философ, – если бы, примером, эту брику нагрузить каким-нибудь товаром – положим, солью или железными клинами: сколько потребовалось бы тогда коней?
– Да, – сказал, помолчав, сидевший на облучке козак, – достаточное бы число потребовалось коней.
9 ноя 21, 18:32    [22393795]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
Morskoi_kotik
Member

Откуда:
Сообщений: 25
Oleg_SQL
Morskoi_kotik,

DECLARE @t TABLE(ID INT);
INSERT INTO @t VALUES (5), (5), (5), (5), (5);
SELECT * FROM @t AS a INNER JOIN @t AS b ON a.id = b.id;


количество букв в вашем вопросе больше чем сам запрос....


Прикольно) я и не знал, что в переменную можно вложить таблицу) буду знать теперь)

Получится 25 строк....

По сути вопроса, я че-то не могу сообразить как это происходит технически внутри СУБД.

Вот с LEFT JOIN понятно. К левой таблице присоединяются все строки, которые соответствуют в правой (получается тоже 25 строк). т.е. пять раз по пять.

А вот с INNER JOIN че-то непонятно. Это понятно на сухих простых примерах в интернете, что СУБД выведет все строки, которые совпадают. А вот тут, когда равное количество одинаковых строк. Как он начинает соединять. Вот буквально. Берет значение из какой таблицы и как начинает сканировать совпадения?
10 ноя 21, 09:54    [22394005]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3104
Morskoi_kotik

Вот с LEFT JOIN понятно.

Вот тут я выпал в осадок, INNER JOIN от LEFT JOIN не отличаются за исключением ....

как работает INNER JOIN
Morskoi_kotik

К левой таблице присоединяются все строки, которые соответствуют в правой (получается тоже 25 строк). т.е. пять раз по пять.


ЗЫЖ возможно он поменяет таблицы местами, если в правой будет меньше записей, но смысл от этого не меняется
10 ноя 21, 10:22    [22394031]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32173
Morskoi_kotik
По сути вопроса, я че-то не могу сообразить как это происходит технически внутри СУБД.
Вас интересует реализация, или семантика операции JOIN?

Если первое, то это большая тема, и механизм зависит от многих факторов. Например: "Берет значение из первой таблицы и начинает сканировать вторую на совпадения". И много других вариантов.

Если интересует второе, то в результате получится от 0 до 25 строк, в зависимости от данных в таблице, и от условий соединения.
10 ноя 21, 18:50    [22394375]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4974
Morskoi_kotik,

https://bookree.org/reader?file=555117&pg=6
12 ноя 21, 17:17    [22395224]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4539
HandKot
INNER JOIN от LEFT JOIN не отличаются

Что-то меня тоже на лирику потянуло...

INNER JOIN
В детском саду мальчики берут за руку девочку фамилия которой совпадает (с учётом рода) с фамилией мальчика.
Пускают гулять только полные пары

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

RIGTH JOIN
То же самое, только мальчики и девочки поменялись местами.
Пускают гулять всех девочек, без разницы нашли они себе пару или нет.

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

Возвращаясь к вашей задаче - в садике 5 мальчиков Ивановых и 5 девочек Ивановых.
Сколько раз они смогут выйти на прогулку не повторяясь хоть в одной паре?

P.S. Для вашей задачи все JOIN равноценны, но это не значит, что они не отличаются.

Сообщение было отредактировано: 12 ноя 21, 17:58
12 ноя 21, 17:58    [22395255]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN  [new]
SergiiW
Member

Откуда: СССР
Сообщений: 68
SQL2008,

такого описания я еще не видел. 5+
13 ноя 21, 11:23    [22395499]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить