2013-03-15 11 views
38

Ho visto join chiamati LEFT OUTER JOIN o RIGHT OUTER JOIN. In alcuni punti ho visto LEFT JOIN o RIGHT JOIN. Sono confuso da questo.Le giunzioni esterne sinistra e le giunzioni a sinistra sono le stesse?

Ho inviato un question 2 giorni fa, ma non sono in grado di comprendere i collegamenti forniti dalle soluzioni.

Questi tipi di join sono uguali o c'è qualche differenza tra i due?

+10

Sono la stessa. – EmCo

+5

'LEFT JOIN' è uguale a' LEFT OUTER JOIN'. La parola chiave 'OUTER' è * opzionale *. –

+0

@ JW. Ho visto il collegamento qualunque cosa tu abbia suggerito. È molto utile. Ma ancora non ha soddisfatto tutti i miei dubbi. http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – PSR

risposta

2

Nella sintassi MySQL, LEFT OUTER JOIN e LEFT JOIN sono identici: (da 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 

noti che la parola OUTER è opzionale per LEFT/RIGHT JOIN.

I collegamenti SINISTRA e DESTRA sono entrambi giunti esterni. Credo che ci siano alcune versioni di SQL che potrebbero richiedere la parola chiave OUTER, ma MySQL no. Ciò significa che a volte il numero LEFT JOIN potrebbe non essere valido.

18

Il primo collegamento avevano preventivato ti dà:

INNER JOIN: restituisce le righe quando c'è una partita in entrambe le tabelle.

LEFT JOIN/LEFT OUTER JOIN: restituisce tutte le righe dalla tabella di sinistra, anche se non ci sono corrispondenze nella tabella di destra.

RIGHT JOIN/RIGHT OUTER JOIN: restituisce tutte le righe dalla tabella di destra, anche se non ci sono corrispondenze nella tabella di sinistra.

FULL JOIN/FULL OUTER JOIN/OUTER JOIN: restituisce righe quando c'è una corrispondenza in una delle tabelle.

SELF JOIN: è utilizzato per unire una tabella a se stesso, come se la tabella fosse costituita da due tabelle, rinominando temporaneamente almeno una tabella nell'istruzione SQL.

CARTESIAN JOIN: restituisce il prodotto cartesiano dei set di record dalle due o più tabelle unite.

Il self join in realtà non è un special join. Riflette solo il fatto che puoi unirti a un tavolo con se stesso. In tal caso, devi renderlo alias per far fronte al fatto che appare più di una volta nella stessa dichiarazione.

Il cartesian join può essere considerato come un inner join senza condizioni restrittive. Oppure è possibile visualizzare uno inner join come cartesian join con una restrizione aggiunta (condizione di join).

3

Se guardate la pagina di manuale per JOIN vedrete le seguenti linee:

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 

| table_reference {LEFT | RIGHT} [ESTERNO] JOIN table_reference join_condition

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

La linea in grassetto mostra chiaramente che la parola chiave è opzionale ESTERNO.

+0

@Luv - Ora la linea finale non ha senso con la tua formattazione! –

1

Sto lavorando in SQL Server e secondo il mio utilizzo ed esperienza non c'è assolutamente alcuna differenza tra LEFT JOIN e LEFT OUTER JOIN. Lo stesso vale per RIGHT JOIN e RIGHT OUTER JOIN. Quando si utilizza la parola chiave LEFT JOIN in SQL Server, significa solo LEFT OUTER JOIN. Quindi secondo me è la regola generica che è la stessa per tutti i motori di database.

see here e here

Problemi correlati