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表中,作为一个结果集输出:
![](https://images2018.cnblogs.com/blog/1354564/201807/1354564-20180724145114924-1692424639.png)
0x04 总结
![](https://images2018.cnblogs.com/blog/1354564/201807/1354564-20180724205217710-329620877.png)
参考
SQL学习笔记之SQL中INNER、LEFT、RIGHT JOIN的区别和用法详解的更多相关文章
- js中 call() 和 apply() 方法的区别和用法详解
1.定义 每个函数都包含俩个非继承而来的方法:call() 和 apply() call 和 apply 可以用来重新定义函数的的执行环境,也就是 this 的指向:call 和 apply 都是 ...
- SQL学习笔记之项目中常用的19条MySQL优化
在写文章之前,首先感谢 飞友科技 陆老师提供的文档.. 声明一下:下面的优化方案都是基于 “ Mysql-索引-BTree类型 ” 的 0x00 EXPLAIN 做MySQL优化,我们要善用 EXPL ...
- 剑指Offer的学习笔记(C#篇)-- 平衡二叉树(二叉树后序遍历递归详解版)
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 一 . 题目分析 首先要理解一个概念:什么是平衡二叉树,如果某二叉树中任意的左右子树深度相差不超过1,那么他就是一颗平衡二叉树.如下图: 所以 ...
- Tomcat负载均衡、调优核心应用进阶学习笔记(一):tomcat文件目录、页面、架构组件详解、tomcat运行方式、组件介绍、tomcat管理
文章目录 tomcat文件目录 bin conf lib logs temp webapps work 页面 架构组件详解 tomcat运行方式 组件介绍 tomcat管理 tomcat文件目录 ➜ ...
- PL/SQL学习笔记之数据类型中的标量、LOB
一:标量 标量 即 基本数据类型,主要有4种:数值.字符.布尔类型.日期时间. 1:数值类型 数据类型 描述 PLS_INTEGER 通过2,147,483,647到-2147483648范围内有符号 ...
- SQL学习笔记之MySQL中真假“utf8” 问题
0x00 MySQL中UTF8报错 最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误: Incorre ...
- SQL学习笔记之SQL查询练习题1
(网络搜集) 0x00 表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id ...
- SQL学习笔记----更改SQL默认的端口号
1.SQLServer配置管理器----SQLServer网络配置----MSSQLSERVER的协议---TCP/IP(已启用)---IP地址 清空素有的IP,在IPALL下更改默认的端口: 2. ...
- 学习笔记6—pandas中ix,loc,iloc有什么区别?
直接看例子: >>> data = pd.Series(np.arange(10), index=[49,48,47,46,45, 1, 2, 3, 4, 5]) >>& ...
随机推荐
- Foundation框架中的NSNumber对象详解
到目前为止,我们所讨论过的所有数字数据类型,如int型.float型和long型都是Objective-C语言中的基本数据类型,也就是说,它们都不是对象.例如,不能向它们发送消息.然而,有时需要作为对 ...
- Tiny4412 Android 5.0 编译系统学习笔记
1.Android 编译系统概述 Build 系统中最主要的处理逻辑都在 Make 文件中,而其他的脚本文件只是起到一些辅助作用. 整个 Build 系统中的 Make 文件可以分为三类: ① Bui ...
- globalToLocal和localToGlobal
官方API: groupOut全局坐标(50,50) gourpIn全局坐标(100,100),并嵌套在groupOut里 btn全局坐标(150,150),并嵌套在groupIn里 获取组件全局坐标 ...
- LeetCode 笔记系列11 First Missing Positive [为什么我们需要insight]
题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...
- Linux Centos 开启防火墙 FirewallD is not running
转载自:http://www.z4zr.com/page/1006.html CentOS7用firewall命令“替代”了iptables.在这里我们需要区分“iptables服务”和“iptabl ...
- 给Cell间隔颜色
==){ cell.backgroundColor = [UIColor colorWithRed:. green:. blue:. alpha:]; } else{ cell.backgroundC ...
- _init_() got an unexpected keyword argument ‘shape’
按照<TensorFlow:实战Google深度学习框架>一书学习的tensorflow,书中使用的是0.9.0版本,而我安装的是1.11.0 如果按照书上的例子来,因为这本书使用tens ...
- c#获取QQ音乐当前播放的歌曲名
在网上找了很久,没找到方法,自己尝试着做,还是做出来了,很简单,就几句代码. Process[] ps = Process.GetProcessesByName("QQmusic" ...
- 剑指Offer——把二叉树打印成多行
题目描述: 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 分析: 二叉树的层次遍历,利用队列. 代码: /* struct TreeNode { int val; struct T ...
- Proud Merchants---hdu3466(有01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 与顺序有关的01背包. 如果一个物品p = 5,q = 7,一个物品p = 5,q = 9,如果 ...