2010-04-11 14 views

risposta

7

L'unico tipo di join veramente è LEFT OUTER JOIN. Ogni altro tipo di join può essere riscritto in termini di uno o più join esterni a sinistra e, eventualmente, di un filtro. Allora perché abbiamo bisogno di tutti gli altri? È solo per confondere le persone? Non sarebbe più semplice se ci fosse un solo tipo di join?

Si potrebbe anche chiedere: Perché sono entrambi a <= b e b >= a? Non fanno solo la stessa cosa? Non possiamo semplicemente sbarazzarci di uno di loro? Semplificherebbe le cose!

A volte è più semplice scambiare lo <= con lo >= anziché scambiare gli argomenti. Allo stesso modo, un join sinistro e un join destro sono la stessa cosa solo con gli operandi scambiati. Ma di nuovo è pratico avere entrambe le opzioni invece di richiedere alle persone di scrivere le loro domande in un ordine specifico.

Un'altra cosa che si può chiedere è: In logica perché abbiamo AND, OR, NOT, XOR, NAND, NOR, ecc? Tutti questi possono essere riscritti in termini di NAND s! Perché non solo avere NAND?Bene, è awkward scrivere un OR in termini di NAND s, e non è così ovvio quale sia l'intenzione: se si scrive OR, le persone sanno immediatamente cosa intendi. Se scrivi un numero di NAND s, non è ovvio ciò che stai cercando di ottenere.

Analogamente, se si desidera eseguire a FULL OUTER JOIN b, è possibile effettuare un join sinistro e un join destro, rimuovere i risultati duplicati e quindi unione tutti. Ma questo è un dolore e quindi c'è una scorciatoia per questo.

Quando li usi? Ecco una regola semplificata:

  • Se si desidera sempre una riga di risultato per ogni riga nella tabella SINISTRA, utilizzare UNO GIUNTO ESTERNO SINISTRO.
  • Se si desidera sempre una riga di risultato per ogni riga nella tabella DESTRA, utilizzare UN GIUNTO ESTERNO DESTRO.
  • Se si desidera sempre una riga di risultato per ogni riga in entrambe le tabelle, utilizzare FULL OUTER JOIN.
  • Se si desidera una riga di risultato solo quando è presente una riga in entrambe le tabelle, utilizzare UNIRE JOIN.
  • Se si desidera tutte le coppie di righe possibili, una riga da ogni tabella, utilizzare un CROSS JOIN.
1

inner join - unisce le righe di entrambi i set della partita in base a criteri specificati.

outer join - seleziona tutto un set, insieme agli elementi corrispondenti o vuoti (se non corrispondenti) dell'altro set. I join esterni possono essere left o right, per specificare quale set viene restituito nella sua interezza.

1

Per rendere più chiare le altre risposte: OTTENETE RISULTATI DIVERSI in base al join scelto, quando le colonne su cui state partecipando contengono valori nulli, ad esempio.

Quindi, per ogni scenario Real-Life esiste un join che si adatta a esso (o si desidera che le righe senza i dati o non nell'esempio valori nulli).

0

La mia risposta assume 2 tavoli uniti su un unico tasto:

  • INNER JOIN - ottenere i risultati che sono sia unire le tabelle (secondo la regola di join)
  • FULL OUTER JOIN - ottenere tutti i risultati sia da tavolo (prodotto cartesiano)
  • LEFT OUTER JOIN - ottenere tutti i risultati dalla tabella a sinistra ed i risultati corrispondenti da destra

È possibile aggiungere clausole WHERE per limitare ulteriormente i risultati.

Utilizzare questi al fine di ottenere ciò che si desidera per ottenere.

Problemi correlati