SQLite的聯接子句用於從數據庫中的兩個或多個表合併的記錄。JOIN是用於經過使用共同的每一個值從兩個表結合域的裝置。數據庫
SQL定義了三個主要類型的鏈接:express
CROSS JOIN測試
INNER JOINspa
OUTER JOINcode
在咱們繼續討論以前,讓咱們考慮兩個表公司和部門。sqlite
咱們已經看到INSERT語句填充表。blog
因此咱們假設公司表中的可用的記錄列表: it
ID NAME AGE ADDRESS SALARY io
---------- ---------- ---------- ---------- ----------
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
另外一個表是部門有如下定義:
CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
這是填充部門表的INSERT語句的列表:
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 );
最後,咱們有如下記錄列表中可用DEPARTMENT表:
The CROSS JOIN
交叉鏈接匹配每一行的第一個表和第二個表的每一行。若是輸入表有x和y列,分別生成的表將x + y列。由於交叉鏈接可能會產生很是大的表,必須注意只有在適當的時候使用它們
下面是交叉鏈接的語法:
SELECT ... FROM table1 CROSS JOIN table2 ...
根據上面的表格,咱們能夠編寫一個交叉鏈接以下:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
上面的查詢將產生如下結果:
EMP_ID NAME DEPT
---------- ---------- ----------
1 Paul IT Billing
2 Paul Engineerin
7 Paul Finance
1 Allen IT Billing
2 Allen Engineerin
7 Allen Finance
1 Teddy IT Billing
2 Teddy Engineerin
7 Teddy Finance
1 Mark IT Billing
2 Mark Engineerin
7 Mark Finance
1 David IT Billing
2 David Engineerin
7 David Finance
1 Kim IT Billing
2 Kim Engineerin
7 Kim Finance
1 James IT Billing
2 James Engineerin
7 James Finance
The INNER JOIN
一個內部鏈接建立一個新的結果表經過結合兩個表的列值(表一和表二)基於join-predicate。查詢比較表一和表二的每一行的表來找到全部兩行知足join-predicate(鏈接謂詞)。join-predicate當滿意,列值爲每一個匹配配對的行A和B的組合成一個結果行。
一個內部鏈接是最多見的類型的鏈接,鏈接的默認類型。您可使用內部關鍵字選擇。
如下是內部鏈接的語法:
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
爲了不冗餘和措辭短,內加入條件能夠用使用表達式聲明。
這個表達式指定一個或多個列的列表:
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
天然鏈接相似於JOIN...USING,只有它會自動測試之間的平等存在於兩個表的每一列的值:
SELECT ... FROM table1 NATURAL JOIN table2...
根據上面的表格,咱們能夠編寫一個內部鏈接以下:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
The OUTER JOIN
外鏈接是一個擴展的內部鏈接。雖然SQL標準定義了三種類型的外部鏈接:左,右,和徹底但SQLite只支持左外鏈接。
外部鏈接有一個條件是相同的內部鏈接,表示使用, USING或 NATURAL的關鍵字。最初的計算結果表相同的方式。一旦主加入計算,一個外部鏈接將採起多大的行從一個或兩個表,與null墊出來,並將它們附加到結果表。
下面是左外鏈接的語法:
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
爲了不冗餘和措辭短,外鏈接條件能夠用使用表達式聲明。
這個表達式指定一個或多個列的列表:
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 Engineerin
Teddy
Mark
David
Kim
7 James Finance