Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Связывание таблиц - запятая VS join / 3 сообщений из 3, страница 1 из 1
26.09.2016, 13:08:51
    #39315557
Связывание таблиц - запятая VS join
Ребята приветствую всех!

Периодически встречаю связывания таблиц двумя способами: через запятую и с использованием слова JOIN. Можете объяснить в чем принципиальное отличие ?
Понятно, что в синтаксисе. Но вот с точки зрения постороения, выполнения и оптимизации, какие есть различия?
Если, честно, то мне всегда было удобно связвать таблицы через запятую.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
With Table_1 as
      (select 1 as id1 from Dual 
       union 
       select 2 as id1 from Dual),
     
     Table_2 as
      (select 2 as id2 from Dual 
       union 
       select 3 as id2 from Dual)

--- 1 вариант
select * from Table_1 inner join Table_2
              on Table_1.id1 = Table_2.id2      
--- 2 вариант
select * from Table_1, Table_2
       where Table_1.id1 = Table_2.id2 
    
...
Рейтинг: 0 / 0
26.09.2016, 13:12:55
    #39315560
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связывание таблиц - запятая VS join
STFF ANSI vs Oracle синтаксис. ты ж не первый такой...
...
Рейтинг: 0 / 0
26.09.2016, 13:20:52
    #39315567
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связывание таблиц - запятая VS join
Студент_Oracle2 Ребята приветствую всех!

Периодически встречаю связывания таблиц двумя способами: через запятую и с использованием слова JOIN. Можете объяснить в чем принципиальное отличие ?
Понятно, что в синтаксисе. Но вот с точки зрения постороения, выполнения и оптимизации, какие есть различия?
Если, честно, то мне всегда было удобно связвать таблицы через запятую.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
With Table_1 as
      (select 1 as id1 from Dual 
       union 
       select 2 as id1 from Dual),
     
     Table_2 as
      (select 2 as id2 from Dual 
       union 
       select 3 as id2 from Dual)

--- 1 вариант
select * from Table_1 inner join Table_2
              on Table_1.id1 = Table_2.id2      
--- 2 вариант
select * from Table_1, Table_2
       where Table_1.id1 = Table_2.id2 
    

Принципиальное отличие что ANSI транслируется в native во всех случаях кроме join partition by and full join.
Часто это приводит к созданию inlinve/lateral views.

Если тебе проще использовать native - перепиши следующий запрос (по многим вопросам придет просвевление).
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select fact.*, map.*
  from fact
       join dim_1
          on dim_1.id = fact.dim_1_id
       join dim_n
          on dim_1.dim_n_id = dim_n.id
       left join map
          on fact.type in ('A', 'B', 'C')
         and ((map.category = 'FACT VALUE' and map.value = fact.value)
           or (map.category = 'DETAILED VALUE' and map.value = dim_n.value));



Никогда не приходило в голову почему ни один человек в здравом уме не пишет
Код: plsql
1.
2.
3.
4.
5.
6.
select *
from Table_1
cross join Table_2
...
cross join Table_n
where <каша из предикатов>

вместо join on?

В вообще в поиск. Обсуждалось 100 раз, одним коротким ответом тему не раскроешь.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Связывание таблиц - запятая VS join / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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