English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQLite 联接

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 - connessione crociata

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 - Connessione interna

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 - 外联接

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