SQLite
 sql >> Database >  >> RDS >> SQLite

Unisciti a SQLite

Riepilogo :in questo tutorial imparerai vari tipi di join SQLite per eseguire query sui dati da due o più tabelle.

Per la dimostrazione utilizzeremo gli artists e albums tabelle dal database di esempio.

Un artista può avere zero o più album mentre un album appartiene a un artista.

Per interrogare i dati di entrambi gli artists e albums tabelle che usi puoi usare un INNER JOIN , LEFT JOIN o CROSS JOIN clausola. Ciascuna clausola di join determina in che modo SQLite utilizza i dati di una tabella in modo che corrispondano alle righe di un'altra tabella.

Nota che SQLite non supporta direttamente il RIGHT JOIN e FULL OUTER JOIN .

SQLite INNER JOIN

La seguente dichiarazione restituisce i titoli degli album e i nomi degli artisti:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Ecco l'output parziale:

In questo esempio, il INNER JOIN la clausola corrisponde a ogni riga degli albums tabella con ogni riga degli artists tabella basata sulla condizione di unione (artists.ArtistId = albums.ArtistId ) specificato dopo il ON parola chiave.

Se la condizione di unione restituisce true (o 1), le colonne di righe di entrambi gli albums e artists le tabelle sono incluse nel set di risultati.

Questa query utilizza alias di tabella (l per gli albums tabella e r per artists tabella) per abbreviare la query:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Nel caso in cui i nomi delle colonne delle tabelle unite siano gli stessi, ad esempio ArtistId , puoi usare il USING sintassi come segue:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

La clausola USING(ArtistId) è equivalente alla clausola ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Questa dichiarazione seleziona i nomi degli artisti e i titoli degli album dai artists e albums tabelle utilizzando il LEFT JOIN clausola:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Ecco l'output:

Il LEFT JOIN La clausola seleziona i dati a partire dalla tabella di sinistra (artists ) e le righe corrispondenti nella tabella di destra (albums ) in base alla condizione di unione (artists.ArtistId = albums.ArtistId ).

Il join sinistro restituisce tutte le righe degli artists tabella (o tabella di sinistra) e le righe corrispondenti dagli albums tavolo (o tavolo destro).

Se una riga della tabella di sinistra non ha una riga corrispondente nella tabella di destra, SQLite include le colonne delle righe nella tabella di sinistra e NULL per le colonne della tabella di destra.

Simile a INNER JOIN clausola, puoi usare la USING sintassi per la condizione di unione come segue:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

Se vuoi trovare artisti che non hanno album, puoi aggiungere un WHERE clausola come mostrato nella query seguente:

SELECT
    Name,
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
WHERE Title IS NULL   
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Questa immagine mostra l'output parziale:

In genere, questo tipo di query consente di trovare righe disponibili nella tabella di sinistra ma che non hanno righe corrispondenti nella tabella di destra.

Nota che LEFT JOIN e LEFT OUTER JOIN sono sinonimi.

SQLite CROSS JOIN

Il CROSS JOIN La clausola crea un prodotto cartesiano di righe dalle tabelle unite.

A differenza di INNER JOIN e LEFT JOIN clausole, un CROSS JOIN non ha una condizione di unione. Ecco la sintassi di base di CROSS JOIN clausola:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

Il CROSS JOIN combina ogni riga della prima tabella (table1 ) con ogni riga della seconda tabella (table2 ) per formare il set di risultati.

Se la prima tabella ha N righe, la seconda tabella ha M righe, il risultato finale avrà NxM righe.

Un esempio pratico del CROSS JOIN La clausola consiste nel combinare due serie di dati per formare una serie di dati iniziale per l'ulteriore elaborazione. Ad esempio, hai un elenco di prodotti e mesi e vuoi fare un piano quando puoi vendere quali prodotti.

Il seguente script crea i products e calendars tabelle:

CREATE TABLE products(
    product text NOT null
);

INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');



CREATE TABLE calendars(
    y int NOT NULL,
    m int NOT NULL
);

INSERT INTO calendars(y,m)
VALUES 
    (2019,1),
    (2019,2),
    (2019,3),
    (2019,4),
    (2019,5),
    (2019,6),
    (2019,7),
    (2019,8),
    (2019,9),
    (2019,10),
    (2019,11),
    (2019,12);
Code language: SQL (Structured Query Language) (sql)

Questa query utilizza il CROSS JOIN clausola per abbinare i prodotti ai mesi:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

Ecco l'output:

In questo tutorial, hai appreso vari tipi di join SQLite che ti consentono di eseguire query da più tabelle.