2013-07-12 15 views
5

Quando si uniscono le tabelle si può usare tradizionalmente il senso SQL89 di unirsi comePerché scegliere da più tabelle, senza aderire

SELECT * FROM t1, t2 WHERE t1.id = t2.t1_id; 

Ma dal momento che lo standard SQL92, si possono ora partecipare utilizzando la sintassi JOIN

SELECT * FROM t1 JOIN t2 on t1.id=t2.t1_id; 

C'è qualche motivo per cui qualcuno potrebbe fare il SELECT da più tabelle senza aderire? Ora, so che le persone concatenano i dati usando UNION, ma non è quello di cui sto parlando.

La ragione per cui aggiungiamo le tabelle con virgole nella clausola FROM è strettamente per la compatibilità con le versioni precedenti? O ci sono scenari realistici che usando la vecchia sintassi sarebbero impossibili facendo solo join?

+1

Perché dovremmo usare le moltiplicazioni mentre possiamo usare i cicli di somme? in ogni caso, +1 –

+0

Possibile duplicato di [Perché lo standard ANSI-92 non è ancora adottato su ANSI-89?] (http://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92-standard -better-adopted-over-ansi-89) – LittleBobbyTables

+0

'C'è qualche motivo per cui qualcuno dovrebbe SELEZIONARE da più tabelle senza aderire?' Forse vogliono un prodotto cartesiano? – LittleBobbyTables

risposta

5

Se per qualche motivo hai bisogno di un prodotto cartesiano completo potrebbe essere utile. Ad esempio, se tu avessi una tabella di modelli di auto e una tabella di colori per auto e volessi enumerare tutte le opzioni, non ti servirà un join. Detto questo, considererei questo un caso limite.

+0

Penso che si possa ottenere con un 'FULL OUTER JOIN' –

+0

Penso che tu abbia ragione, stavo solo pensando a qualsiasi possibile uso della sintassi 'FROM table1, table2'. Penso che un outer join o cross sarebbe più leggibile anche per – munch1324

+0

+1 per un esempio reale, anche se remoto –

3

Ammetto che la memoria muscolare entra in gioco e a volte uso l'89 prima di pensare. Ma preferisco il metodo 92 perché mantiene la clausola WHERE più pulita. Le uniche condizioni nella clausola WHERE sono quelle rilevanti per il tuo caso aziendale mentre i criteri che esistono semplicemente per definire le relazioni sono ordinatamente nelle clausole JOIN.