Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужно подробное описание работы объединения JOIN [D5, D6, IB6.x, Firebird 1.5]


Страницы:   1 2 3

Sirus ©   (2004-12-02 08:16:00) 

Привет Мастера...
Нужна документация по работе объединения JOIN в Interbase/Firebird... Желательно подробная...


ЮЮ   (2004-12-02 11:37:00) [21]

Ну уж если в ORACLE

select a.xx, b.yy
from atable a, btable b
where a.simefield = b.somefield

эквивалентно

select a.xx, b.yy
from
atable a
LEFT JOIN btable b ON a.simefield = b.somefield

тогда понятно, почему спецы по ORACLE в таком почёте :)


Sergey_Masloff   (2004-12-02 11:30:00) [22]

ЮЮ ©   (02.12.04 11:23) [19]
>И какой это OUTER? LEFT, RIGTH или FULL? :)
LEFT

>или в [12] я не прав?
INNER бывает LEFT и RIGHT
FULL он сам по себе

бывает (ИМХО):
закрытый
открытый (левый и правый)
полный (как одновременно левый и правый)
ну еще бывает произведение таблиц

Дейт считает что полный это отдельный вид. Грабер относит FULL к открытым.


Johnmen   (2004-12-02 11:26:00) [23]

>Sergey_Masloff   (02.12.04 11:16) [18]
>OUTER JOIN btable b ON a.simefield = b.somefield

Чего-то ты здесь не дописал, однако...:)


Johnmen   (2004-12-02 11:25:00) [24]

>Sergey_Masloff   (02.12.04 11:10) [15]

Выполниться одинаково. Неявное внутреннее (INNER) соединение.
А если (+), то это уже внешнее соединение (OUTER), левое (LEFT) или правое (RIGHT).
Хотя ты и сам эти элементарные основы знаешь...
Как с моим утверждением ?
Отвечаю:
1. Казалось бы, причем тут ORACLE ?
2. Anatoly Podgoretsky ©   (02.12.04 11:03) [13]


ЮЮ   (2004-12-02 11:23:00) [25]

Sergey_Masloff   (02.12.04 11:16) [18]

И какой это OUTER? LEFT, RIGTH или FULL? :)

или в [12] я не прав?


Sergey_Masloff   (2004-12-02 11:16:00) [26]

ЮЮ ©   (02.12.04 11:13) [17]
Эквивалентно
а в IB эквивалентно

select a.xx, b.yy
from
atable a
OUTERJOIN btable b ON a.simefield = b.somefield

и не только в IB ;-)


ЮЮ   (2004-12-02 11:13:00) [27]

>В ORACLE и INTERBASE такой запрос выполнится по-разному

Неужели в ORACLE это не эквивалентно
select a.xx, b.yy
from
 atable a
 [INNER] JOIN btable b ON a.simefield = b.somefield ????


Sergey_Masloff   (2004-12-02 11:12:00) [28]

Ну то есть когда я говорю JOIN я имею в виду СОЕДИНЕНИЕ а не синтаксис записи который различается в явном и неявном JOIN-ах.


Sergey_Masloff   (2004-12-02 11:10:00) [29]

Johnmen ©   (02.12.04 10:57) [11]
>А я и не спорю. Я утверждаю, что если для JOIN не указано никаких предикатов


select a.xx, b.yy
from atable a, btable b
where a.simefield = b.somefield


это тоже соединение, иначе JOIN. Он может быть закрытым и открытым. Inner и Outer, другими словами. В ORACLE и INTERBASE такой запрос выполнится по-разному. Как с твоим утверждением? ;-)

Вот что я имел в виду ;-)


Anatoly Podgoretsky   (2004-12-02 11:04:00) [30]

Johnmen ©   (02.12.04 10:57) [11]
В соответствии со стандартом, об приверденности которому говорят все производители :-)


Anatoly Podgoretsky   (2004-12-02 11:03:00) [31]

Johnmen ©   (02.12.04 10:57) [11]
В соответствии со стандартом, об приверденности которому говорят все производители :-)


ЮЮ   (2004-12-02 11:01:00) [32]

>Sergey_Masloff   (02.12.04 10:50) [10]

А как я понял, LEFT, RIGHT и FULL - это и есть OUTER JOIN-ы
И есть просто [INNER] JOIN.

Разве возможны комбинации
 T1 LEFT INNER JOIN T2   и T1 OUTER JOIN T2 ???


Johnmen   (2004-12-02 10:57:00) [33]

>Sergey_Masloff   (02.12.04 10:50) [10]

А я и не спорю. Я утверждаю, что если для JOIN не указано никаких предикатов (по умолчанию), то это INNER JOIN.

Казалось бы, причем тут MSSQL, LocalSQL и ORACLE ?
:)))


Sergey_Masloff   (2004-12-02 10:50:00) [34]

ЮЮ ©   (02.12.04 10:23) [8]
Johnmen ©   (02.12.04 10:11) [7]
Не спорьте. В MSSQL и LocalSQL по умолчанию OUTER
В ORACLE INNER
Вобщем, по разному


Anatoly Podgoretsky   (2004-12-02 10:40:00) [35]

Если тебе нужно объединение, то тебе нужен UNION


ЮЮ   (2004-12-02 10:23:00) [36]

>Johnmen ©   (02.12.04 10:11) [7]
>По умолчанию - INNER.

BOL -> auter joins
 LEFT OUTER JOIN or LEFT JOIN

Local SQL Help

SELECT column_list

FROM table_reference
  LEFT | RIGHT | FULL [OUTER] JOIN table_reference
   ON predicate
 [LEFT | RIGHT | FULL [OUTER] JOIN table_reference

   ON predicate...]


Johnmen   (2004-12-02 10:11:00) [37]

>ЮЮ ©   (02.12.04 09:04) [4]
>1. Всегда хватало OUTER - ао умолчанию для JOIN

По умолчанию - INNER.


Sergey_Masloff   (2004-12-02 10:03:00) [38]

ЮЮ ©   (02.12.04 09:04) [4]
>1. Всегда хватало OUTER - ао умолчанию для JOIN
По умолчанию где? ;-) Везде по разному. Впрочем в IB действительно OUTER

4 Если процедура это фактически подзапрос кореллирующий о основной выборкой то так:

select a.id, (select result from  tour_get_product(a.ruleisn)) as result
from agreement a


Johnmen   (2004-12-02 09:53:00) [39]

> объединения JOIN

Это соединение, а не объединение.


ЮЮ   (2004-12-02 09:04:00) [40]

1. Всегда хватало OUTER - ао умолчанию для JOIN

2. Разницу между LEFT и RIGHT
 table1 t1 left join table2 t2 on t1.field2=t1.field1    
к записям в table1 присоединяются записи из table2, если таких нет, то t2.* будут NULL
 table1 t1 right join table2 t2 on t1.field2=t1.field1
=
 table2 t2 left join table1 t1 on t1.field2=t1.field1
т.е. к записям в table2 присоединяются записи из table1, если таких нет, то t1.* будут NULL

3. Что такое FULL
 LEFT и RIGHT в одном флаконе, т.е. если соответствующих записей в t2, то t2.* будут NULL, а если нет в t1, то t1.* будут NULL

4.  в IB не специализируюсь

5.
SELECT * FROM
 table1 t1
 left join table2 t2 on t1.field2=t1.field1
 left join table3 t3 on t1.field3=t3.field1
 left join table4 t4 on t3.field4=t3.field4
и т.д.
WHERE
 (t1.field1 = :field1)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо