SQLite - JOINS
SQLite Joinsviene utilizzata per combinare i record di due o più tabelle in un database. Un JOIN è un mezzo per combinare i campi di due tabelle utilizzando valori comuni a ciascuna.
SQL definisce tre principali tipi di join:
- La CROCE JOIN
- L'INNER JOIN
- L'ESTERNO JOIN
Prima di procedere, consideriamo due tabelle AZIENDA e REPARTO. Abbiamo già visto le istruzioni INSERT per popolare la tabella COMPANY. Quindi supponiamo che l'elenco dei record disponibili nella tabella AZIENDA -
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Un'altra tabella è DEPARTMENT con la seguente definizione:
CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
Ecco l'elenco delle istruzioni INSERT per popolare la tabella DEPARTMENT -
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );
INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );
Infine, abbiamo il seguente elenco di record disponibili nella tabella DEPARTMENT:
ID DEPT EMP_ID
---------- ---------- ----------
1 IT Billing 1
2 Engineering 2
3 Finance 7
La CROCE JOIN
CROSS JOIN abbina ogni riga della prima tabella con ogni riga della seconda tabella. Se le tabelle di input hanno rispettivamente una riga x e y, la tabella risultante avrà una riga x * y. Poiché i CROSS JOIN hanno il potenziale per generare tabelle estremamente grandi, è necessario prestare attenzione a utilizzarli solo quando appropriato.
Di seguito è riportata la sintassi di CROSS JOIN -
SELECT ... FROM table1 CROSS JOIN table2 ...
Sulla base delle tabelle sopra, puoi scrivere un CROSS JOIN come segue:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
La query precedente produrrà il seguente risultato:
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Paul Engineering
7 Paul Finance
1 Allen IT Billing
2 Allen Engineering
7 Allen Finance
1 Teddy IT Billing
2 Teddy Engineering
7 Teddy Finance
1 Mark IT Billing
2 Mark Engineering
7 Mark Finance
1 David IT Billing
2 David Engineering
7 David Finance
1 Kim IT Billing
2 Kim Engineering
7 Kim Finance
1 James IT Billing
2 James Engineering
7 James Finance
L'INNER JOIN
INNER JOIN crea una nuova tabella dei risultati combinando i valori di colonna di due tabelle (table1 e table2) in base al predicato di join. La query confronta ogni riga di table1 con ogni riga di table2 per trovare tutte le coppie di righe che soddisfano il predicato di join. Quando il predicato di join è soddisfatto, i valori di colonna per ciascuna coppia di righe di A e B abbinate vengono combinati in una riga di risultati.
Un INNER JOIN è il tipo di join più comune e predefinito. Puoi utilizzare la parola chiave INNER facoltativamente.
Di seguito è riportata la sintassi di INNER JOIN -
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
Per evitare ridondanze e mantenere la frase più breve, le condizioni INNER JOIN possono essere dichiarate con a USINGespressione. Questa espressione specifica un elenco di una o più colonne.
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
UN NATURAL JOIN è simile a un file JOIN...USING, solo che verifica automaticamente l'uguaglianza tra i valori di ogni colonna presente in entrambe le tabelle -
SELECT ... FROM table1 NATURAL JOIN table2...
Sulla base delle tabelle sopra, puoi scrivere un INNER JOIN come segue:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
La query precedente produrrà il seguente risultato:
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineering
7 James Finance
L'ESTERNO JOIN
OUTER JOIN è un'estensione di INNER JOIN. Sebbene lo standard SQL definisca tre tipi di OUTER JOIN: LEFT, RIGHT e FULL, SQLite supporta soloLEFT OUTER JOIN.
OUTER JOIN hanno una condizione identica a INNER JOIN, espressa utilizzando una parola chiave ON, USING o NATURAL. La tabella dei risultati iniziali viene calcolata allo stesso modo. Una volta calcolato il JOIN primario, un OUTER JOIN prenderà tutte le righe non unite da una o entrambe le tabelle, le riempirà con NULL e le aggiungerà alla tabella risultante.
Di seguito è riportata la sintassi di LEFT OUTER JOIN -
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
Per evitare ridondanza e mantenere la frase più breve, le condizioni OUTER JOIN possono essere dichiarate con un'espressione USING. Questa espressione specifica un elenco di una o più colonne.
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...
Sulla base delle tabelle precedenti, puoi scrivere un inner join come segue:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
La query precedente produrrà il seguente risultato:
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineering
Teddy
Mark
David
Kim
7 James Finance