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
相关文章
相关标签/搜索