SQLite Unione: Naturale Sinistra Esterno, Interno, Croce con Tabelle

⚡ Riepilogo intelligente

SQLite Le clausole JOIN combinano righe provenienti da due o più tabelle utilizzando INNER JOIN, JOIN USING, NATURAL JOIN, LEFT OUTER JOIN e CROSS JOIN, consentendo di abbinare record correlati in base a colonne condivise e di leggere i dati da un database normalizzato.

  • 🔗 Clausola di adesione: La clausola JOIN collega due o più tabelle o subquery in base a una colonna condivisa, definita con una condizione ON o USING.
  • 🎯 UNIONE INTERNA: INNER JOIN restituisce solo le righe in cui la condizione di join corrisponde in entrambe le tabelle, scartando le righe non corrispondenti.
  • 🧩 UTILIZZANDO INGREDIENTI NATURALI: JOIN USING specifica una colonna condivisa, mentre NATURAL JOIN seleziona automaticamente tutte le colonne con lo stesso nome.
  • JOIN ESTERNO SINISTRO: LEFT OUTER JOIN mantiene tutte le righe della tabella di sinistra e riempie le colonne non corrispondenti della tabella di destra con valori NULL.
  • ✖️ UNIONE INCROCIATA: CROSS JOIN restituisce il prodotto cartesiano, accoppiando ogni riga della tabella di sinistra con ogni riga della tabella di destra.
  • 🤖 Assistenza AI: Gli strumenti di intelligenza artificiale per la conversione da testo a SQL e GitHub Copilot generano SQLite Query JOIN da prompt in linguaggio naturale.

SQLite Forum

SQLite supporta diversi tipi di SQL Join, come INNER JOIN, LEFT OUTER JOIN e CROSS JOIN. Ogni tipo di JOIN viene utilizzato per una situazione diversa, come vedremo in questo tutorial.

Introduzione alla SQLite Clausola ISCRIVITI

Quando lavori su un database con più tabelle, spesso devi ottenere dati da queste più tabelle.

Con la clausola JOIN è possibile collegare due o più tabelle o sottoquery unendole. Inoltre, puoi definire in base a quale colonna collegare le tabelle e in base a quali condizioni.

Ogni clausola JOIN deve avere la seguente sintassi:

SQLite Sintassi della clausola JOIN

Ciascuna clausola di join contiene:

  • Una tabella o una sottoquery che è la tabella di sinistra; la tabella o la sottoquery prima della clausola di join (a sinistra di essa).
  • Operatore JOIN: specifica il tipo di join (INNER JOIN, LEFT OUTER JOIN o CROSS JOIN).
  • Vincolo JOIN: dopo aver specificato le tabelle o le sottoquery da unire, è necessario specificare un vincolo di join, che sarà una condizione in base alla quale le righe corrispondenti che corrispondono a tale condizione verranno selezionate in base al tipo di join.

Si noti che, per tutti i seguenti SQLite Per inserire esempi di tabelle JOIN, è necessario eseguire sqlite3.exe e aprire una connessione al database di esempio come segue:

Passo 1) In questo passaggio, apri Risorse del computer e vai alla seguente directory "C:\sqlite", quindi apri "sqlite3.exe":

Aprire sqlite3.exe dalla directory sqlite

Passo 2) Aprire il database “TutorialsSampleDB.db” con il seguente comando:

Apri il database TutorialsSampleDB

Ora sei pronto per eseguire qualsiasi tipo di query sul database.

SQLite INNER JOIN

SQLite Diagramma di Venn con giunzione interna

L'operazione INNER JOIN restituisce solo le righe che soddisfano la condizione di join ed elimina tutte le altre righe che non la soddisfano.

Esempio

Nell'esempio seguente, uniremo le due tabelle "Studenti" e "Dipartimenti" utilizzando DepartmentId per ottenere il nome del dipartimento per ogni studente, come segue:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Spiegazione del codice

L'INNER JOIN funziona come segue:

  • Nella clausola Select puoi selezionare le colonne che desideri dalle due tabelle a cui si fa riferimento.
  • La clausola INNER JOIN viene scritta dopo la prima tabella a cui fa riferimento la clausola "From".
  • Quindi la condizione di unione viene specificata con ON.
  • È possibile specificare degli alias per le tabelle a cui si fa riferimento.
  • La parola INTERNA è facoltativa, puoi semplicemente scrivere JOIN.

