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 ...
随机推荐
- Host aggregate分区
问题描述:生产区一期环境增加4台计算结点,希望被大数据租户独占1. 该大数据用户创建的虚拟机必须被调度到这4个计算结点2. 其他租户创建虚拟机禁止调度到这4台机器 标黄的需要自行根据情况修改解决方案: ...
- BZOJ 3238: [Ahoi2013]差异 后缀自动机 树形dp
http://www.lydsy.com/JudgeOnline/problem.php?id=3238 就算是全局变量,也不要忘记,初始化(吐血). 长得一副lca样,没想到是个树形dp(小丫头还有 ...
- 套题:Codeforces Round #194 (Div. 1) (2/5)
A. Secrets http://www.cnblogs.com/qscqesze/p/4528529.html B. Chips http://www.cnblogs.com/qscqesze/p ...
- Java实现-每天三道剑指Offre(2-4)
实现一个单例模式 /** * 面试题2:实现单例模式 * * @author qiuyong 饿汉式 */ public class Singleton01 { private Singleton01 ...
- GitHub官方Markdown语法教程
说明:Markdown随着编译器不一样,语法也都不一样,但这份GitHub提供的官方教程,基本学会这份就够了. https://guides.github.com/features/mastering ...
- FreeRTOS Memory Management ( IAR )
http://www.freertos.org/a00111.html The RTOS kernel allocates RAM each time a task, queue, mutex, so ...
- Spring JavaConfig @Import实例
一般来说, 需要按模块或类别 分割Spring XML bean文件 成多个小文件, 使事情更容易维护和模块化. 例如, <beans xmlns="http://www.spring ...
- JQuery 关于位置的计算(重要)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- kindeditor老版本version 4.1.10 bug踩坑
目录 上传图片或者视频的弹窗有时候不出现,只出现遮罩 视频上传无法播放的问题 参考链接: 问题目录 上传图片或者视频的弹窗有时候不出现,只出现遮罩 通过测试发现,出现这种情况不是弹出框没有出现,而是设 ...
- Android 新浪博客分享问题总结
分类: android(33) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 我遇到BUG 1 sso package or singn error Bug2 ...