当前位置: 首页 > news >正文

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

(1)left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
(2)right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
(3)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 数据类型数据的字段,将会发生错误.

转载于:https://www.cnblogs.com/fu512/p/7574828.html

相关文章:

  • 洛谷——P1144 最短路计数
  • centos7 samba匿名访问设置
  • kafka基础知识点
  • 来来来!游戏场景风格暴露你的年纪
  • pandas模块学习笔记1--数据结构
  • Hadoop安装
  • VMware + JunOS + Linux 搭建安全测试平台
  • SecureCRT复制粘贴快捷键
  • hexo博客同步管理及迁移
  • WM_MOUSEWHEEL、WM_LBUTTONDOWN等父子窗口消息传递陷阱
  • 使用IntelliJ IDEA 配置Maven(入门)
  • 软件项目中的成本构成及估算方法【转】
  • windows下node配置npm全局路径(踩坑)
  • springmvc入门程序
  • SQServer查询数据库所有触发器
  • [译]前端离线指南(上)
  • Angular 4.x 动态创建组件
  • docker-consul
  • ES6语法详解(一)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Linux链接文件
  • PHP 小技巧
  • rc-form之最单纯情况
  • React的组件模式
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 聚类分析——Kmeans
  • 类orAPI - 收藏集 - 掘金
  • 判断客户端类型,Android,iOS,PC
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 使用权重正则化较少模型过拟合
  • 智能合约Solidity教程-事件和日志(一)
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • !!java web学习笔记(一到五)
  • # 飞书APP集成平台-数字化落地
  • (003)SlickEdit Unity的补全
  • (1)(1.11) SiK Radio v2(一)
  • (2020)Java后端开发----(面试题和笔试题)
  • (libusb) usb口自动刷新
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)模仿学习-Action数据的模仿
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET 5种线程安全集合
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 读取 JSON格式的数据
  • .net操作Excel出错解决
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [.NET 即时通信SignalR] 认识SignalR (一)