Uscita

L'operazione INNER JOIN genera i record da entrambe le tabelle, quella degli studenti e quella dei dipartimenti, che soddisfano la condizione "Students.DepartmentId = Departments.DepartmentId". Le righe non corrispondenti verranno ignorate e non incluse nel risultato.

SQLite Risultato di esempio INNER JOIN

Ecco perché, da questa query sono stati restituiti solo 8 studenti su 10, appartenenti ai dipartimenti di informatica, matematica e fisica. Gli studenti "Jena" e "George" non sono stati inclusi perché il loro ID di dipartimento è nullo e non corrisponde alla colonna departmentId della tabella dei dipartimenti. Come segue:

SQLite INNER JOIN righe corrispondenti

SQLite ISCRIVITI…UTILIZZANDO

L'INNER JOIN può essere scritto utilizzando la clausola "USING" per evitare ridondanza, quindi invece di scrivere "ON Students.DepartmentId = Departments.DepartmentId", puoi semplicemente scrivere "USING(DepartmentID)".

Puoi utilizzare "JOIN .. USING" ogni volta che le colonne che confronterai nella condizione di unione hanno lo stesso nome. In questi casi, non è necessario ripeterli utilizzando la condizione on e indicare semplicemente i nomi delle colonne e SQLite lo rileverà.

La differenza tra INNER JOIN e JOIN .. USING:

Con “JOIN … USING” non si scrive una condizione di join, ma si specifica semplicemente la colonna di join comune alle due tabelle unite. Invece di scrivere table1 “INNER JOIN table2 ON table1.cola = table2.cola”, si scrive “table1 JOIN table2 USING(cola)”.

Esempio

Nell'esempio seguente, uniremo le due tabelle "Studenti" e "Dipartimenti" utilizzando DepartmentId per ottenere il nome del dipartimento per ogni studente, come segue:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
INNER JOIN Departments USING(DepartmentId);

Spiegazione

  • A differenza dell'esempio precedente, non abbiamo scritto "ON Students.DepartmentId = Departments.DepartmentId". Abbiamo semplicemente scritto "USING(DepartmentId)".
  • SQLite deduce automaticamente la condizione di join e confronta il DepartmentId da entrambe le tabelle: Studenti e Dipartimenti.
  • Puoi utilizzare questa sintassi ogni volta che le due colonne che stai confrontando hanno lo stesso nome.

Uscita

Questo ti darà lo stesso identico risultato dell'esempio precedente:

SQLite UNISCI USANDO esempio risultato

SQLite UNIONE NATURALE

Un NATURAL JOIN è simile a un JOIN…USING, la differenza è che verifica automaticamente l'uguaglianza tra i valori di ogni colonna esistente in entrambe le tabelle.

La differenza tra INNER JOIN e NATURAL JOIN:

  • Nell'INNER JOIN, è necessario specificare una condizione di join che verrà utilizzata per unire le due tabelle. Nell'INNER JOIN, invece, non è necessario specificare una condizione di join. Si inseriscono semplicemente i nomi delle due tabelle senza alcuna condizione. L'INNER JOIN verificherà automaticamente l'uguaglianza dei valori per ogni colonna presente in entrambe le tabelle. L'INNER JOIN deduce automaticamente la condizione di join.
  • Nel NATURAL JOIN, tutte le colonne di entrambe le tabelle con lo stesso nome verranno abbinate tra loro. Ad esempio, se abbiamo due tabelle con due nomi di colonna in comune (le due colonne esistono con lo stesso nome nelle due tabelle), allora il join naturale unirà le due tabelle confrontando i valori di entrambe le colonne e non solo di una colonna.

Esempio

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
Natural JOIN Departments;

Spiegazione

  • Non è necessario scrivere una condizione di join con i nomi delle colonne (come abbiamo fatto in INNER JOIN). Non è stato nemmeno necessario scrivere il nome della colonna una sola volta (come abbiamo fatto in JOIN USING).
  • L'unione naturale analizzerà entrambe le colonne delle due tabelle. Rileverà che la condizione dovrebbe essere composta dal confronto di DepartmentId da entrambe le tabelle Studenti e Dipartimenti.

Uscita

