以不同的角度来看内连接和外连接
来源:互联网 发布:又拍云和阿里云 编辑:程序博客网 时间:2024/04/27 18:56
使用过MySQL的人都知道连接查询在MySQL查询中使用频率最高的,但是在使用过程中都或多或少地遇到一些疑惑,内连接和外连接的使用场景到底是怎样的?这其中又暗藏着什么样的玄机?接着,让我们以不同的角度来分析下内连接和外连接的区别吧!
准备工作
众所周知,验证和探索某一个问题时,首先要做的是做一些准备工作,就像在做数学证明题时,都需要准备一些证明过程的前提要点,而我的“前提要点”就是创建表,有了表,才好开始干事!
创建表
学生表
课程表
分数表
表建好之后,首先我们需要从定义上先来初步了解下内连接和外连接—————
定义
- 内连接
- 从专业术语来讲,所谓内连接,就是使用比较运算符根据每个表共有的列的值匹配两个表中的行;
- 从数学的角度来看,内连接实质就是几个表之间求取交集,即:A∩B∩C,如图所示:
- 从数学的角度来看,内连接实质就是几个表之间求取交集,即:A∩B∩C,如图所示:
- 实例:
SELECT * from student t1INNER JOIN sc t2 ON t1.Sid = t2.SidINNER JOIN course t3 ON t2.Cid = t3.CidGROUP BY t1.sid,t1.sname ORDER BY t2.score;
查询结果如下:
- 左外连接
- 从专业术语来讲,所谓左连接,就是以左表为主表,不管连接条件是否达成,主表的内容总是会显示出来,使用比较运算符返回主表和两个表共有行的内容,如果连接条件未达到,那么显示null;
- 从数学的角度,实质就是返回主表和两个表之间的交集结果集内容,即:假设A表为主表,那么返回结果集为:AU(A∩B∩C),如上;
- 实例:
SELECT * from student t1LEFT JOIN sc t2 ON t1.Sid = t2.SidLEFT JOIN course t3 ON t2.Cid = t3.CidGROUP BY t1.sid,t1.sname ORDER BY t2.score;
查询结果如下:
- 右外连接
- 从专业术语来讲,所谓右连接,就是以右表为主表,不管连接条件是否达成,主表的内容总是会显示出来,使用比较运算符返回主表和两个表共有行的内容,如果连接条件未达到,那么显示null;
- 从数学的角度,实质就是返回主表和两个表之间的交集结果集内容,即:假设A表为主表,那么返回结果集为:AU(A∩B∩C),如上图;
- 实例:
SELECT * from student t1RIGHT JOIN sc t2 ON t1.Sid = t2.SidRIGHT JOIN course t3 ON t2.Cid = t3.CidGROUP BY t1.sid,t1.sname ORDER BY t2.score;
查询结果如下:
从性能的角度来看待内连接和外连接
其实有时候内连接和外连接的查询结果是一样的,在本质上,两者只是存在丢失数据方面存在一些差别,但是在大数据环境下,对于性能,两者又存在着一些什么区别呢?
在我翻看一些文章时,发现内连接和外连接的性能与不同的数据环境有关系,比如:
Left JION优于INNERJION的情形:https://stackoverflow.com/questions/17100819/left-join-significantly-faster-than-inner-join
INNER JION优于Left JION的情形:https://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server
具体看情况:https://stackoverflow.com/questions/1810465/left-join-faster-or-inner-join-faster
注:如果有谁在这方面能给予更好的理解,请在下面留言指出,谢谢!
- 以不同的角度来看内连接和外连接
- 从编程角度来看IPC$空连接的利用和防范
- 以代码爱好者的角度来看AMD和CMD
- 数据库的内连接和外连接
- 内连接和外连接的区别
- 数据库的内连接和外连接
- 数据库的内连接和外连接
- 内连接和外连接的区别
- 数据库的内连接和外连接
- 内连接 和 外连接的理解
- 数据库的内连接和外连接
- 内连接和外连接的区别
- 数据库的内连接和外连接
- 数据库的内连接和外连接
- MySQL连接查询 内连接和外连接的区别
- Oracle的外连接内连接和自连接
- 内连接和外连接
- 内连接和外连接
- 机器学习算法02-逻辑回归LR
- pomelo-收藏
- mathematica的使用
- 机器学习课堂笔记3
- Linux中的环境变量
- 以不同的角度来看内连接和外连接
- JSON
- JavaWeb学习之JDBC API中常用的接口和类
- Java后台开发面试知识点总结
- Python更换Windows壁纸,问题与解决方案
- Lumia520刷安卓教程
- Swift*Cannot invoke 'jsonObject' with an argument list of type
- Spring注解
- MIPS实现冒泡排序