SQL学习笔记之SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解
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操作
分析一下上面SQL语句的执行结果,我们的查询条件是“STU.STUDENT_ID=P.STUDENT_ID”,即学生表和处分表都有的STUDENT_ID的结果集,很明显,2014000002、2014000006在两表中都有,所以我们可以得出INNER JOIN操作的作用是:
0x02 LEFT JOIN操作
分析一下执行结果,LEFT JOIN操作中,比如A LEFT JOIN B,会输出左表A中所有的数据,同时将符合ON条件的右表B中搜索出来的结果合并到左表A表中,如果A表中存在而在B表中不存在,则结果集中会将查询的B表字段值(如此处的P.PUNISHMENT字段)设置为NULL。所以,LEFT JOIN的作用是:
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 总结
参考
最新文章
- 断电不断网——Linux的screen
- css3新增选择器
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
- Win10 UAP 标题栏
- 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
- 山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
- UTF8与GBK、GB2312等其他字符编码的相互转换
- win使用telnet到ubuntu下vim显示中文为乱码的解决方法~
- shell-正则表达式
- gcc及其选项详解 【转载】
- Nginx+Tomcat实现负载均衡小demo
- 如何在MD(d)和MT(d)工程间正确分配和释放动态内存
- 面试:Handler 的工作原理是怎样的?
- 短信利用weixin://connectToFreeWifi/?apKey=协议跳转到微信打开落地页h5
- bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法
- 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
- 【理解】 Error 10053和 Error 10054
- MySql - GROUP BY 和 HAVING关键字
- MAC 版本 phpstorm 配置 theme
- Android基础------通知栏