Здравствуйте, Igor Trofimov, Вы писали:
MS>>Никак не могу понять разницу между JOIN-ами (INNER, RIGHT, LEFT и просто). В чем разиличие? И какие еще существуют обединения?
iT>1. Это не объединения, а соединения. Объединение — это UNION.
iT>2. Надо бы послать тебя в книжку, конечно.... ну ладно, коротко:
Зачем книжка, если есть RSDN?
iT> * Есть таблицы A и B
iT> * A JOIN B дает т.н. CROSS JOIN — полное декартово произведение — то есть все сочетания записей из A и записей из B. Количество записей в результате COUNT(A) * COUNT(B). Поля — это все поля из A + все поля из B.
iT> * A [INNER] JOIN B ON A.Field1 = B.Field2 — внутренее соединение, наиболее частая операция, выражается также без JOIN'а через WHERE:
iT> SELECT ... FROM A,B WHERE A.Field1 = B.Field2
iT> Если для какой-то записи из A не найдется записей из B, удовлетворяющих заданному условию соединения — то в результате таких записей из A не будет.
iT> * A LEFT [OUTER] JOIN B ON A.Field1 = B.Field2 — левое внешнее соединение. Тоже очень частая операция. Все то же самое, что и внутренее, но если для записи из A не нашлось ни одной записи из B, то в результат уйдет ОДНА запись, у которой поля A — из записи таблицы A, а поля B — NULL
iT> * A RIGHT [OUTER] JOIN B ON A.Field1 = B.Field2 эквивалентно
iT> B LEFT [OUTER] JOIN A ON B.Field2 = A.Field1, только столбцы местами обменяются.
iT> * A FULL [OUTER] JOIN B ON A.Field1 = B.Field2 — полное внешнее соединение.
iT> Ну, тут уже пора самому догадаться, что это такое.
iT> Все пары записей, удовлетворяющие условию — в результат. Для тех записей из A, для которых не нашлось пары — в результате одна запись с NULL в полях B.Для тех записей из B, для которых не нашлось пары — в результате одна запись с NULL в полях A.
Тоесть количество строк тут будет COUNT(A)?
Как я понял в скобках это эквивалентная запись и будут давать один и тот же результат следующие записи
A RIGHT JOIN B ON A.Field1 = B.Field2
и
A RIGHT JOIN B ON A.Field1 = B.Field2
Так ли?
А бывают ли
A RIGHT INNER JOIN B ON A.Field1 = B.Field2
?
iT>Уфф... Может правильнее было на примере показать? Две таблички по 4 записи?
Да уже внизу привели