SQL语法 之 表连接
一、连接条件
连接查询中用来连接连个表的条件称为连接条件或连接谓词。其形式为:
[<表1>].<列名1> <连接运算符> [<表2>].<列2>
常见的连接运算符包括
1、比较运算符:=、>、<、>=、<=、!=、between和and。
2、逻辑运算符:not、and、or。
3、使用between和and连接查询形式为[<表1>].<列名1><between>[<表2>].<列名2>and[<表2>].<列名3>。
二、连接按照结果集分类
1、内连接:表中的行互相连接。结果集的行数等于每个表满足条件的行数的乘积,参与连接的表示平等的。
2、外连接:参与连接的表有主次之分,主表的每一行数据去匹配从表的数据列,符合连接条件的数据将直接返回到结果集中,不符合连接条件的数据列将以null填充后返回到结果集中,其中外连接又分左外连接、右外连接和全连接3种。
[1] 等值连接查询
select p.*,c.*
from country as c,person as p
where c.countryid = p.countryid
上面的等值连接中,两张表都有countryid字段,因此查出来的结果中就会有两列countryid
[2] 在等值结果中消除数据就是自然连接
select p.name,c.countryname from country as c,person as p where c.countryid = p.countryid
[3] 自身连接
一个数据表自己与自己建立连接称为自身连接
三、内连接
1、内连接查询的语法结构如下:
SELECT <属性或表达式列表>
FROM <表名> [INNER] JOIN <表名>
ON <连接条件>
[ WHERE <限定条件> ]
INNER 可以省略,只有 JOIN 时就是省略了inner。内连接就是传统的连接操作,这里用 ON 子句指定连接条件,用 WHERE 子句指定连接后的其他限定条件:
select p.name,c.countryname
from country as c inner join person p on p.countryid = c.countryid
四、左外连接查询
1、左外连接查询的语法结构,OUTER 可省略:
SELECT <属性或表达式列表>
FROM <表名> LEFT [OUTER] JOIN <表名>
ON <连接条件>
[ WHERE <限定条件> ]
如下:
SELECT TA.RoleId,TA.RoleName,TB.FunctionCode
FROM SysRole TA LEFT JOIN SysRoleFunction TB ON TA.RoleId = TB.RoleId
注意:
[1] 第一个表为主表,第二个表为从表;
[2] 在查询结果集中包含第一个表中满足条件的所有记录,如果第二个表存在ON子句连接条件匹配的记录,则第二个表返回相应值,否则第二个表返回null。也就是说,不管第二个表有没有记录匹配,第一个表的所有字段都会返回,这就是外连接与内连接的区别。

五、右外连接查询
1、右外连接查询的语法结构如下:
SELECT <属性或表达式列表>
FROM <表名> RIGHT OUTER JOIN <表名>
ON <连接条件>
[ WHERE <限定条件> ]
2、实例:
SELECT TB.RoleId,TB.FunctionCode,TA.RoleName
FROM SysRole TA RIGHT JOIN SysRoleFunction TB ON TA.RoleId = TB.RoleId
注:
[1] 第一个表为从表,第二个表为主表;
[2] 在查询结果集中包含第二个表中满足条件的所有记录,如果第一个表存在ON子句连接条件匹配的记录,则第一个表返回相应值,否则第一个表返回null。也就是说,不管第一个表有没有记录匹配,第二个表的所有字段都会返回。

