MS>Никак не могу понять разницу между JOIN-ами (INNER, RIGHT, LEFT и просто). В чем разиличие? И какие еще существуют обединения?

1. Это не объединения, а соединения. Объединение — это UNION.

2. Надо бы послать тебя в книжку, конечно.... ну ладно, коротко:

* Есть таблицы A и B

* A JOIN B дает т.н. CROSS JOIN — полное декартово произведение — то есть все сочетания записей из A и записей из B. Количество записей в результате COUNT(A) * COUNT(B). Поля — это все поля из A + все поля из B.

* A [INNER] JOIN B ON A.Field1 = B.Field2 - внутренее соединение, наиболее частая операция, выражается также без JOIN'а через WHERE:
SELECT ... FROM A,B WHERE A.Field1 = B.Field2

Если для какой-то записи из A не найдется записей из B, удовлетворяющих заданному условию соединения — то в результате таких записей из A не будет.

* A LEFT [OUTER] JOIN B ON A.Field1 = B.Field2 - левое внешнее соединение. Тоже очень частая операция. Все то же самое, что и внутренее, но если для записи из A не нашлось ни одной записи из B, то в результат уйдет ОДНА запись, у которой поля A — из записи таблицы A, а поля B — NULL

* A RIGHT [OUTER] JOIN B ON A.Field1 = B.Field2 эквивалентно
B LEFT [OUTER] JOIN A ON B.Field2 = A.Field1, только столбцы местами обменяются.

* A FULL [OUTER] JOIN B ON A.Field1 = B.Field2 - полное внешнее соединение.
Ну, тут уже пора самому догадаться, что это такое.
Все пары записей, удовлетворяющие условию — в результат. Для тех записей из A, для которых не нашлось пары — в результате одна запись с NULL в полях B.Для тех записей из B, для которых не нашлось пары — в результате одна запись с NULL в полях A.


Уфф... Может правильнее было на примере показать? Две таблички по 4 записи?
Автор: Igor Trofimov    Оценить