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 записи? |