sql之left join、right join、inner join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下: 
--------------------------------------------
表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
sql语句如下: 
select * from A
left join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下: 
select * from A
right join B 
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下: 
select * from A
innerjoin B 
on A.aID = B.bID

结果如下:
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操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.

---------------------------

#左连接LEFT JOIN 连接自己时的查询结果测试

#左连接LEFT JOIN 连接自己时的查询结果(都会出现两个重复字段),两个表都有as后只能查询相等条件id非null的数据
SELECT * FROM tabA as k LEFT JOIN tabA as p ON k.id = p.id WHERE p.`partner_id` = '25'

#只有一个表用as方法,用k.`partner_id`时id为null的都会查询出来,但后面一个表的字段内容只有id不为null的数据不为null,其他都为null
SELECT * FROM tabA as k LEFT JOIN tabA ON k.id = tabA.id WHERE k.`partner_id` = '25'

#只有一个表用as方法,用tabA.`partner_id`时只能查询相等条件id非null的数据,跟两个表都用as一样
SELECT * FROM tabA as k LEFT JOIN tabA ON k.id = tabA.id WHERE tabA.`partner_id` = '25'

#左连接LEFT JOIN 连接自己时的查询结果,不用as时无法查询,提示:错误代码: 1066,Not unique table/alias: 'tabA'
SELECT * FROM tabA LEFT JOIN tabA ON tabA.id = tabA.id WHERE tabA.`partner_id` = '25'

==========================

本人微信公众帐号: 心禅道(xinchandao)

本人微信公众帐号:双色球预测合买(ssqyuce)

sql之left join、right join、inner join的区别,连接自己时的查询结果测试相关推荐

  1. 【转载】SQL中使用update inner join和delete inner join

    原文地址:SQL中使用update inner join和delete inner join Update XXX set XXX where 这种写法大家肯定都知道,才发现update和delete ...

  2. 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别...

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  3. 图解SQL inner join、left join、right join、full outer join、union、union all的区别

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对 于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  4. SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)

    前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...

  5. sql join 示例_SQL CROSS JOIN与示例

    sql join 示例 In this article, we will learn the SQL CROSS JOIN concept and support our learnings with ...

  6. sql join on和不用join区别_图解 SQL 各种 JOIN,太有用了!

    点击上方蓝字关注小姐姐吧从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付.现在偶尔需要到后台的 SQL Server 里追查一些数 ...

  7. SQL入门之第十讲——INNER JOIN 内连接

    在实际的业务当中,往往需要多张表连接查询,这就会涉及到JOIN 连接 1. JOIN 连接的类型 INNER JOIN :内连接, 可以只写JOIN ,只有连接的两个表中,都存在连接标准的数据才会保留 ...

  8. 【SQL】 delete update中使用inner join

    Update  Update XXX set XXX where 这种写法大家肯定都知道,update和delete支持inner join的update方式,这个在表间关联来做更新和删除操作非常有用 ...

  9. oracle11g中的join,sql - 使用Oracle 11g中的+符号进行左外连接

    (+)相当于(+). 在Oracle中,(+)表示JOIN中的"可选"表. 所以在你的第一个查询中,它是一个(+).在你的第二个查询中,它是(+).它们在功能上是等价的. 在术语中 ...

最新文章

  1. 国产scrum敏捷开发工具- leangoo领歌
  2. 数据可视化 | Seaborn
  3. 查看内核中每个函数花费的时间 initcall_debug
  4. hdu5348 MZL's endless loop(欧拉回路)
  5. VTK:PolyData之ResampleAppendedPolyData
  6. 记事本写html怎么加a1图片,记事本-功能待添加
  7. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·007【uni-app和vue.js基础快速上手】
  8. 【20181031T2】几串字符【数位DP思想+组合数】
  9. Obejctive-C 2.0 Mac和iOS开发实践指南(Objective-C 2.0最佳入门指南)
  10. edraw max for mac(亿图图示 mac)
  11. 中国视频云千亿市场,阿里云四年稳居“第一”
  12. Jquery 插件开发——citylinkage(省、市、县城市联动选择)
  13. ceph集群全部停机开机
  14. 一夜没睡,仍然精力充沛——工作规划-2013.07.23
  15. neo4j-入门---学习复杂关系使用CQL语句操作图数据库(二)
  16. Kubernetes(k8s)从入门到精通
  17. PO模式项目实战思路分析
  18. 关于大学在校生对共享单车的用后体验的调查报告
  19. 基于django+mysql的教师教学质量评价系统源代码,教学评价系统源码
  20. 超详细: Type-C接口Macbook笔记本无法充电(时连时断)的傻瓜处理流程

热门文章

  1. 浮点数为何不能进行相等性比较
  2. Linux无盘工作站架设实例
  3. 推进五通一平:手淘技术核心三大容器 五大方案首次整体亮相 百川开放全面升级...
  4. 微软发布了Spartan项目的细节,并证实了某些流言
  5. Python Module — asyncio 协程并发
  6. 从 2017 OpenStack Days China 看国内云计算的发展现状
  7. Openstack 实现技术分解 (1) 开发环境 — Devstack 部署案例详解
  8. hdu 4568 Hunter bfs建图+TSP状压DP
  9. JAVA学习日记DAY1
  10. freemarker.template.TemplateException: Expected string. column.nullable evaluated instead to freemar