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... Желательно подробная...


Zacho   (2004-12-08 12:05:00) [1]

Sirus   (08.12.04 11:31) [42]

Советую почитать "SQL" М.Грабера.


Sirus   (2004-12-08 11:31:00) [2]

Вобщем спасибо всем... На всякий случай сохраню этот обсуждение полностью.
А в документации SQL reference Help на SELECT нет почти никакого описания JOIN. Там просто указано как правильно писать слово JOIN и какие они бывают. Но не указано что они делают (по отдельности не указано)


Johnmen   (2004-12-08 11:10:00) [3]

Существует 2 вида соединения, внутреннее и внешнее.
При этом внешнее м.б. только одного вида (LEFT, RIGHT или FULL).
См. документацию SQL Reference Help на SELECT.


ЮЮ   (2004-12-08 11:01:00) [4]

1. "объеденяет" только те записи, которые есть в обеих таблицах (по условию связи)
2. Yes
3. пишешь LEFT JOIN, просто помня, что это OUTER JOIN
4. пишешь JOIN, просто помня, что это INNER JOIN


Sirus   (2004-12-08 08:04:00) [5]

Нет... Пока вешаться не стану...
Из всего что я прочел, я понял, что в IB:
1. INNER не бывает LEFT и RIGHT
2. LEFT и RIGHT бывает только OUTER (FULL пока мне не нужен)
3. LEFT JOIN собирает все записи из левой таблицы и все что к ним есть из правой, если нету то NULL
4. RIGHT JOIN делает то же самое, только в правую сторону..

Выводы:
1. Я не понял как работает INNER JOIN (извините, честно не понял :)
2.
table1 left join table2 on ...
left join table3 on ...

выбирает все записи из первой таблицы и все что к ним есть из второй и третьей таблицы, если нету то NULL
3. Если я пишу LEFT JOIN, то я пишу OUTER LEFT JOIN
4. Если я пишу JOIN, то я пишу INNER JOIN
ТАК???
З.Ы. Если что не так, ногами не пинайте, руками не бейте, просто объясните что к чему... :)))


Anatoly Podgoretsky   (2004-12-02 15:33:00) [6]

Ага или пойдет вешаться


ЮЮ   (2004-12-02 12:30:00) [7]

Почитав весь пост, автор вопроса, надеюсь, окончательно поймет все тонкосьи JOIN :)


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

>Sergey_Masloff   (02.12.04 11:59) [27]

Не расстраивайся, со всеми бывает...
:)

>Sergey_Masloff   (02.12.04 12:06) [30]

Да и в стандарте <...>=<...> эквивалентно INNER.


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

ЮЮ ©   (02.12.04 12:13) [34]
>Даже над "INNER бывает LEFT и RIGHT" не могу :(
Это описка конечно... и температура. Я раз 5 прочитал твой пост пока понял о чем речь и при чем смех тут...

Давай еще раз я приведу наш диалог как я его на данный момент понимаю:
ЮЮ: В оракле что по умолчанию OUTER?
Я: Нет INNER но в IB OUTER! (тут я ошибался но не важно)
ЮЮ: так что INNER бывает LEFT и RIGHT ?
Я: (не поняв откуда вывод) советую читать мои посты (еще не понимая что [22] из-за описки является полной чушью)

Так вроде?


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

>Прочитай еще раз [18] ;-)

Прочитал. Там жирно выделено OUTER, а в [22] уточнено, что LEFT.
Где смеяться не знаю :( Даже над "INNER бывает LEFT и RIGHT" не могу :(


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

Блин я сижу с температурой, сервер глючит, просто жизнь дала трещину! ;-)


Sergey_Masloff   (2004-12-02 12:08:00) [12]

ЮЮ ©   (02.12.04 12:05) [29]
Прочитай еще раз [18] ;-)


Sergey_Masloff   (2004-12-02 12:08:00) [13]

ЮЮ ©   (02.12.04 12:05) [29]
Прочитай еще раз [18] ;-)


Sergey_Masloff   (2004-12-02 12:06:00) [14]

ЮЮ ©   (02.12.04 12:03) [28]
Не противоречит. В ORACLE - INNER
В IB (я БЫЛ уверен - OUTER). На самом деле тоже INNER


ЮЮ   (2004-12-02 12:05:00) [15]

>Ты мои посты читаешь или чьи-то еще? ;-))
[18], [22]


ЮЮ   (2004-12-02 12:03:00) [16]

>DenK_vrtz ©   (02.12.04 11:56) [26]
противоречишь Sergey_Masloff   (02.12.04 11:16) [18], [22], т.к. даже в оракле не могут быть равнозначны INNER JOIN и LEFT OUTER JOIN :)


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

ЮЮ ©   (02.12.04 11:37) [23]
>Ну уж если в ORACLE
Ты мои посты читаешь или чьи-то еще? ;-))

Johnmen ©   (02.12.04 11:25) [20]
>Выполниться одинаково. Неявное внутреннее (INNER) соединение.
Вот специально сейчас проверил. Ты прав (в IB тоже самое, про ORACLE я не сомневался). Вобщем, полная потеря лица иду ламерить дома ;-)
 Уверен на 100% был что не так (что OUTER неявный)


DenK_vrtz   (2004-12-02 11:56:00) [18]

>ЮЮ ©   (02.12.04 11:37) [23]

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

в ORACLE можно еще (начиная с 9i) записать как

SELECT a.xx, b.yy
from atable a INNER JOIN btable b
on a.simefield = b.somefield

или

SELECT a.xx, b.yy
from atable a INNER JOIN btable b
USING (somefield)


Johnmen   (2004-12-02 11:55:00) [19]

>Sergey_Masloff   (02.12.04 11:30) [22]

Что-то ты мудришь. Авторитетов помянул...:)
Достаточно глянуть в стандарт SQL92.
Появился новый класс табличных выражений, называемых "табличными выражениями
с соединениями " (join-table-expression), которые можно использовать только
в разделе FROM. Такие табличные выражения строятся на основе базовых и/или
представляемых таблиц на основе использования разных видов операции соединения:
CROSS JOIN (Декартово произведение), INNER (обычное соединение), LEFT и
LEFT OUTER (левое и левое внешнее соединение), RIGHT и RIGHT OUTER (правое и
правое внешнее соединение), FULL и FULL JOIN (полное и полное внешнее
соединение) и UNION (объединение).


ЮЮ   (2004-12-02 11:43:00) [20]

>Sergey_Masloff   (02.12.04 11:30) [22]

Тебе известны
 закрытый
 открытый (левый, правый, полный)

Мне известны
 INNER JOIN
 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN

Следует ли, что
 закрытый = INNER  
 открытый = OUTER ?

как же тогда
 INNER бывает LEFT и RIGHT ?


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

Наверх

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