SQLite Unisci: Naturale Sinistra Esterno, Interno, Croce con Tabelle Esempio

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
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 questa fase,

  1. Aprire Risorse del computer e andare alla seguente directory โ€œC:\sqlite" e
  2. Quindi apri โ€œsqlite3.exe"

SQLite Clausola ISCRIVITI

Passo 2) Apri la banca datiโ€TutorialSampleDB.db" con il seguente comando:

SQLite Clausola ISCRIVITI

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

SQLite INNER JOIN

L'INNER JOIN restituisce solo le righe che corrispondono alla condizione di unione ed elimina tutte le altre righe che non soddisfano la condizione di unione.

SQLite INNER JOIN
SQLite INNER JOIN

Esempio

Nell'esempio seguente, uniremo le due tabelle "Gli studenti" e "dipartimenti" con 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

SQLite Esempio di JOIN INTERNO

  • L'INNER JOIN produce i record sia dalle tabelle degli studenti che del dipartimento che corrispondono alla condizione che รจ "Students.DepartmentId = Dipartimenti.DepartmentId โ€œ. Le righe senza corrispondenza verranno ignorate e non incluse nel risultato.
  • Ecco perchรฉ da questa query sono stati restituiti solo 8 studenti su 10 studenti con dipartimenti di IT, matematica e fisica. Mentre gli studenti "Jena" e "George" non sono stati inclusi, perchรฉ hanno un ID dipartimento nullo, che non corrisponde alla colonna departmentId della tabella departments. Come segue:

    SQLite Esempio di JOIN INTERNO

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 .. UTILIZZANDO:

Con โ€œJOINโ€ฆUSINGโ€ non si scrive una condizione di join, si scrive solo la colonna di join che รจ in comune tra le due tabelle unite, invece di scrivere table1 โ€œINNER JOIN table2 ON table1.cola = table2.colaโ€ scriviamo รจ come "table1 JOIN table2 USING(cola)".

Esempio

Nell'esempio seguente, uniremo le due tabelle "Gli studenti" e "dipartimenti" con 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 Studenti.IDDipartimento = Dipartimenti.IDDipartimentoโ€œ. Abbiamo appena scritto โ€œUSING(IDDipartimento)".
  • 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 ISCRIVITI Esempio

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:

  • In INNER JOIN, devi specificare una condizione di unione che l'inner join utilizza per unire le due tabelle. Mentre nel join naturale non si scrive una condizione di join. Scrivi semplicemente i nomi delle due tabelle senza alcuna condizione. Quindi il join naturale verificherร  automaticamente l'uguaglianza tra i valori di ogni colonna presente in entrambe le tabelle. L'unione naturale deduce automaticamente la condizione di unione.
  • 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 abbiamo bisogno di scrivere una condizione di join con i nomi delle colonne (come abbiamo fatto in INNER JOIN). Non abbiamo nemmeno avuto bisogno di scrivere il nome della colonna una 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

SQLite NATURAL JOIN Esempio

  • Il JOIN naturale ti darร  esattamente lo stesso output dell'output che abbiamo ottenuto dagli esempi INNER JOIN e JOIN USING. Perchรฉ nel nostro esempio tutte e tre le query sono equivalenti. Ma in alcuni casi, l'output sarร  diverso da inner join rispetto a un join naturale. Ad esempio, se ci sono piรน tabelle con gli stessi nomi, il join naturale abbinerร  tutte le colonne tra loro. Tuttavia, l'inner join abbinerร  solo le colonne nella condizione di join (maggiori dettagli nella prossima sezione; la differenza tra inner join e natural join).

SQLite UNIONE ESTERNO SINISTRO

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

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

Pertanto, 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 qualsiasi valore che non corrisponde alla condizione di unione 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

SQLite Esempio di LEFT OUTER JOIN

  • Come puoi vedere, sono incluse tutte le righe della tabella degli studenti, per un totale di 10 studenti. Anche se il quarto e ultimo studente, Jena, e George DepartmentIds non esistono nella tabella Departments, vengono inclusi anch'essi.
  • E 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.

Diamo alla query precedente utilizzando il join sinistro una spiegazione piรน approfondita utilizzando i diagrammi di Van:

SQLite UNIONE ESTERNO SINISTRO

SQLite UNIONE ESTERNO SINISTRO

Il LEFT JOIN fornirร  tutti i nomi degli studenti dalla tabella degli studenti anche se lo studente ha un ID dipartimento che non esiste nella tabella dei dipartimenti. Pertanto, la query non ti fornirร  solo le righe corrispondenti come INNER JOIN, ma ti fornirร  la parte extra che ha le righe non corrispondenti dalla tabella di sinistra che รจ 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 unione, perchรฉ SQLite non ne ha bisogno per CROSS JOIN.

Migliori SQLite genererร  risultati logici impostati combinando tutti i valori della prima tabella con tutti i valori della seconda tabella.

Ad esempio, se hai selezionato una colonna dalla prima tabella (colA) e un'altra colonna dalla seconda tabella (colB). ColA contiene due valori (1,2) e anche colB 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 solo le due tabelle combinate con CROSS JOIN al centro.

Uscita

SQLite Esempio di CROSS JOIN

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 della tabella dei dipartimenti corrispondono al secondo studente John.
  • Quattro valori per i Quattro dipartimenti della tabella dipartimenti abbinati al terzo studente Jack... e cosรฌ via.

Sintesi

utilizzando SQLite JOIN query, รจ possibile collegare insieme una o piรน tabelle o sottoquery per selezionare colonne da entrambe le tabelle o sottoquery.

Riassumi questo post con: