Sql语句查询之内连接与外连接

article/2025/9/26 3:13:05

文章目录

  • 一、连接查询
    • 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值


http://chatgpt.dhexx.cn/article/LLEC1h3w.shtml

相关文章

理解内连接中的隐式内连接、显式内连接和外连接中的左外连接、右外连接

一、多表查询 二、在 MySQL 中创建 book 和 actor 两张表 1 创建 book 表及添加数据 CREATE TABLE book (id INT PRIMARY KEY NOT NULL AUTO_INCREMEN,bookName VARCHAR (60),author VARCHAR (60) ); INSERT INTO book (id, bookName, author) VALUES(1,水浒传,施耐庵); INS…

SQL内连接与外连接

SQL内连接(INNER JOIN) 返回两张表中符合连接条件的数据行 内连接是从结果表中删除与被连接表中未匹配行的所有行,所以内连接可能会丢失信息 写法一: 语法:SELECT * FROM 表1 INNER JOIN 表2 ON 条件 eg:查询Student 表中学生的成…

SQL内连接、左连接、右连接的区别

SQL内连接、左连接、右连接的区别 前言:目前研究生已经毕业,刚刚找到了一份BA数据分析师的工作。目前的工作内容主要是指标的理解和使用SQL将代码写出来。在这里经常用到内连接(inner) join和左连接 left(outer&#…

【MySQL】MySQL内连接和外连接详细总结

目录 多表查询的分类3:内连接VS外连接(重难点)1. 内连接2.外连接3. SQL99语法实现多表查询3.1 SQL99实现内连接3.2 SQL99语法实现外连接3.2.1 左外连接3.2.2 右外连接3.2.3 满外连接 4.总结:七种SQL JOINS的实现4.1 内连接4.2 左外连接4.3 右外连接4.4 第…

数据库内连接和外连接

内连接 内连接使用关键字INNER JOIN 也可以简写成JOIN;内连接只返回两个表中匹配的数据。 SELECT a.id, a.name,b.price FROM table1 AS a INNER JOIN table2 AS b ON a.id b.id; 外连接 左外连接 用关键字LEFT OUTER JOIN 表示 也可以简写为LFFT JOIN。 以左边的…

oracle内连接和外连接

一、表的连接 1.内连接 (inner join) 做内连接得到的是a和b的关联关系的列同时存在的进行连接,内连后a和b关联列相同的a中数据和b中数据合在一起形成新的表数据。 内连接只有满足条件的数据才会显示 -- a 表和 b 表做内连接 -- a 表中的…

mysql内外三种连接,Mysql的内外连接方式

Mysql有很多种连接方式,其中有两大主要连接方式:内连接和外连接,其中外连接又可以分为左外连接和右外连接; 对于这三种连接方式,如何判断何时使用一直困扰着我,这里就做一下自己的总结: 1、内连…

SQL内连接

开发工具与关键技术: sql 撰写时间:2022/3/27 内连接(可多个表连接):两表合并为1表 内连接格式1: select 字段 from 表1,表2 where 连接条件 或者 : select 字段 from 表1…

MySql 内连接

三.内连接 内链接:两张或者多张表中按给定的连接条件查询满足条件的结果 -- 1.语法: select 查询内容 -- from table1,table2 where 关联条件 列如: 查询雇员信息级雇员所在部门信息 select * from emp,dept where emp.deptnodept.deptno 使用别名: 列如…

mysql内连接

文章目录 多表连接一、内连接初识(内连接两张表)二、内连接多张表三、为表起别名 题型综合 多表连接 多表连接的基础,要连接的表必须具有相同意义的字段(有关系的表); 多表连接什么时候用:顾名…

ClickHouse内连接

A内连接B>S2区域 SELECT date, ts, country, province, city,ye_no FROM (SELECT date, ts, country, province, city,0 AS yes_no FROM DBa.tba WHERE (date today()-1) ) ALL INNER JOIN (SELECT date, ts, country, province, city FROM DBb.tbb WHERE (date tod…

内连接,左连接,右连接作用及区别(数据库相关九)

我们来看个例子: 内连接就是普通的查询,例如 1.加inner join的: SELECT S.SName,C.CourseID,C.Grade From Sc AS C INNER JOIN Students AS S ON C.StudentID S.SNo 2.不加inner join的 SELECT Students.SName,…

知识点 左连接、右连接、内连接

为什么使用 这些X连接? 答:因为 我们想看到更多维度的数据,原本这些数据其实应该在一个表的,但为了避免数据冗余、面向对象(一张表一般对应一个实体类)等因素,我们把这些数据根据某个规则进行拆…

inner join 和outer join

内连接(INNER JOIN) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据。也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表…

SQL连接表(内连接、左连接、右连接、交叉连接、全外连接)

分享一些自己的连表总结 什么是连接表? 多表查询原理:将多个表通过笛卡尔积形成一个虚表,再根据查询条件筛选符合条件的数据。 在关系数据库中,数据分布在多个逻辑表中。 要获得完整有意义的数据集,需要使用连接来查询…

内连接与外连接(全网最详细)

目录 前言 一、内连接 二、外连接 1.左外连接 2.右外连接 3.满外连接 三、UNION的使用 四、7种SQL JOINS的实现 前言 在学习内连接与外连接之前,你不妨思考为什么要引入这两种连接方式,带着问题去学习,更有助于我们对知识的学习。 其…

LDF explorer使用问题记录

本文章并不是使用教程! 问题1:信号必须要设置“Unit”值 当信号时枚举值或其他非物理信号,我们不为其设置Unit属性时,通过NCF工具生成源文件时,会报错,如下图所示: 通过文本方式打开ldf文件…

SqlServer如何导入mdf、ldf文件

1、sqlserver数据库中可以直接拷贝mdf和ldf文件对sqlserver数据库中的数据进行备份,然后通过数据库管理软件加载mdf和ldf文件加载数据库数据。 2、如果拷贝mdf和ldf文件失败时可以先在服务中停止SQL Server(MSSQLSERVER)服务 3、如下两种方法亲证都可行 第一种方法…

SqlServer2008Ldf文件过大处理

ldf文件是数据库的操作日志文件,用于数据库的数据恢复; 缩小体积的方法: 第一步:设置数据库成简单模式,在master下执行 ALTER DATABASE databasename SET RECOVERY SIMPLE; 第二步:缩小数据库体积到1024MB …

SqlServer怎么导入mdf、ldf文件

第一种方法: 1.打开SQL Server,写好登录名和密码点击连接. 2.打开数据库,右键某一个数据库,选择“新建查询(Q)”。 3.再代码界面输入如下代码,点击F5键或者点击运行按钮即可。 代码如下: EXEC…