SQLShack (Italiano)

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
Emil è un professionista del database con oltre 10 anni di esperienza in tutto ciò che riguarda i database. Negli anni ha lavorato nel settore IT e finanziario e ora lavora come libero professionista.
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

Ultimi post di Emil Drkusic (vedi tutti)
  • 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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *