Mysql
 sql >> Database >  >> RDS >> Mysql

sql si unisce come diagramma di Venn

Sono d'accordo con Cade sui limiti dei diagrammi di Venn qui. Una rappresentazione visiva più appropriata potrebbe essere questa.

Tabelle

SELEZIONARE A.Colore, B.Colore DA UN CROSS UNISCITI B SQL Fiddle

Il cross join (o prodotto cartesiano) produce un risultato con ogni combinazione delle righe delle due tabelle. Ogni tabella ha 4 righe, quindi questo produce 16 righe nel risultato.

SELEZIONA A.Colore, B.Colore DA UN INTERNO UNISCITI B SU A.Colore =B.Colore Violino SQL

Il join interno restituisce logicamente tutte le righe del cross join che corrispondono alla condizione di join. In questo caso cinque sì.

SELEZIONA A.Colore, B.Colore DA UN INTERNO UNISCITI B SU A.Colore NON IN ("Verde","Blu") SQL Fiddle

La condizione di inner join non deve necessariamente essere una condizione di uguaglianza e non è necessario che faccia riferimento a colonne da entrambe (o anche da nessuna) delle tabelle. Valutazione di A.Colour NOT IN ('Green','Blue') su ogni riga del cross join ritorna.

Una condizione di inner join di 1=1 restituirebbe true per ogni riga nel cross join, quindi i due sono equivalenti (SQL Fiddle ).

SELEZIONA A.Colore, B.Colore DA ESTERNO SINISTRO UNISCI B SU A.Colore =B.Colore Violino SQL

Gli Outer Join vengono valutati logicamente allo stesso modo degli inner join, tranne per il fatto che se una riga della tabella di sinistra (per un join sinistro) non si unisce a nessuna riga della tabella di destra, viene conservata nel risultato con NULL valori per le colonne di destra.

SELEZIONA A.Colore, B.Colore DA ESTERNO SINISTRO UNISCI B SU A.Colore =B.Colore DOVE B.Colore È NULL SQL Fiddle

Questo limita semplicemente il risultato precedente a restituire solo le righe in cui B.Colour IS NULL . In questo caso particolare queste saranno le righe che sono state conservate in quanto non avevano corrispondenza nella tabella di destra e la query restituisce la singola riga rossa non corrispondente nella tabella B . Questo è noto come anti semi join.

È importante selezionare una colonna per IS NULL test che non è nullable o per il quale la condizione di join assicura che qualsiasi NULL i valori verranno esclusi affinché questo modello funzioni correttamente ed eviti semplicemente di riportare indietro le righe che hanno un NULL valore per quella colonna oltre alle righe senza corrispondenza.

SELEZIONA A.Colore, B.Colore DA UN ESTERNO DESTRO UNISCI B SU A.Colore =B.Colore Violino SQL

I join esterni di destra si comportano in modo simile ai join esterni di sinistra, tranne per il fatto che preservano le righe non corrispondenti dalla tabella di destra e null estende le colonne di sinistra.

SELEZIONA A.Colore, B.Colore DA UN ESTERNO COMPLETO UNISCITI B SU A.Colore =B.Colore Violino SQL

I full outer join combinano il comportamento dei join sinistro e destro e preservano le righe non corrispondenti delle tabelle di sinistra e di destra.