SQLite -连接

SQLite的联接子句用于从数据库中的两个或多个表合并的记录。JOIN是用于通过使用共同的每个值从两个表结合域的装置。

SQL定义了三个主要类型的连接:

CROSS JOIN

INNER JOIN

OUTER JOIN

在我们继续讨论之前,让我们考虑两个表公司和部门。

我们已经看到INSERT语句填充表。

所以我们假设公司表中的可用的记录列表:

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

另一个表是部门有以下定义:

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

最新文章

  1. java 随机获取国内IP
  2. 实现简单sed替换功能的python脚本
  3. 瘋子C++笔记
  4. 把CentOS 7.x网卡名称eno16777736改为eth0
  5. linux下系统编程C环境搭建
  6. python的编码判断_unicode_gbk/gb2312_utf8(附函数)
  7. 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
  8. Winform 打开下载的文件
  9. HNOI2008越狱(快速幂)
  10. VS20xx下项目开发目录管理方法
  11. FJOI2007轮状病毒
  12. Android Binder设计与实现 - 设计篇
  13. C字符串总结+字符串库实现(增,改,删,查):
  14. spring05配置文件之间的关系
  15. hdu Write a simple HTML Browser
  16. 蓝桥杯- 煤球数目-java
  17. Tomcat服务器无法启动socket监听端口
  18. Bootstrap按钮插件
  19. 兼容低版本JS的Array.map方法
  20. nginx配置文件详解----第一篇【访问与错误日志】

热门文章

  1. Flutter实战视频-移动电商-31.列表页_列表切换交互制作
  2. 07.oAuth2介绍
  3. c#类—成员函数和封装及构造函数、析构函数、静态成员
  4. [OpenGL]配置GLFW(超详细)
  5. iOS11 与 iPhone X适配的那些坑(持更中...)
  6. Lightoj 1147【DP】
  7. IT行业技术及程序员相关网站荟萃
  8. Unity的http通信--unity与python的django通信
  9. [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形
  10. IT兄弟连 JavaWeb教程 JSP中的注释