Sql语句查询之内连接与外连接
文章目录
- 一、连接查询
- 1.什么是连接查询?
- 2.连接查询的分类
- 二、内连接
- 1.内连接之等值连接
- 2.内连接之非等值连接
- 3.内连接之自连接
- 三、外连接
- 1.什么是外连接,和内连接有什么区别?
一、连接查询
1.什么是连接查询?
在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。
2.连接查询的分类
根据语法出现的年代来划分:
- SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)
- SQL99(比较新的语法)
根据表的连接方式来划分:
- 内连接:inner join(inner可省略)
等值连接
非等值连接
自连接 - 外连接:outer join(outer可省略)
左外连接(左连接)(left join)
右外连接(右连接)(right join) - 全连接
在表的连接查询方面有一种现象被称为:笛卡尔积现象(笛卡尔乘积现象):
当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。
怎么避免笛卡尔积现象?当然是加条件进行过滤。
思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?
不会,次数还是56次。只不过显示的是有效记录。
二、内连接
为了方便下面的举例,我这里建了三张表
emp表
dept表
salgrade表
1.内连接之等值连接
最大特点是: 条件是等量关系。
案例:查询每个员工的部门名称,要求显示员工名和部门名。
分析思路:
因为要显示部门名称和员工名,就要用到两张表emp和dept,那么如何将这两张表联系起来呢,采用内连接的等值连接,也就是: emp.deptno = emp.deptno
SQL92:(太老,不用了)select e.ename,d.dnamefromemp e, dept dwheree.deptno = d.deptno;SQL99:(常用的)select e.ename,d.dnamefromemp ejoindept done.deptno = d.deptno;// inner可以省略的,带着inner目的是可读性好一些。select e.ename,d.dnamefromemp einner joindept done.deptno = d.deptno;
结果:
2.内连接之非等值连接
最大的特点是: 连接条件中的关系是非等量关系。
案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级。
分析思路:
因为要查工资等级、员工名和工资,也是要用到emp,salgrade两张表作内连接,如何确定工资的等级呢?工资在某一个等级范围类就是能确定相应的工资等级:emp.sal between salgrade.losal and salgrade.hisal
select e.ename,e.sal,s.grade
fromemp e
joinsalgrade s
one.sal between s.losal and s.hisal;// inner可以省略
select e.ename,e.sal,s.grade
fromemp e
inner joinsalgrade s
one.sal between s.losal and s.hisal;
结果:
3.内连接之自连接
最大的特点是: 一张表看做两张表。自己连接自己。
案例: 找出每个员工的上级领导,要求显示员工名和对应的领导名。
分析思路:
这个案列需要查员工名和员工对应的领导名,都是在emp这一张表中,所以就要用到自连接,如何确定员工和领导的关系呢:e1.mgr= e2.empno
select a.ename as '员工名',b.ename as '领导名'
fromemp a
inner joinemp b
ona.mgr = b.empno;
结果:
在这案例上是有一个小问题的,员工KING没有上级领导,而这查询出来却没有显示出来,那么如何解决这个问题呢,下面的外连接就会提到如何解决。
三、外连接
1.什么是外连接,和内连接有什么区别?
内连接:
假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。
外连接:
假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。
外连接的分类?
- 左外连接(左连接):表示左边的这张表是主表。(left join)
- 右外连接(右连接):表示右边的这张表是主表。(right join)
左连接有右连接的写法,右连接也会有对应的左连接的写法。
案例: 找出每个员工的上级领导?(所有员工必须全部查询出来。)
分析思路:
这个解题思路其实和上面那个内连接一样,只是这里要用到外连接
select a.ename '员工', b.ename '领导'
fromemp a
left joinemp b
ona.mgr = b.empno;// outer是可以省略的。
select a.ename '员工', b.ename '领导'
fromemp a
left outer joinemp b
ona.mgr = b.empno;外连接:(右外连接/右连接)
select a.ename '员工', b.ename '领导'
fromemp b
right joinemp a
ona.mgr = b.empno;// outer可以省略。
select a.ename '员工', b.ename '领导'
fromemp b
right outer joinemp a
ona.mgr = b.empno;
结果:
从结果可以看出来这个的查询结果是有king的,因为他会自动为主表匹配null值
Sql语句查询之内连接与外连接相关推荐
- SQL语句的内连接,外连接,左连接,右连接,全连接详解例子
SQL语句的内连接,外连接,左连接,右连接,全连接详解例子 1.关系:链接分为内连接,外连接:外连接又分为左连接.右连接和全连接 分别为 内连接:(Inner Join):参与表格以JOIN关键词连在 ...
- 详解SQL Server连接(内连接、外连接、交叉连接)
在查询多个表时,我们经常会用"连接查询".连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系 ...
- 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)
MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...
- Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...
- 转:SQL的内连接与外连接
参考:http://www.cuiyongjian.com/post-130.html 在oracle的SQL语句常用的连接有内连接(inner join),外连接(outer join)等,内连接又 ...
- Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...
- SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)
目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...
- oracle 连接查询(内、外连接、自连接、子查询)
内连接: 一般使用inner join来实现.其中inner关键字可以省略 同时必须在from子句之后定义一个on子句,用来指定连接条件 外连接 1 左外连接:关键字为left outer join或 ...
- MySQL 基础 -- 多表关系(一对一、1对多(多对一)、多对多)、多表查询(内连接、外连接、自连接、子查询(嵌套查询)、联合查询 union)、笛卡儿积
文章目录 1. 多表关系 1.1 一对多 1.2 多对多 1.3 一对一 2. 多表查询 2.1 数据准备 2.2 概述 2.3 笛卡尔积 2.4 多表查询分类 3. 内连接 3.1 示例1:查询每一 ...
最新文章
- java竞拍系统代码,网上拍卖系统的设计与实现(源代码及全套资料).doc
- Django框架(5.django中模型类建立关系和多表关系查询)
- android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书
- node那点事(二) -- Writable streams(可写流)、自定义流
- python去重复元素_Python实现去除列表中重复元素的方法总结【7种方法】
- 最优化学习笔记(十八)——拟牛顿法(4)DFP算法
- css3 如何动态画一条直线_素描基础学习课:素描长直线的画法!把直线画直的关键!...
- 攀达计算机usb控制器,[如何用注册表打开被屏蔽的USB插口.docx
- Java的新项目学成在线笔记-day7(一)
- 一张浓缩大学生活的顶级报(转载)
- 天正的计算机快捷命令大全,新手必看-史上最全CAD快捷键大全
- BETTER FINE-TUNING BY REDUCING REPRESENTATIONAL COLLAPSE翻译
- 计算机毕业设计Java基于的药品销售系统(源码+系统+mysql数据库+lW文档)
- PTA(每日一题)7-59 武林盟主
- 如何修改Win10的Windows Terminal的背景(带图文)
- Nginx基本使用方法
- 极大似然估计原理详细说明
- C++数论之Legendre定理的运用:因子和阶乘
- overlay文件系统解析
- 七夕祸害情侣终极宝典