English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SQLite JoinsLe clausole sono utilizzate per combinare record di due o più tabelle nel database. JOIN è un metodo per combinare campi di due tabelle utilizzando valori comuni in ciascuna tabella.
SQL definisce tre principali tipi di connessione-
CORSO
Interno
Esterno
Prima di procedere, consideriamo due tabelle: COMPANY e DEPARTMENT. Abbiamo già visto l'istruzione INSERT per popolare la tabella COMPANY. Quindi supponiamo che la lista di record disponibile nella tabella COMPANY sia la seguente-
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 la lista di istruzioni INSERT utilizzate 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, nella tabella DEPARTMENT abbiamo la seguente lista di record disponibili-
ID DEPT EMP_ID ---------- ---------- ---------- 1 IT Billing 1 2 Engineering 2 3 Finance 7
CROSS JOIN abbinerà ogni riga della prima tabella a ogni riga della seconda tabella. Se le tabelle di input hanno rispettivamente x e y righe, la tabella di risultato avrà x * y righe. Poiché i CROSS JOIN possono generare tabelle estremamente grandi, è necessario prestare attenzione a utilizzarli solo quando necessario.
Ecco la sintassi di CROSS JOIN -
SELECT ... FROM table1 CROSS JOIN table2 ...
Secondo la tabella superiore, è possibile scrivere CROSS JOIN come segue:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
上述查询将产生以下结果-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Paul Ingegneria 7 Paul Finanza 1 Allen IT Fatturazione 2 Allen Engineering 7 Allen Finanza 1 Teddy IT Fatturazione 2 Teddy Ingegneria 7 Teddy Finanza 1 Mark IT Fatturazione 2 Mark Ingegneria 7 Mark Finanza 1 David IT Fatturazione 2 David Ingegneria 7 David Finanza 1 Kim IT Fatturazione 2 Kim Ingegneria 7 Kim Finanza 1 James IT Fatturazione 2 James Ingegneria 7 James Finance
INNER JOIN crea una nuova tabella di risultati combinando i valori delle colonne di due tabelle (table1 e table2) basate su un'espressione di connessione. 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 si soddisfano i predicati di join, i valori delle colonne corrispondenti A e B vengono combinati in una riga di risultato.
INNER JOIN è il tipo di connessione più comune e predefinito. Puoi scegliere di utilizzare la parola chiave INNER.
Di seguito è riportata la sintassi di INNER JOIN.
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
为了避免冗余并缩短短语,可以使用USING表达式声明INNER JOIN条件。此表达式指定一个或 più colonne elencate。
SELECT ... FROM table1 JOIN table2 USING (column1, ...) ...
NATURAL JOIN与JOIN...USING自然相似,只是它自动测试两个表中每个列的值之间是否相等-
SELECT ... FROM table1 NATURAL JOIN table2...
根据上面的表格,您可以编写一个INNER JOIN,如下所示:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
上述查询将产生以下结果-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering 7 James Finance
OUTER JOIN是INNER JOIN的扩展。尽管SQL标准定义了三种外部联接类型:LEFT,RIGHT和FULL,但是SQLite仅支持LEFT OUTER JOIN。
外部联接的条件与内部联接的条件相同,使用ON,USING或NATURAL关键字表示。初始结果表的计算方法相同。一旦计算了主JOIN,OUTER JOIN将从一个或两个表中获取所有未连接的行,将它们填充为NULL,然后将它们附加到结果表中。
以下是LEFT OUTER JOIN的语法-
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
为了避免冗余并缩短短语,可以使用USING表达式声明OUTER JOIN条件。此表达式指定一个或 più colonne elencate。
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING (column1, ...) ...
基于上面的表,您可以编写内部联接,如下所示:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
上述查询将产生以下结果-
EMP_ID NAME DEPT ---------- ---------- ---------- 1 Paul IT Billing 2 Allen Engineering Teddy Mark David Kim 7 James Finance