0x00 建表准备

相信很多人在刚开始使用数据库的INNER JOIN、LEFT JOIN和RIGHT JOIN时,都不太能明确区分和正确使用这三种JOIN操作,本文通过一个简单的例子通俗易懂的讲解这三者的区别,希望对大家能带来帮助。

首先,我们创建示例数据库和表。同时也要明确一个概念:A INNER/LEFT/RIGHT JOIN B操作中,A表被称为左表,B表被称为右表。

创建示例数据库school,在数据库school下创建两张示例表:STUDENT、PUNISHMENT。

创建学生基本信息表STUDENT,如下:

创建学生违纪处罚记录表PUNISHMENT,如下:

注意,为了测试这三种JOIN操作的不同,PUNISHMENT表中(上图黄色标识)2014000009这个学生ID在学生基本信息表中是不存在的,这个相当于异常数据。

示例信息已经创建完毕,那么我们来看看具体的操作有什么区别。

0x01 INNER JOIN操作

首先,我们看看INNER JOIN操作,我们写个SQL语句,查询学生表中哪些学生受过处分:

分析一下上面SQL语句的执行结果,我们的查询条件是“STU.STUDENT_ID=P.STUDENT_ID”,即学生表和处分表都有的STUDENT_ID的结果集,很明显,2014000002、2014000006在两表中都有,所以我们可以得出INNER JOIN操作的作用是:

INNER JOIN:根据ON字段标识出来的条件,查出关联的几张表中,符合该条件的记录,合并成一个查询结果集。

0x02 LEFT JOIN操作

我们写个分析LEFT JOIN操作的SQL:

分析一下执行结果,LEFT JOIN操作中,比如A LEFT JOIN B,会输出左表A中所有的数据,同时将符合ON条件的右表B中搜索出来的结果合并到左表A表中,如果A表中存在而在B表中不存在,则结果集中会将查询的B表字段值(如此处的P.PUNISHMENT字段)设置为NULL。所以,LEFT JOIN的作用是:

LEFT JOIN:从右表B中将符合ON条件的结果查询出来,合并到A表中,再作为一个结果集输出。

0x03 RIGHT JOIN操作

分析过LEFT JOIN了,RIGHT JOIN相信你也已经明白了,“A LEFT JOIN B ON ……”是将符合ON条件的B表搜索结果合并到A表中,作为一个结果集输出。而RIGHT JOIN刚好相反,“A RIGHT JOIN B ON ……”是将符合ON条件的A表搜索结果合并到B表中,作为一个结果集输出:

0x04 总结

A INNER JOIN B ON……:内联操作,将符合ON条件的A表和B表结果均搜索出来,然后合并为一个结果集。
A LEFT JOIN B ON……:左联操作,左联顾名思义是,将符合ON条件的B表结果搜索出来,
然后左联到A表上,然后将合并后的A表输出。
A RIGHT JOIN B ON……:右联操作,右联顾名思义是,将符合ON条件的A表结果搜索出来,
然后右联到B表上,然后将合并后的B表输出。
 

参考

最新文章

  1. 断电不断网——Linux的screen
  2. css3新增选择器
  3. 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
  4. Win10 UAP 标题栏
  5. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
  6. 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
  7. UTF8与GBK、GB2312等其他字符编码的相互转换
  8. win使用telnet到ubuntu下vim显示中文为乱码的解决方法~
  9. shell-正则表达式
  10. gcc及其选项详解 【转载】
  11. Nginx+Tomcat实现负载均衡小demo
  12. 如何在MD(d)和MT(d)工程间正确分配和释放动态内存
  13. 面试:Handler 的工作原理是怎样的?
  14. 短信利用weixin://connectToFreeWifi/?apKey=协议跳转到微信打开落地页h5
  15. bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法
  16. 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
  17. 【理解】 Error 10053和 Error 10054
  18. MySql - GROUP BY 和 HAVING关键字
  19. MAC 版本 phpstorm 配置 theme
  20. Android基础------通知栏

热门文章

  1. Javascript实现图片的预加载的完整实现
  2. 使用async/await——Nodejs+ExpressJs+Babel
  3. jquery将具有相同名称的元素的值提取出来放到一个数组内
  4. 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
  5. Spring 集合注入
  6. git sourcetree忽略某些文件提交
  7. HDFS 常用Shell命令
  8. C#批量入库
  9. jQuery中animate设置属性的一个问题
  10. EIT: where is it now and what lies ahead?