六、全外连接查询
1、全外连接查询的语法结构如下:
SELECT <属性或表达式列表>
FROM <表名> FULL [ OUTER ] JOIN <表名>
ON <连接条件>
[ WHERE <限定条件>]
注:
[1] 两个表同为主表;
[2] 在查询结果集中包含两个表中的所有记录,如果存在ON子句连接条件匹配的记录,则另一个表返回相应值,否则另一个表返回null。也就是说,不管表记录有没有记录匹配,两个表的所有字段都会返回。
七、交叉连接
交叉连接Corss join,用于将第一张表的所有记录与第二张表的所有记录组合一次并返回。
执行如下SQL语句:
SELECT LastName + firstname
FROM name2 CROSS JOIN name1
八、联合查询union(union all)
union是一个特殊的运算符,用于将两个或两个以上的查询产生一个结果集。join将信息水平连接(添加更多列),而union将信息垂直连接(添加更多行)。
当使用union处理查询时,要注意以下几个关键点。
(1)、所有union的查询必须在select列表中有相同的列数。即如果第一个查询有3个列数,第二个查询也要只有3个列数。
(2)、union返回结果的标题集仅从第一个查询中获得,无论第二个查询如何命名或取别名都不会更改。
(3)、查询中对应的列的数据类型必须隐式一致。注意不要求完全一致,只需要隐式一致。
(4)、与其他非union不同,union的默认返回选项为distinct,而不是all。union all语句与union的不同点仅仅在于遇到相同的记录,会全部保留。
SQL语法 之 表连接的更多相关文章
- SQL的多表连接查询
SQL的多表连接查询 多表连接查询具有两种规范,SQL92和SQL99规范. SQL92规范支持下列多表连接查询: (1)等值连接: (2)非等值连接: (3)外连接: (4)广义笛卡尔积: SQL9 ...
- 章节2:SQL之多表连接
原文:章节2:SQL之多表连接 Sql的多表连接关系有:内连接.外连接和交叉连接. 先建立两个用于演示的表: TB_Characters: Id Character 1 内向 2 外向 3 中性性格 ...
- SQL语句多表连接查询语法
一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student.Num= ...
- sql之多表连接
最近遇到特别多多表连接的问题,因此随笔记下,开始学java和mysql的时间太短,有见解不周的地方,希望读者可以提出探讨. 对于left join.right join和inner join(join ...
- sql数据库的表连接方式图文详解
sql数据库表连接,主要分为:内连接.外连接(左连接.右连接 .全连接).交叉连接,今天统一整合一下,看看他们的区别. 首先建表填充值. 学生表:student(id,姓名,年龄,性别 ) 成绩表 ...
- SQL update 多表连接方法
SQL Update多表联合更新的方法 () sqlite 多表更新方法 //---------------------------------- update t1 set col1=t2.col1 ...
- SQL server 数据库——表连接(多表横向连接,纵向连接)
表连接 1.select * from student,score --笛卡尔积 2.两个表的连接: 法1:select student.sno, sname, degree from student ...
- sql语句左右表连接理解
一句话,左连接where只影响坐标,右连接where只影响右表
- 【HCIA Gauss】学习汇总-数据库管理(SQL语法 库表 索引操作)-5
# 简单查询select * from table_reference # 创建表 create table TB(staff_id int primary key , course_name cha ...
随机推荐
- 【Splay 总结】
很多年前学的splay已经忘了? BZOJ 3729 要用Splay啊哭..强制在线.. 二叉查找树 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree ...
- Java 基础总结--反射的基本操作
一.反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...
- PAT甲级1034. Head of a Gang
PAT甲级1034. Head of a Gang 题意: 警方找到一个帮派的头的一种方式是检查人民的电话.如果A和B之间有电话,我们说A和B是相关的.关系的权重被定义为两人之间所有电话的总时间长度. ...
- Linux下同一网段内的IP中两台主机通信不经过路由器(ARP)(转)
答案一:同一网段A与B通信,不需要路由器介入. A直接广播ARP request 到广播域,B处于同一广播域,可以接收到ARP request,B用单播方式直接告诉A自己的MAC B 地址.A收到B的 ...
- Internationalization composition diagram
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHJvdWJsZXNob290ZXI=/font/5a6L5L2T/fontsize/400/fill/I0 ...
- 降压转换器 (Buck)
降压转换器 (Buck) 切换式降压转换器 (Buck) 能提供高效率.高度弹性.高压降比.高负载能力的降压转换. 多数降压转换器 (Buck) 包含上桥 MOSFET 和同步整流 MOSFET,根据 ...
- SMT Surface Mount Technology footprint references
http://en.wikipedia.org/wiki/Surface-mount_technology Surface-mount technology (SMT) is a method for ...
- NHibernate 3 Beginner's Guide
前言 这一章是一个完整的NHibernate的Simple,原文中用Fluent NHibernate做映射,但我使用NHibernate3.2版本,所以3.2的Conformist代替Fluent ...
- (转)媒体格式分析之flv -- 基于FFMPEG
本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写.今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH V ...
- springboot-application.properties可配置属性总结 (datasource 和 JPA)
########################################## ###datasource ########################################## ...