powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / условия сравнения при JOIN
19 сообщений из 19, страница 1 из 1
условия сравнения при JOIN
    #39768083
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи! ПРиветствую!

Объясните пожалуйста логику результирующего множества при джойне 2х таблиц в условии джойна которых использую операторы сравнения > или <.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE TABLE joins
(
ID int NOT NULL,
name varchar (20),
otdel int,
CONSTRAINT PK_IiD PRIMARY KEY (ID)
)
INSERT INTO joins
VALUES
(1, 'Ivan', 10),
(2, NULL, 10),
(3, 'Bidlan', 20),
(4, 'Kaplan', 30),
(5, NULL, 30)


CREATE TABLE joins2
(
otdel int NOT NULL,
oname varchar (20),
loc varchar(20),
CONSTRAINT PK_otdel PRIMARY KEY (otdel)
)

INSERT INTO joins2
VALUES
(10, 'PROGRESS', 'Moskau'),
(20, 'REGRESS', 'Tver'),
(30, 'DEDUKT', 'Omsk'),
(40, 'INDUKT', 'Rostov'),
(50, 'KONDUKT', 'SPB')


ALTER TABLE joins
ADD CONSTRAINT FK_otdel FOREIGN KEY (otdel)
REFERENCES joins2 (otdel)




С запросами в которых условие ON j1.otdel = j2.otdel все понятно...

Однако в запросе плана

Код: sql
1.
2.
3.
4.
5.
SELECT j1.otdel, j2.otdel
FROM joins j1
INNER JOIN
joins2 j2
ON j1.otdel > j2.otdel



где сравниваю отделы.. Результирующее множество вводит меня в ступор... Прошу вас объяснитью

Само множество

otdel otdel
20 10
30 10
30 10
30 20
30 20

Спасибо.
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768092
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

а что не так? условие сравнения выполнено. Для каждой строки из таблицы слева выбрать строки из таблицы справа, для которых значение справа будет меньше, чем слева.
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768105
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосовdermama,

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

Спасибо, я разобрался)
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768111
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermama,

У меня еще один вопрос

Почему при условии

SELECT j1.otdel, j2.otdel
FROM joins j1
INNER JOIN
joins2 j2
ON j1.otdel < j2.otdel

результирующее множество

otdel otdel
10 20
10 20
10 30
10 30
20 30
10 40
10 40
20 40
30 40
30 40
10 50
10 50
20 50
30 50
30 50

как при правом соединении? ведь по идее, при внутреннем соединении должны использвоать лишь данные которые есть в обеих таблицах, а тут уже используются отделы 40 и 50 в сравнении..
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768159
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,
тебе же написали уже. Или читать уже не модно?
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768179
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waszkiewiczdermama,
тебе же написали уже. Или читать уже не модно?

как при правом соединении? ведь по идее, при внутреннем соединении должны использвоать лишь данные которые есть в обеих таблицах, а тут уже используются отделы 40 и 50 в сравнении..

а ты читать умеешь? я разобрался с прницпом. - у меня вопрос совсем в другом.
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768199
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

условие в on истинно? Что ж ты еще хочешь?
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768204
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waszkiewiczdermama,

условие в on истинно? Что ж ты еще хочешь?

теперь понятно, спасибо!
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768225
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaя разобрался с прницпомЛогически выполнение запроса выглядит так: для каждой строки j1 перебираем все строки в j2, и выводим те сочетания строк из j1 и 2, для которых выполнено условие после "on". Это как бы два воображаемых "вложенных цикла".

То же самое будет, когда в запросе участвуют больше таблиц, только тогда этих воображаемых "вложенных циклов" будет не 2, а больше, по количеству таблиц.
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768229
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgdermamaя разобрался с прницпомЛогически выполнение запроса выглядит так: для каждой строки j1 перебираем все строки в j2, и выводим те сочетания строк из j1 и 2, для которых выполнено условие после "on". Это как бы два воображаемых "вложенных цикла".

То же самое будет, когда в запросе участвуют больше таблиц, только тогда этих воображаемых "вложенных циклов" будет не 2, а больше, по количеству таблиц.А условие после "on" может быть абсолютно любым.
Например:
Код: sql
1.
2.
3.
4.
SELECT j1.otdel, j2.otdel
FROM joins j1
  INNER JOIN joins2 j2
    ON getdate() > '20200101'


Этот запрос до Нового Года выведет 0 строк, а после Нового Года выведет все комбинации строк из joins и joins2
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768266
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Спасибо за полезную информацию.
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768561
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgdermamaя разобрался с прницпомЛогически выполнение запроса выглядит так: для каждой строки j1 перебираем все строки в j2, и выводим те сочетания строк из j1 и 2, для которых выполнено условие после "on". Это как бы два воображаемых "вложенных цикла".

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

не совсем так
репроцессор ервака может ко кешу опередлить наименьшуюю по мощьности(колко строк) и к ней применить условие а к ней уже применить нестет лупс(вложенные циклы)... но а) надо смотреть объем таблиц б) лучшеб он применил мердж

смотрите план запроса
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768564
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и да вложенных циклов может быт НАМНОГО больше чем колво таблиц. могу привести пример если интересно. сеек и скан индекса дает 2 ллуп.. при джойне 2х таблиц. и того 2 таблице а цикла 2
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768565
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
use tempdb;
go

create table T1 (
 id int identity(1,1),
 color int primary key clustered,
 dddd nvarchar(10)

);

create table T2 (
 id int identity(1,1)  ,
 color int  primary key clustered,
 dddd nvarchar(10)

);

select * from
T1 
inner join T2 

on t1.color = T2.color




вот так 1 луп. если в 1 таблице колор является кластерныем а в другой просто индексом то добавляется 2 луп. проблемс(
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768610
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanittoalexeyvgЛогически выполнение запроса выглядит так: для каждой строки j1 перебираем все строки в j2, и выводим те сочетания строк из j1 и 2, для которых выполнено условие после "on". Это как бы два воображаемых "вложенных цикла".

То же самое будет, когда в запросе участвуют больше таблиц, только тогда этих воображаемых "вложенных циклов" будет не 2, а больше, по количеству таблиц.не совсем так
репроцессор ервака может ко кешу опередлить наименьшуюю по мощьности(колко строк) и к ней применить условие а к ней уже применить нестет лупс(вложенные циклы)... но а) надо смотреть объем таблиц б) лучшеб он применил мердж

смотрите план запросаНе-не, я же говорю - "логически".
Я описываю, не "как исполняется запрос", а "какой будет результат".

Потому что большинство начинающих специалистов не понимает, что там накорябано в условиях, что это за "JOIN" такой, вы же видите, как автор недоумевает, что означает условие: "j1.otdel > j2.otdel". Они учат в ВУЗе реляционную алгебру, умные все, но не понимают.

А на самом деле, логически это очень просто: "проверка условий для каждого сочетания строк".
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768765
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну реляционная алгебра ето гут ..я например ее не знаю я двигателист( но вообще тчо тут не понятного? на пальцах можно пояснить
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39768767
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пусть почитают умные книги от Ицке Бен Гана... полезно будет там все описано
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39769064
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pahanittoпусть почитают умные книги от Ицке Бен Гана... полезно будет там все описано

а название книжки можно полностью?
...
Рейтинг: 0 / 0
условия сравнения при JOIN
    #39769090
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamapahanittoпусть почитают умные книги от Ицке Бен Гана... полезно будет там все описано

а название книжки можно полностью?
"Microsoft SQL Server 2012. Основы T-SQL"
Есть ещё 2: https://www.labirint.ru/authors/127540/
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / условия сравнения при JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]