SQLite鏈接

SQLite -鏈接sql

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

交叉鏈接匹配每一行的第一個表和第二個表的每一行。若是輸入表有xy,分別生成的表將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當滿意,列值爲每一個匹配配對的行AB的組合成一個結果行。

一個內部鏈接是最多見的類型的鏈接,鏈接的默認類型。您可使用內部關鍵字選擇。

如下是內部鏈接的語法:

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
相關文章
相關標籤/搜索