Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Левый берег - правый берег ( Join )

1.6K
28 июля 2004 года
Jimmy
58 / / 02.04.2003
Доброе всем время суток.

Объясните плиз, ПО ЧЕЛОВЕЧЕСКИ как работают LEFT JOIN и RIGHT JOIN . Доку читал и на русском и на англ., но у меня щас видимо период когда определённая инфа не усваивается в голове.
Помогите переварить...
10
04 августа 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Jimmy
Объясните плиз, ПО ЧЕЛОВЕЧЕСКИ как работают LEFT JOIN и RIGHT JOIN


Работает только так! ;)

По умолчанию, объединение двух таблиц при помощи явного или неявного join работает как intersect, т. е. в результирующий курсор попадают данные, удовлетворяющие условию объединения.

При использовании левого или правого ВНЕШНЕГО объединения считается, что в результат попадают данные не только удовлетворяющие условию объединения, но и не имеющие пары в одной из таблиц. В которой - определяется направлением объединения (левое, правое). Т. е. в результирующем курсоре окажутся ВСЕ данные из одной таблицы, удовлетворяющие условию выборки из нее, ПЛЮС данные из другой таблицы в тех позициях, где условие объединения срабатывает. Соответственно, в тех позициях, где условие не выполнятеся, поля, относящиеся к объединяемой таблице, будут иметь значения NULL.

Другими словами можно сказать, что мы как бы нанизываем данные из одной таблицы на данные другой, при этом одна из них является стержнем. Которая - зависит от направления объединения.

Сущестсвует также ПОЛНОЕ ВНЕШНЕЕ объединение, когда не существует таблицы-стержня. Данные нанизываются друг на друга в шахматном порядке там, где выполняется условие объединения. Соответственно, NULL-ы могут быть на обоих сторонах объединения.

7.9K
04 августа 2004 года
avc
13 / / 04.08.2004
Пример в дополнение к smartsoft (синтаксис зависит от СУБД)

Table A (Aid, A_Name)
1, a1
2, a2
3, a3
4, a4

Table B (Bid, B_Name, Aid)
1, b1, 1(a1)
2, b2, 2(a2)
3, b3, 1(a1)
4, b4, Null

Select A.*, B.id, B_Name
From A left outer jouin B (on A.Aid = B.Aid)
Результат - все из A и совпавшие из B
1, a1, 1, b1
1, a1, 3, b3
2, a2, 2, b2
3, a3, Null, Null
4, a4, Null, Null

Правое от левого отличается как запись Q > P от P < Q
1.6K
20 апреля 2005 года
Jimmy
58 / / 02.04.2003
Спасибо, спасибо...
а вот ещё вопрос, что лучше
LEFT JOIN или INNER JOIN
они как то кординально друг от друга отличаются?

по "скоростным" параметрам (ресурсоёмкости) они одинаковы? или что то из них всё же лучше?
10
20 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Jimmy
Спасибо, спасибо...
а вот ещё вопрос, что лучше
LEFT JOIN или INNER JOIN
они как то кординально друг от друга отличаются?


Рано спасибкаешь - ни фига же не понял. Прочитай еще раз объяснялку, обращая внимание на выделенные слова.

Цитата:
по "скоростным" параметрам (ресурсоёмкости) они одинаковы?всё же лучше?


На правильном сервере нет разницы между выполнением объединений. Другой вопрос - внешние объединения по определению выдают больше данных и порождают более объемные курсоры.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог