SQLite连接
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
SQLite连接的更多相关文章
- EF6+Sqlite连接字符串的动态设置
摘要 在winform中应用sqlite和ef,对于sqlite连接字串的设置,大多情况下是不想写死了,你不知道用户会将你的exe程序安装在什么位置,也不知道他的电脑盘符是什么,如果写死了,那么很有可 ...
- Linq to Sqlite连接
本人还是挺喜欢用Sqlite,鼓捣半天终于连上了,赶紧记录一下 1.当然还是新建一个项目,还是winform, 2.Vs2012添加NoGet,点击工具--扩展和更新,搜索NoGet,安装. 3.管理 ...
- Delphi XE10下用FireDAC与SQLite连接要注意的问题 转
Delphi在XE的版本上,已经实现了安卓与苹果的移动跨平台,因此只需要一份代码,就可以统领两种手机平台,确实是一种高效的做法和节约的策略. 用Delphi XE7连接SQLite,主流使用Fir ...
- SQLite 连接两个字符串
SQLite中,连接字符串不是使用+,而是使用|| 示例: SELECT 'I''M '||'Chinese.' 将输出 I'M Chinese. 特别说明:1. SELECT 'I''M '+'Ch ...
- SQLite连接C#笔记
不得不吐槽,实在是太坑了.以下几点一定要注意: 要下载两个东西,都要上官网.一个是SQLite for Windows,一个是System.Data.SQLite. 下载下来的DLL里面有个test, ...
- QT之sqlite连接
啥也没做,按说明直接啪啪写一堆代码 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //open datebase ...
- sqlite与C++进行连接
SQLite数据库是零配置的,sqlite数据库不同于SqlServer等数据库,SQLite不需要复杂配置,只需要,将SQLite的库文件和动态链接文件拷贝到相应工程目录下,就可以使用SQLite数 ...
- C#.net连接SQLite及遇到的问题
1.Slite简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...
- C#连接Sqlite
1.Slite简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...
随机推荐
- C# in查询
一.前言 在做项目中,我们会经常使用到 in 查询语句.那么如果我们用 EF 和 Linq 怎么写?接下来看代码 二.实例 我使用的是区域查询的例子,基本的 sql 语句如下: SELECT * FR ...
- 让group tableview每个section拥有阴影和圆角
#import <UIKit/UIKit.h> @class GroupShadowTableView; @protocol GroupShadowTableViewDelegate &l ...
- 如何实现一个无边框Form的移动和改变大小(一)
很多时候我们不希望使用Windows提供的窗体. 我们希望使用一个无边框的窗体,什么border,caption透明就行了. 下面我们来说下一些实现方法. 这个方法要求窗体自定义的border siz ...
- 【NOI省选模拟】小奇的花园
「题目背景」 小奇在家中的花园漫步时,总是会思考一些奇怪的问题. 「问题描述」 小奇的花园有n个温室,标号为1到n,温室以及以及温室间的双向道路形成一棵树. 每个温室都种植着一种花,随着季节的变换,温 ...
- C#Sqlite增删改查
说到使用数据库的话,无非也就是对数据的增加,删除和修改以及查询.前文已经 创建好了程序,现在我们就可以来具体实现Sqlite的数据操作,增删改查. 第一步,创建连接字符串来连接数据库: private ...
- C 语言实例 - 从文件中读取一行
C 语言实例 - 从文件中读取一行 从文件中读取一行. 文件 runoob.txt 内容: $ cat runoob.txt runoob.com google.com 实例 #include < ...
- SpringBoot | 遇坑总结 | JPA
1. Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ...
- 去掉UItalbeview横线
一.去掉UItalbeview中所有横线 // self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 二.自定义U ...
- C# 面向对象之封装
封装是指将类的内部数据隐藏起来不让对象实例直接对其操作,C#中提供了属性机制来对类内部的状态进行操作. 在C#中封装可以通过public.private.protected和internal等关键字来 ...
- C# 常量与只读属性的区别
public readonly string name ----这个name是个只读属性,不需要在定义时初始化值,而是可以在构造函数中完成初始化. public const int age =18 ...