Esegui ogni SQL join su due piccole tabelle di esempio direttamente nel browser e guarda quali righe restano, con la sintassi PostgreSQL per INNER, LEFT, RIGHT, FULL, CROSS e self join.
Un join combina le righe di due tabelle in base a una condizione, di solito chiavi corrispondenti. INNER JOIN tiene solo le righe che corrispondono da entrambi i lati. LEFT JOIN tiene ogni riga della tabella di sinistra e riempie con NULL le colonne di destra mancanti, RIGHT JOIN fa il contrario, FULL JOIN le tiene entrambe e CROSS JOIN abbina ogni riga a ogni riga.
Quali righe tiene ogni join
I diagrammi di Venn sono il modo abituale per insegnare i join, ma nascondono la parte che crea davvero problemi: le righe duplicate e i NULL. Qui sotto trovi due tabelle minuscole, clienti e ordini, con un cliente che non ha mai ordinato e un ordine il cui cliente è stato eliminato. Scegli un join e il risultato viene calcolato nel tuo browser, così vedi esattamente quali righe compaiono e perché.
INNER JOIN scarta le righe senza corrispondenza. LEFT JOIN tiene ogni riga della prima tabella e mette NULL nelle colonne della seconda tabella quando non c'è corrispondenza. Nella demo, Cleo compare nel LEFT JOIN con un ordine vuoto e manca nell'INNER JOIN.
Sì. In PostgreSQL la parola INNER è facoltativa e un JOIN semplice è un inner join. Anche la parola OUTER è facoltativa, quindi LEFT JOIN e LEFT OUTER JOIN significano la stessa cosa.
Ogni riga di sinistra compare una volta per ogni riga di destra corrispondente. Un cliente con tre ordini compare tre volte. È il comportamento corretto; aggrega con GROUP BY o fai il join con una subquery già raggruppata se ti serve una riga per cliente.
Una tabella unita a se stessa con due alias, usata quando le righe puntano ad altre righe della stessa tabella, come i dipendenti e i loro responsabili o i clienti e chi li ha segnalati.
PostgreSQL sì, ed è la sintassi mostrata qui. MySQL non ha la parola chiave FULL JOIN; la soluzione abituale è un LEFT JOIN combinato con un RIGHT JOIN tramite UNION.
Incolla questo in psql o in qualsiasi editor SQL per Postgres per ricreare le tabelle di esempio, poi esegui le query della demo.
L'ordine 104 punta di proposito al cliente 9, che non esiste, così gli outer join hanno qualcosa da mostrare.
Il LEFT JOIN tiene Cleo con le colonne dell'ordine a NULL, e il filtro IS NULL tiene solo quelle righe.
Tabelle di esempio usate nella demo
Tipo di join
Risultato: {n} righe
Le celle evidenziate sono state riempite con NULL dall'outer join.
SELF
Inizia gratis · Nessuna carta di credito richiesta