INNER JOIN vs LEFT JOIN, ovvero la domanda. Oggi spiegheremo brevemente come vengono utilizzati entrambi questi due tipi di join e qual è la differenza. Torneremo su questo argomento più tardi, quando amplieremo il nostro modello e saremo in grado di scrivere query molto più complesse.
Modifiche nei dati
Prima di confrontare INNER JOIN vs PARTECIPA A SINISTRA, vediamo cosa sappiamo attualmente. Finora, in questa serie, abbiamo spiegato le basi del database: come creare database e tabelle, come popolare le tabelle con i dati e controllare cosa è memorizzato in esse utilizzando semplici query. Ci siamo persino uniti a due tavoli nellarticolo precedente. Ora siamo pronti per il passaggio successivo.
Ma prima di procedere, apportiamo solo una piccola modifica a i nostri dati. Aggiungeremo 2 righe nella tabella del paese, utilizzando i seguenti comandi INSERT INTO:
Ora controlliamo il contenuto di entrambe le tabelle:
Puoi facilmente notare che abbiamo 2 nuove righe nella tabella Paese, una per la Spagna e una per la Russia. I loro ID sono 6 e 7. Notare inoltre che nella tabella della città non cè country_id con valore 6 o 7. Ciò significa semplicemente che non abbiamo una città della Russia o della Spagna nel nostro database. Useremo questo fatto in seguito.
INNER JOIN
Parliamo di queste due domande:
Il risultato che restituiscono è presentato nellimmagine seguente:
Entrambe le query restituiscono esattamente lo stesso risultato. Questo non è un caso, ma il risultato del fatto che questa è la stessa query scritta in due modi diversi. Entrambi i modi sono corretti e puoi usarli.
Nella prima query, abbiamo elencato tutte le tabelle che usiamo nella parte FROM della query (FROM paese, città) e poi siamo andati con il join condition nella parte WHERE della query (WHERE city.country_id = country.id). Nel caso ci fossimo dimenticati di annotare questa condizione di join, avremmo il prodotto cartesiano di entrambe le tabelle.
Nella seconda query, abbiamo solo una tabella nella parte FROM della query (FROM country) e quindi abbiamo la seconda tabella e la condizione JOIN nella parte JOIN della query (INNER JOIN city ON city.country_id = country.id).
Sebbene entrambe le query siano ben scritte, suggerirei che usi sempre INNER JOIN invece di elencare le tabelle e unirle nella parte WHERE della query. Ci sono alcune ragioni per questo:
- La leggibilità è molto migliore perché la tabella utilizzata e la relativa condizione JOIN sono nella stessa linea. Puoi facilmente vedere se hai omesso o meno la condizione JOIN
- Se vuoi usare altri JOIN in seguito (LEFT o RIGHT), non puoi farlo (facilmente) a meno che tu non abbia usato INNER JOIN prima che
Ora commentiamo le query effettivamente restituite:
- Tutte le coppie di paesi e città che sono correlate (tramite chiave esterna)
- Non abbiamo 2 paesi nellelenco (Spagna e Russia), perché non hanno nessuna città correlata nella tabella delle città
PARTECIPA A SINISTRA
Lo ripeto: “Non abbiamo 2 paesi nellelenco (Spagna e Russia) perché non hanno nessuna città correlata nella tabella delle città”. Ciò si rivelerà cruciale quando si confrontano INNER JOIN e LEFT JOIN.
In alcuni casi, vorremmo avere anche questi record nei nostri risultati. Ad esempio, vuoi semplicemente vedere nel risultato che questi paesi non hanno record correlati in unaltra tabella. Questo potrebbe essere parte di un certo controllo, o forse solo contare i casi, ecc. Non importa quale sia la motivazione dietro quel desiderio, dovremmo essere tecnicamente in grado di farlo. E noi siamo. Nei database, LEFT JOIN fa esattamente questo.
Il risultato di LEFT JOIN sarà lo stesso del risultato di INNER JOIN + avremo righe, dalla tabella “sinistra”, senza una coppia nella tabella “giusta”. Useremo la stessa query INNER JOIN e sostituiremo semplicemente la parola INNER con LEFT. Questo è il risultato:
Puoi facilmente notare che abbiamo 2 righe in più, rispetto al risultato dellINNER JOIN query. Queste sono righe per Russia e Spagna. Poiché entrambi non hanno alcuna città correlata, tutti gli attributi della città in queste due righe hanno valori NULL (non sono definiti). Questa è la differenza più grande quando si confrontano INNER JOIN e LEFT JOIN.
RIGHT JOIN
Almeno sentirai parlare di RIGHT JOIN. Viene utilizzato raramente perché restituisce lo stesso risultato di LEFT JOIN. Daltra parte, le query che utilizzano LEFT JOIN sono molto più facili da leggere perché elenchiamo semplicemente le tabelle una dopo laltra.
Questo è lequivalente della query precedente usando RIGHT JOIN:
Puoi notare che i valori restituiti sono gli stessi, solo in questo caso i valori della tabella della città sono nelle prime 5 colonne e il paese- i valori correlati vengono dopo di loro.
INNER JOIN vs LEFT JOIN
INNER JOIN vs LEFT JOIN?In realtà, non è affatto questo il problema. Utilizzerai INNER JOIN quando desideri restituire solo i record che hanno una coppia su entrambi i lati e utilizzerai LEFT JOIN quando avrai bisogno di tutti i record della tabella “sinistra”, indipendentemente dal fatto che abbiano una coppia nella tabella “destra” o no. Se avrai bisogno di tutti i record di entrambe le tabelle, indipendentemente dal fatto che abbiano una coppia, dovrai utilizzare CROSS JOIN (o simularlo utilizzando LEFT JOINs e UNION). Maggiori informazioni su questo argomento nei prossimi articoli.
Sommario
Impara SQL: CREATE DATABASE & CREATE TABLE Operations
Impara SQL: INSERISCI NELLA TABELLA
Impara SQL: chiave primaria
Impara SQL: chiave esterna
Impara SQL: istruzione SELECT
Impara SQL: INNER JOIN vs LEFT JOIN
Impara SQL: script SQL
Impara SQL: tipi di relazioni
Impara SQL: unisci più tabelle
Impara SQL: funzioni aggregate
Impara SQL: come scrivere una query SELECT complessa
Impara SQL: il database INFORMATION_SCHEMA
Impara SQL: tipi di dati SQL
Impara SQL: Teoria degli insiemi
Impara SQL: Funzioni definite dallutente
Impara SQL: Procedure memorizzate definite dallutente
Impara SQL: viste SQL
Impara SQL: trigger SQL
Impara SQL: pratica query SQL
Impara SQL: esempi di query SQL
Impara SQL: crea un rapporto manualmente utilizzando query SQL
Impara SQL: funzioni di data e ora di SQL Server
Impara SQL: crea report di SQL Server utilizzando funzioni di data e ora
Impara SQL: tabelle pivot di SQL Server
Impara SQL: esportazione di SQL Server in Excel
Impara SQL: introduzione ai cicli di SQL Server
Impara SQL: cursori SQL Server
Impara SQL: best practice SQL per leliminazione e laggiornamento dei dati
Impara SQL: convenzioni di denominazione
Impara SQL: processi relativi a SQL
Impara SQL: join non Equi in SQL Server
Impara SQL: SQL Iniezione
- Autore
- Post recenti
I suoi impegni passati e presenti variano dalla progettazione e codifica di database allinsegnamento, alla consulenza e alla scrittura di database. Inoltre, non dimenticare, BI, creazione di algoritmi, scacchi, filatelia, 2 cani, 2 gatti, 1 moglie, 1 bambino …
Puoi trovarlo su LinkedIn
Visualizza tutti i post di Emil Drkusic
- Learn SQL: SQL Injection – 2 novembre 2020
- Learn SQL: Non-Equi Joins in SQL Server – 29 settembre 2020
- Learn SQL: Lavori relativi a SQL – 1 settembre 2020