Левый берег - правый берег ( Join )
Объясните плиз, ПО ЧЕЛОВЕЧЕСКИ как работают LEFT JOIN и RIGHT JOIN . Доку читал и на русском и на англ., но у меня щас видимо период когда определённая инфа не усваивается в голове.
Помогите переварить...
Объясните плиз, ПО ЧЕЛОВЕЧЕСКИ как работают LEFT JOIN и RIGHT JOIN
Работает только так! ;)
По умолчанию, объединение двух таблиц при помощи явного или неявного join работает как intersect, т. е. в результирующий курсор попадают данные, удовлетворяющие условию объединения.
При использовании левого или правого ВНЕШНЕГО объединения считается, что в результат попадают данные не только удовлетворяющие условию объединения, но и не имеющие пары в одной из таблиц. В которой - определяется направлением объединения (левое, правое). Т. е. в результирующем курсоре окажутся ВСЕ данные из одной таблицы, удовлетворяющие условию выборки из нее, ПЛЮС данные из другой таблицы в тех позициях, где условие объединения срабатывает. Соответственно, в тех позициях, где условие не выполнятеся, поля, относящиеся к объединяемой таблице, будут иметь значения NULL.
Другими словами можно сказать, что мы как бы нанизываем данные из одной таблицы на данные другой, при этом одна из них является стержнем. Которая - зависит от направления объединения.
Сущестсвует также ПОЛНОЕ ВНЕШНЕЕ объединение, когда не существует таблицы-стержня. Данные нанизываются друг на друга в шахматном порядке там, где выполняется условие объединения. Соответственно, NULL-ы могут быть на обоих сторонах объединения.
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
а вот ещё вопрос, что лучше
LEFT JOIN или INNER JOIN
они как то кординально друг от друга отличаются?
по "скоростным" параметрам (ресурсоёмкости) они одинаковы? или что то из них всё же лучше?
Спасибо, спасибо...
а вот ещё вопрос, что лучше
LEFT JOIN или INNER JOIN
они как то кординально друг от друга отличаются?
Рано спасибкаешь - ни фига же не понял. Прочитай еще раз объяснялку, обращая внимание на выделенные слова.
На правильном сервере нет разницы между выполнением объединений. Другой вопрос - внешние объединения по определению выдают больше данных и порождают более объемные курсоры.