Il NATURAL JOIN produrrà esattamente lo stesso output degli esempi INNER JOIN e JOIN USING, perché nel nostro esempio tutte e tre le query sono equivalenti. Tuttavia, in alcuni casi, l'output di un INNER JOIN sarà diverso da quello di un NATURAL JOIN. Ad esempio, se ci sono più tabelle con lo stesso nome, il NATURAL JOIN confronterà tutte le colonne tra loro. L'INNER JOIN, invece, confronterà solo le colonne specificate nella condizione di join.

SQLite Risultato di esempio di NATURAL JOIN

SQLite UNIONE ESTERNO SINISTRO

Lo standard SQL definisce tre tipi di OUTER JOIN: LEFT, RIGHT e FULL, ma SQLite supporta solo il naturale LEFT OUTER JOIN.

In LEFT OUTER JOIN, tutti i valori delle colonne selezionate dalla tabella di sinistra saranno inclusi nel risultato della query, quindi, indipendentemente dal fatto che il valore corrisponda o meno alla condizione di join, verrà incluso nel risultato.

Quindi, se la tabella di sinistra ha 'n' righe, i risultati della query avranno 'n' righe. Tuttavia, per i valori delle colonne provenienti dalla tabella di destra, se un valore non corrisponde alla condizione di join, conterrà un valore "null".

Quindi, otterrai un numero di righe equivalente al numero di righe nel join sinistro. In questo modo otterrai le righe corrispondenti da entrambe le tabelle (come i risultati INNER JOIN), più le righe non corrispondenti dalla tabella di sinistra.

Esempio

Nell'esempio seguente, proveremo il “LEFT JOIN” per unire le due tabelle “Studenti” e “Dipartimenti”:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students             -- this is the left table
LEFT JOIN Departments ON Students.DepartmentId = Departments.DepartmentId;

Spiegazione

  • SQLite La sintassi LEFT JOIN è la stessa di INNER JOIN; scrivi LEFT JOIN tra le due tabelle, quindi la condizione di join viene dopo la clausola ON.
  • La prima tabella dopo la clausola from è la tabella di sinistra. Mentre la seconda tabella specificata dopo il LEFT JOIN naturale è la tabella giusta.
  • La clausola OUTER è facoltativa; LEFT natural OUTER JOIN è uguale a LEFT JOIN.

Uscita

Come potete vedere, sono incluse tutte le righe della tabella degli studenti, per un totale di 10 studenti. Anche se il quarto e l'ultimo studente, Jena e George, hanno ID di dipartimento non presenti nella tabella dei dipartimenti, sono comunque inclusi.

In questi casi, il valore departmentName sia per Jena che per George sarà "null" perché la tabella dei dipartimenti non ha un departmentName che corrisponda al loro valore departmentId.

SQLite Risultato di esempio di LEFT OUTER JOIN

Analizziamo più nel dettaglio la query precedente utilizzando il left join, avvalendoci dei diagrammi di Venn:

SQLite Diagramma di Venn con unione esterna sinistra

La LEFT JOIN restituirà tutti i nomi degli studenti dalla tabella degli studenti, anche se lo studente ha un ID di dipartimento che non esiste nella tabella dei dipartimenti. Pertanto, la query non restituirà solo le righe corrispondenti come nel caso della INNER JOIN, ma includerà anche le righe non corrispondenti della tabella di sinistra, ovvero la tabella degli studenti.

Tieni presente che qualsiasi nome di studente che non ha un dipartimento corrispondente avrà un valore "null" per il nome del dipartimento, perché non esiste un valore corrispondente e tali valori sono i valori nelle righe non corrispondenti.

SQLite CROSS UNISCI

Un CROSS JOIN fornisce il prodotto cartesiano per le colonne selezionate delle due tabelle unite, abbinando tutti i valori della prima tabella con tutti i valori della seconda tabella.

Quindi, per ogni valore nella prima tabella, otterrai 'n' corrispondenze dalla seconda tabella dove n è il numero delle righe della seconda tabella.

A differenza di INNER JOIN e LEFT OUTER JOIN, con CROSS JOIN non è necessario specificare una condizione di join, perché SQLite non è necessario per il CROSS JOIN.

Migliori SQLite Ciò produrrà un insieme di risultati logici combinando tutti i valori della prima tabella con tutti i valori della seconda tabella.

Ad esempio, se si seleziona una colonna dalla prima tabella (colA) e un'altra colonna dalla seconda tabella (colB). La colonna A contiene due valori (1,2) e anche la colonna B contiene due valori (3,4).

