2013-03-15 11 views
38

Widziałem połączenia o nazwie LEFT OUTER JOIN lub RIGHT OUTER JOIN. W niektórych miejscach widziałem LEFT JOIN lub RIGHT JOIN. Jestem tym zdezorientowany.Czy lewe połączenia zewnętrzne i lewe łączenia są takie same?

Opublikowałem question 2 dni temu, ale nie jestem w stanie zrozumieć linków dostarczanych przez rozwiązania.

Czy te rodzaje połączeń są takie same, czy jest jakaś różnica między tymi dwoma elementami?

+10

Są takie same. – EmCo

+5

'LEFT JOIN' jest tym samym, co' LEFT OUTER JOIN'. Słowo kluczowe "OUTER" jest * opcjonalne *. –

+0

@JW. Widziałem link, który zasugerowałeś. Jest bardzo użyteczny. Ale wciąż nie spełniał wszystkich moich wątpliwości. http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR

Odpowiedz

2

w MySQL składni, LEFT OUTER JOIN i LEFT JOIN są identyczne: (od http://dev.mysql.com/doc/refman/5.0/en/join.html)

| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition 
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

Zauważ, że słowo kluczowe OUTER jest opcjonalne dla LEFT/RIGHT JOIN.

Łączenia LEWO i PRAWO są połączeniami zewnętrznymi. Wierzę, że są pewne smaki SQL, które mogą wymagać słowa kluczowego OUTER, ale MySQL tego nie robi. To znaczy, że czasami LEFT JOIN może nie być ważny.

18

Pierwszy link kwotowane daje:

INNER JOIN: zwraca wiersze kiedy jest mecz w obu tabelach.

LEFT JOIN/LEFT OUTER JOIN: zwraca wszystkie wiersze z lewej tabeli, nawet jeśli nie ma odpowiedników w prawej tabeli.

RIGHT JOIN/RIGHT OUTER JOIN: zwraca wszystkie wiersze z prawej tabeli, nawet jeśli nie ma dopasowań w lewej tabeli.

FULL JOIN/FULL OUTER JOIN/OUTER JOIN: zwraca wiersze, gdy występuje dopasowanie w jednej z tabel.

SELF JOIN: służy do łączenia tabeli ze sobą, tak jakby tabela była dwiema tabelami, tymczasowo zmieniając nazwę co najmniej jednej tabeli w instrukcji SQL.

CARTESIAN JOIN: zwraca iloczyn kartezjański zbiorów rekordów z dwóch lub więcej połączonych tabel.

Numer self join nie jest w rzeczywistości special join. Po prostu odzwierciedla fakt, że możesz dołączyć do stołu ze sobą. Powinieneś to zrobić alias, aby uwzględnić fakt, że pojawia się więcej niż jeden raz w tym samym komunikacie.

Urządzenie cartesian join można uznać za inner join bez warunków ograniczających. Lub możesz zobaczyć inner join jako cartesian join z dodatkowym ograniczeniem (warunek łączenia).

3

Jeśli spojrzeć na strony podręcznika dla JOIN widać następujące linie:

join_table: 

    table_reference [INNER | CROSS] JOIN table_factor [join_condition] 

    | table_reference STRAIGHT_JOIN table_factor 

    | table_reference STRAIGHT_JOIN table_factor ON conditional_expr 

| odniesienie_do_tabeli {left | right} [OUTER] JOIN join_condition

| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 

Linia pogrubiona wyraźnie pokazuje, że zewnętrzna Hasło jest opcjonalne.

+0

@Luv - Teraz ostatnia linia nie ma sensu z twoim formatowaniem! –

1

Pracuję w SQL Server i jak na moje użycie i doświadczenie nie ma absolutnie żadnej różnicy między LEFT JOIN i LEFT OUTER JOIN. To samo dotyczy RIGHT JOIN i RIGHT OUTER JOIN. Gdy używasz słowa kluczowego LEFT JOIN w SQL Server, oznacza to tylko LEFT OUTER JOIN. Zgodnie z moją opinią jest to ogólna zasada, która jest taka sama dla wszystkich silników baz danych.

see here i here

Powiązane problemy