![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужно подробное описание работы объединения JOIN [D5, D6, IB6.x, Firebird 1.5]
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)