Quindi il risultato del CROSS JOIN sarà di quattro righe:

  • Due righe combinando il primo valore di colA che è 1 con i due valori di colB (3,4) che saranno (1,3), (1,4).
  • Allo stesso modo, due righe combinando il secondo valore di colA che è 2 con i due valori di colB (3,4) che sono (2,3), (2,4).

Esempio

Nella seguente query proveremo il CROSS JOIN tra le tabelle Studenti e Dipartimenti:

SELECT
  Students.StudentName,
  Departments.DepartmentName
FROM Students
CROSS JOIN Departments;

Spiegazione

  • Nel SQLite seleziona da più tabelle, abbiamo appena selezionato due colonne "studentname" dalla tabella degli studenti e "departmentName" dalla tabella dei dipartimenti.
  • Per il cross join, non abbiamo specificato alcuna condizione di join, ma semplicemente unito le due tabelle con CROSS JOIN nel mezzo.

Uscita

Come puoi vedere, il risultato è di 40 righe; 10 valori dalla tabella studenti confrontati con i 4 dipartimenti dalla tabella dipartimenti. Come segue:

  • Quattro valori per i quattro dipartimenti della tabella dei dipartimenti abbinati al primo studente Michel.
  • Quattro valori per i quattro dipartimenti dalla tabella dei dipartimenti corrispondevano al secondo studente John.
  • Quattro valori per i quattro dipartimenti dalla tabella dei dipartimenti abbinati al terzo studente Jack... e così via.

SQLite Risultato di esempio di CROSS JOIN

DOMANDE FREQUENTI

SQLite È stato aggiunto il supporto per RIGHT JOIN e FULL OUTER JOIN nella versione 3.39.0, rilasciata nel 2022. Nelle versioni precedenti si emula un RIGHT JOIN tramite uno scambio.ping le tabelle in un LEFT JOIN e un FULL OUTER JOIN combinando due LEFT JOIN con UNION.

Un'operazione di self join unisce una tabella a se stessa utilizzando gli alias di tabella, in modo che una copia funga da tabella di sinistra e un'altra da tabella di destra. È utile per confrontare righe all'interno della stessa tabella, ad esempio per associare i dipendenti ai rispettivi responsabili.

Sì. È possibile concatenare diverse clausole JOIN in un'unica istruzione SELECT, ognuna con la propria condizione ON o USING, ad esempio FROM A JOIN B ON … JOIN C ON …. SQLite unisce le tabelle da sinistra a destra in un unico set di risultati combinato.

Scrivere JOIN da solo è la stessa cosa di INNER JOIN in SQLiteEntrambe mantengono solo le righe che soddisfano la condizione ON o USING, quindi le righe non corrispondenti vengono scartate. La parola chiave INNER è facoltativa, rendendo JOIN e INNER JOIN intercambiabili.

La creazione di un indice sulle colonne utilizzate nella condizione di join consente SQLite Il metodo consente di abbinare le righe senza dover scansionare intere tabelle, velocizzando così le join su set di dati di grandi dimensioni. L'indicizzazione delle colonne chiave esterna e l'esecuzione di ANALYZE per aggiornare le statistiche migliorano ulteriormente le prestazioni delle query di join.

Un INNER JOIN restituisce solo le righe corrispondenti in entrambe le tabelle. Un LEFT OUTER JOIN restituisce tutte le righe della tabella di sinistra più le righe corrispondenti della tabella di destra, riempiendo le colonne di destra non corrispondenti con NULL. Pertanto, un LEFT JOIN non elimina mai le righe della tabella di sinistra.

Sì. Gli assistenti AI text-to-SQL trasformano le richieste in linguaggio naturale in SQLite Istruzioni INNER, LEFT, NATURAL e CROSS JOIN. Fornire i nomi delle tabelle, dei nomi delle colonne e delle relazioni migliora la precisione, e ogni join generato dovrebbe essere rivisto e testato prima di essere eseguito su dati reali.

Copilota GitHub suggerisce SQLite Query JOIN inline in editor come VS CodeCompleta le clausole INNER JOIN, LEFT JOIN e ON o USING. Legge lo schema e i commenti nelle vicinanze, quindi i suoi suggerimenti riutilizzano i nomi reali di tabelle e colonne.

Riassumi questo post con: