文章目录

  • 一、连接查询
    • 1.什么是连接查询?
    • 2.连接查询的分类
  • 二、内连接
    • 1.内连接之等值连接
    • 2.内连接之非等值连接
    • 3.内连接之自连接
  • 三、外连接
    • 1.什么是外连接,和内连接有什么区别?

一、连接查询

1.什么是连接查询?

在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。在实际开发中,一般一个业务都会对应多张表,比如:学生和班级,起码两张表。

2.连接查询的分类

根据语法出现的年代来划分:

  1. SQL92(一些老的DBA可能还在使用这种语法。DBA:DataBase Administrator,数据库管理员)
  2. SQL99(比较新的语法)

根据表的连接方式来划分:

  1. 内连接:inner join(inner可省略)
    等值连接
    非等值连接
    自连接
  2. 外连接:outer join(outer可省略)
    左外连接(左连接)(left join)
    右外连接(右连接)(right join)
  3. 全连接

在表的连接查询方面有一种现象被称为:笛卡尔积现象(笛卡尔乘积现象):
         当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。

怎么避免笛卡尔积现象?当然是加条件进行过滤。
思考:避免了笛卡尔积现象,会减少记录的匹配次数吗?
不会,次数还是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与之匹配。

外连接的分类?

  1. 左外连接(左连接):表示左边的这张表是主表。(left join)
  2. 右外连接(右连接):表示右边的这张表是主表。(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语句查询之内连接与外连接相关推荐

  1. SQL语句的内连接,外连接,左连接,右连接,全连接详解例子

    SQL语句的内连接,外连接,左连接,右连接,全连接详解例子 1.关系:链接分为内连接,外连接:外连接又分为左连接.右连接和全连接 分别为 内连接:(Inner Join):参与表格以JOIN关键词连在 ...

  2. 详解SQL Server连接(内连接、外连接、交叉连接)

    在查询多个表时,我们经常会用"连接查询".连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系 ...

  3. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  4. Mysql的多表查询(表添加,多表查询练习:笛卡尔积、内连接、外连接、子查询、UNION组合查询)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.表的创建 ...

  5. 转:SQL的内连接与外连接

    参考:http://www.cuiyongjian.com/post-130.html 在oracle的SQL语句常用的连接有内连接(inner join),外连接(outer join)等,内连接又 ...

  6. Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例

    Oracle数据库:oracle内连接inner join on,多表查询各种自链接.内连接.外连接的练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得 ...

  7. SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)

    目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...

  8. oracle 连接查询(内、外连接、自连接、子查询)

    内连接: 一般使用inner join来实现.其中inner关键字可以省略 同时必须在from子句之后定义一个on子句,用来指定连接条件 外连接 1 左外连接:关键字为left outer join或 ...

  9. MySQL 基础 -- 多表关系(一对一、1对多(多对一)、多对多)、多表查询(内连接、外连接、自连接、子查询(嵌套查询)、联合查询 union)、笛卡儿积

    文章目录 1. 多表关系 1.1 一对多 1.2 多对多 1.3 一对一 2. 多表查询 2.1 数据准备 2.2 概述 2.3 笛卡尔积 2.4 多表查询分类 3. 内连接 3.1 示例1:查询每一 ...

最新文章

  1. java竞拍系统代码,网上拍卖系统的设计与实现(源代码及全套资料).doc
  2. Django框架(5.django中模型类建立关系和多表关系查询)
  3. android自验签名证书,没有以前的互联网连接,无法验证Android自签名证书
  4. node那点事(二) -- Writable streams(可写流)、自定义流
  5. python去重复元素_Python实现去除列表中重复元素的方法总结【7种方法】
  6. 最优化学习笔记(十八)——拟牛顿法(4)DFP算法
  7. css3 如何动态画一条直线_素描基础学习课:素描长直线的画法!把直线画直的关键!...
  8. 攀达计算机usb控制器,[如何用注册表打开被屏蔽的USB插口.docx
  9. Java的新项目学成在线笔记-day7(一)
  10. 一张浓缩大学生活的顶级报(转载)
  11. 天正的计算机快捷命令大全,新手必看-史上最全CAD快捷键大全
  12. BETTER FINE-TUNING BY REDUCING REPRESENTATIONAL COLLAPSE翻译
  13. 计算机毕业设计Java基于的药品销售系统(源码+系统+mysql数据库+lW文档)
  14. PTA(每日一题)7-59 武林盟主
  15. 如何修改Win10的Windows Terminal的背景(带图文)
  16. Nginx基本使用方法
  17. 极大似然估计原理详细说明
  18. C++数论之Legendre定理的运用:因子和阶乘
  19. overlay文件系统解析
  20. 七夕祸害情侣终极宝典

热门文章

  1. Docker容器总结
  2. MybatisPlus自动填充(建立、更新时间)
  3. 支付宝“刷脸支付”韩国遇冷 真相让人笑出眼泪
  4. NAO机器人——运动控制(1)
  5. 酷睿i9-13900K性能出炉Steam游戏开发首选驰网独家i9-13900K服务器水冷定制高主频游戏服务器
  6. NAO机器人的Walk功能
  7. 南京计算机英语培训,南京英语培训班
  8. 计算机英语单词练习二
  9. 计算机辅助程序英语,计算机辅助学习英语单词分组的设计
  10. 佳能镜头EOS系统EF协议逆向工程(一)