关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了。

需求是从数据库查数据,在前端以柱形图的形式展现出来,查到的数据按行业分组,显示每个行业的户数及户数占比,涉及到的字段有A表的用户数、总用户数和B表的行业名称。本来是不管查不查的到数据,在X轴都应该显示行业名称的,结果是X、Y轴都没有任何数据显示。问题就是我用错了联结方式。

一、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并不以谁为基础,它只显示符合条件的记录.

inner join 与 left join 之间的区别相关推荐

  1. oracle join详解,inner join和left join之间的区别详解

    前言 关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在 ...

  2. inner join 与 left join 、right join之间的区别

    关于inner join 与 left join 之间的区别,以前以为自己搞懂了,今天从前端取参数的时候发现不是预想中的结果,才知道问题出在inner join 上了. 需求是从数据库查数据,在前端以 ...

  3. left join,right join,inner join,full join之间的区别

    sql中的连接查询有inner join(内连接).left join(左连接).right join(右连接).full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果 ...

  4. SQL中inner join、left join、right join、outer join之间的区别

    SQL中inner join.left join.right join.outer join之间的区别 举个例子你就能知道了! A表(a1,b1,c1)      B表(a2,b2) a1   b1  ...

  5. 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 ...

  6. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

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

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

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

  8. Java-线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别

    Java线程中sleep().wait()和notify()和notifyAll().suspend和resume().yield().join().interrupt()的用法和区别 从操作系统的角 ...

  9. 转载:left join right join left outer join 区别

    原文地址:https://blog.csdn.net/laolaowhn/article/details/1776219 通俗的讲:     A   left   join   B   的连接的记录数 ...

最新文章

  1. 电脑计算机无法关闭什么意思,笔记本电脑无法关闭是什么问题? (长按以关闭计算机以解决问题)...
  2. CentOS 6.5 下安装 Redis 2.8.7
  3. linux只提取前两个目录名,Linux技巧:介绍从目录路径获取文件名和目录前缀的方法...
  4. Java中System.setProperty()用法
  5. linux c账户安全性,linux c flash安全策略
  6. 百度php editor图片上传到其他盘,百度编辑器Editor图片独立上传
  7. CF896E Welcome home, Chtholly(分块/并查集/第二分块)
  8. C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
  9. C++,Java,Pathy这几种编程语言的区别
  10. python 实现代码雨(转载)
  11. Linux获取管理员权限的相关命令
  12. 5分钟商学院学习笔记
  13. 文件共享锁溢出 请增加MaxLocksperFile注册表项值
  14. nodex 解决跨哉请求的解决方案express
  15. linux deepin配置优化:解决deepin v20.5不能自动降频导致CPU风扇一直狂转吹热气的问题
  16. 如何对excel某一列的数据进行分列
  17. 庖丁解牛——深入解析委托和事件
  18. hdu 1859 最小长方形
  19. Android实战—Broadcast音乐盒(三)
  20. PDF文件有编辑权限,怎么编辑PDF文件?

热门文章

  1. C++语言引用的介绍和示例
  2. VMware ESXi/ESX 的内部版本号和版本 (2143832)-2020-10-27更新
  3. 一步步实现SDDC-嵌入式PSC的VC部署
  4. Java基础学习总结(91)——阿里巴巴Java开发手册公开版
  5. Git学习总结(8)——Git和SVN之间的基本区别
  6. 一维搜索斐波那契C语言,斐波那契数列在一维搜索中的应用
  7. 反射 数据类型_这是一份超全面详细的Java反射机制学习指南
  8. 腾讯云AI平台张文杰:构建一站式机器学习服务平台
  9. 那些激动人心的React,Webpack,Babel的新特性对于我们开发体验带来哪些提升
  10. 基于event 实现的线程安全的优先队列(python实现)