SQL-连接查询:left join,right join,inner join,full join之间的区别
参考:
https://www.cnblogs.com/lijingran/p/9001302.html
https://www.cnblogs.com/assasion/p/7768931.html
因为单纯的select * from a,b是笛卡尔乘积。比如a表有5条数据,b表有3条数据,那么最后的结果有5*3=15条数据。
所以需要对两个表进行关联:
select * from a,b where a.id = b.id
此时就等价于:
select * from a inner join b on a.id = b.id。即内连接。
1.left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
2.right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
3.inner join(内连接) 只返回两个表中联结字段相等的行
4.full join(全连接) 返回两个表中所有的行
sql语句如下:
SELECT * from A
LEFT JOIN B
ON A.aID = B.bID
举例如下:
--------------------------------------------
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1. left join(左联接) 结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join(右联接) 结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408
结果说明:
和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join(等值连接) 结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.查询结果是left join和right join的交集。
注释:INNER JOIN 与 JOIN 是相同的。
--------------------------------------------
4.full join(全联接) 结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
NULL NULL 8 2006032408
结果说明:
FULL JOIN 关键字会从左表 (A) 和右表 (B) 那里返回所有的行。如果 "A" 中的行在表 "B" 中没有匹配,或者如果 "B" 中的行在表 "A" 中没有匹配,这些行同样会列出。
--------------------------------------------
ps:本人初学SQL server,有不足之处,还望不吝赐教,谢谢。
2019-10-14 19:34:14 第一次改
SQL-连接查询:left join,right join,inner join,full join之间的区别相关推荐
- SQL连接查询_ INNER JOIN
常用的JOIN语句 梗概:不同的 SQL JOIN 除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接. 下面列出了您可以使用的 JOIN 类型,以及它们之间的差 ...
- mysql sql 连接查询语句_Mysql——sql数据库中的连接查询
1.1.1 交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. ...
- SQL连接查询深度探险
测试环境: Windows XP Profession MySQL 5.0.45 Oracle 9i DB2 UDB 9.1 测试的SQL脚本如下:此脚本适合MySQL.DB2,如果要在Oracle上 ...
- SQL连接查询和嵌套查询详解
连接查询 若一个查询同时涉及两个或两个以上的表,则称之为连接查询.连接查询是数据库中最最要的查询, 包括: 1.等值连接查询 2.自然连接查询 3.非等值连接查询 4.自身连接查询 5.外连接查询 6 ...
- SQL连接查询和笛卡尔积
使用连接查询查出来的结果不是简单地两个表的笛卡尔积,而是包含了所有匹配条件的结果集. 连接查询是通过将两个或多个表的数据根据指定的条件进行关联,从而返回一张包含了两个或多个表的字段的结果集.连接查询的 ...
- Oracle数据库之SQL连接查询
前言 现实中有这么一种需求,有时候我们需要查询的数据是在多个表中的,那么如何从多个表中查询数据 呢?这就需要通过表的连接来实现查询了. 笛卡尔积 在定义连接之前我们需要简单的了解一下笛卡尔积,笔者不会 ...
- join和子查询效率_SparkSQL连接查询中的谓词下推处理(上)
SparkSQL是架构在 Spark 计算框架之上的分布式 Sql 引擎,使用 DataFrame 和 DataSet 承载结构化和半结构化数据来实现数据复杂查询处理,提供的 DSL可以直接使用 sc ...
- 查询oracle 表达小,oracle中sql语句小练习(使用连接查询)
假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询: select a.* from A a left join B b on a.m=b.m where b ...
- 浅谈sql之连接查询
SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...
- 【大数据】SparkSql 连接查询中的谓词下推处理 (一)
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/YPN85WBNcnhk8xKjTPTa2g 作者:李勇 目录: 1.SparkSql 2.连接查询和 ...
最新文章
- 如果有一天,我老无所依,请把我丢在迪拜捡垃圾……
- GlobalPointer:用统一的方式处理嵌套和非嵌套NER
- 担心被绑架?多云战略为企业解烦忧!
- java基础:数据类型
- PHP学习笔记--抽象类和抽象方法的应用
- 算法竞赛进阶指南——后缀数组
- calc() ---一个会计算的css属性
- Linux c 算法与数据结构--双向链表
- python免费开源工具推荐_年薪200万的程序员,推荐这10大Python免费开源工具!
- 长大了,也弄丢了很多东西
- 为什么自己编写的页面总是在那里抖动_SEO排名,为什么旧页面比新内容排名高?...
- Http Module 介绍[转]
- 【论文写作】SSM超市管理系统如何写可行性分析
- 高性能Mysql(一)
- 使用C# 开始第一个QQ机器人
- python饼图 立体_【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!
- 期货期权股票资管分仓系统(子账户系统、风控系统)的功能介绍
- 性能工具之Java分析工具BTrace入门
- 常见基础注入类型-SQL注入-web安全
- win11解决右键卡顿