powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли разница между left join и right join?
10 сообщений из 10, страница 1 из 1
Есть ли разница между left join и right join?
    #39505497
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел такую наглядную ссылку с иллюстрациями:
https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

Возник вопрос - если right join полностью идентичен left join (с учетом зеркальности), то зачем он вообще нужен?
Только для удобства или есть другие причины?
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39505503
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть правши, а есть левши...
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39505519
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть функциональных отличий нет и два варианта только для удобства написания запросов?
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39505527
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

По сути, left и rigth и inner join - это условия нула full join'a:

Код: plsql
1.
2.
3.
4.
5.
Select t1.id, t2.id from table1 t1 full join table2 t2 on t1.id = t2.id
where 
t1.id is not null -- left join
t2.id is not null -- rigth join
t1.id is not null and t2.id is not null -- inner join
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39505530
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Абстрактный случай, когда использование left и right позволяют обойтись без подзапроса. Смысла никакого, но можно сэкономить пару символов. Может быть использовано при кривой архитектуре приложения.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t1 as (select 1 id from dual union all
            select 2 from dual),
     t2 as (select 2 fk_id, 'z' name_ from dual),
     t0 as (select 1 sub_id, 's' name_ from dual union all
            select 3, 'z' from dual union all
            select 4, 'x' from dual)
select *
from t1 
     left join t2 on t2.fk_id = t1.id
     right join t0 on t0.sub_id = t1.id or t0.name_ = t2.name_
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39505564
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, спасибо за пояснения.
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39509219
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envАбстрактный случай, когда использование left и right позволяют обойтись без подзапроса.Если предследуется цель видимое отсутствие подзапросов (ясное дело, что под капотом Оракл насоздает латералов), то
Код: plsql
1.
select * from t0 left join t1 left join t2 on t2.fk_id = t1.id on t0.sub_id = t1.id or t0.name_ = t2.name_

Скобочки можно расставить по вкусу.
envМожет быть использовано при кривой архитектуре приложения.Необходимость в подобной логике едва ли говорит о кривости приложения.
Другое дело, что использование left и right скорее свидетельствует о каше в голове у писателя и несколько затрудняет чтение.
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39509222
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Если обратный цикл "идентичен с учетом зеркальности" прямому циклу, зачем он нужен?

Если декремент "идентичен с учетом зеркальности", зачем он нужен?

И последнее, зачем нужна операция умножение, если ее всегда можно выразить через деление (с учетом обработки нулей в знаменателях)?

А что касается правого внешнего соединения, то может в редких случаях быть полезно при написании ad-hoc запросов, чтоб пощупать данные, но в хранимом коде его лучше избегать, имхо. Ну и для "симметрии".
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39509470
A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
A.
Гость
Alibek B.Возник вопрос - если right join полностью идентичен left join (с учетом зеркальности), то зачем он вообще нужен?
Только для удобства или есть другие причины?
Есть другие причины. Гораздо чаще понимание right join понадобится в планах выполнения запросов, чем в их написании. В текущей реализации hash join в Oracle выгоднее иметь меньший датасет слева, по которому строится hash table (или build table), и больший (probe table), который потом скнируется в поисках соответствий в hash table, справа. Поэтому когда Oracle видит, что больший датасет делает left join с меньшим, то в hash join он его постарается перевернуть в right join
Код: plsql
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.
create table t1 as select rownum n from dual connect by level <= 1000;
create table t2 as select rownum n from dual connect by level <= 10000;

select count(*) from t1 left join t2 on t1.n=t2.n;
------------------------------------
| Id  | Operation           | Name |
------------------------------------
|   0 | SELECT STATEMENT    |      |
|   1 |  SORT AGGREGATE     |      |
|*  2 |   HASH JOIN OUTER   |      |
|   3 |    TABLE ACCESS FULL| T1   |
|   4 |    TABLE ACCESS FULL| T2   |
------------------------------------

select count(*) from t2 left join t1 on t1.n=t2.n;

---------------------------------------
| Id  | Operation              | Name |
---------------------------------------
|   0 | SELECT STATEMENT       |      |
|   1 |  SORT AGGREGATE        |      |
|*  2 |   HASH JOIN RIGHT OUTER|      |
|   3 |    TABLE ACCESS FULL   | T1   |
|   4 |    TABLE ACCESS FULL   | T2   |
---------------------------------------
...
Рейтинг: 0 / 0
Есть ли разница между left join и right join?
    #39509474
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A.Alibek B.Возник вопрос - если right join полностью идентичен left join (с учетом зеркальности), то зачем он вообще нужен?
Только для удобства или есть другие причины?
Есть другие причины. Гораздо чаще понимание right join понадобится в планах выполнения запросов, чем в их написании. В текущей реализации hash join в Oracle выгоднее иметь меньший датасет слева, по которому строится hash table (или build table), и больший (probe table), который потом скнируется в поисках соответствий в hash table, справа. Поэтому когда Oracle видит, что больший датасет делает left join с меньшим, то в hash join он его постарается перевернуть в right join

Ты путаешь SQL с реальным механизмом в Oracle.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли разница между left join и right join?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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