前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mysql中的关联查询(内连接,外连接,自连接)

Mysql中的关联查询(内连接,外连接,自连接)

作者头像
全栈程序员站长
发布于 2022-09-01 08:08:43
发布于 2022-09-01 08:08:43
4.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询

一,内连接查询

是指所有查询出的结果都是能够在连接的表中有对应记录的。

以t_employee(员工表)和t_dept(部门表)为例:

t_employee表中的记录如下:dept代表该员工所在的部门

t_dept表中记录如下:

可以发现,其中人力资源部里没有员工(这里只是举例,可能与实际不符,但主要在于逻辑关系),而赵七没有对应的部门,现在想要查询出员工姓名以及其对应的部门名称:

此时,就要使用内连接查询,关键字(inner join)

在这里说一下关联查询sql编写的思路,1,先确定所连接的表,2,再确定所要查询的字段,3,确定连接条件以及连接方式

代码语言:javascript
代码运行次数:0
运行
复制
select 
e.empName,d.deptName
from t_employee e
INNER JOIN t_dept d
ON e.dept = d.id;

查询的结果如下:

其中,没有部门的人员和部门没有员工的部门都没有被查询出来,这就是内连接的特点,只查询在连接的表中能够有对应的记录,其中e.dept = d.id是连接条件

二,左外连接查询

是指以左边的表的数据为基准,去匹配右边的表的数据,如果匹配到就显示,匹配不到就显示为null。例如:

查询所有员工姓名以及他所在的部门名称:在内连接中赵七没有被查出来,因为他没有对应的部门,现在想要把赵七也查出来,就要使用左外连接:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT e.empName,d.deptName
from t_employee e
LEFT OUTER JOIN t_dept d 
on d.id = e.dept;

在这里,t_employee就是左表,也就是基准表,用基准表的数据去匹配右表的数据,所以左表的记录是全部会查询出来的,如果右表没有记录对应的话就显示null

查询结果:

关键字是left outer join,等效于left join,在关联查询中,做外连接查询就是左连接查询,两者是一个概念

三,右外连接是同理的,只是基准表的位置变化了而已

比如:查询所有的部门和对应的员工:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT e.empName,d.deptName
from t_employee e
RIGHT OUTER JOIN t_dept d 
on d.id = e.dept;

这里只是把left修改成了right,但是基准表变化了,是以右表的数据去匹配左表,所以左外连接能做到的查询,右外连接也能做到 查询结果:

四,全外连接

顾名思义,把两张表的字段都查出来,没有对应的值就显示null,但是注意:mysql是没有全外连接的(mysql中没有full outer join关键字),想要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接。例如:

代码语言:javascript
代码运行次数:0
运行
复制
select e.empName,d.deptName
     FROM t_employee e 
     left JOIN t_dept d
     ON e.dept = d.id
UNION
select e.empName,d.deptName
     FROM t_employee e 
     RIGHT JOIN t_dept d
     ON e.dept = d.id;

查询结果:

如果在oracle中,直接就使用full outer join关键字连接两表就行了

五,自连接查询

自连接查询就是当前表与自身的连接查询,关键点在于虚拟化出一张表给一个别名

例如:查询员工以及他的上司的名称,由于上司也是员工,所以这里虚拟化出一张上司表

代码语言:javascript
代码运行次数:0
运行
复制
SELECT e.empName,b.empName
     from t_employee e
     LEFT JOIN t_employee b
     ON e.bossId = b.id;

查询结果:

在这里,b表是虚拟化出的表,我们可以通过查询了解b表的记录:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT e.empName,b.empName,b.*
     from t_employee e
     LEFT JOIN t_employee b
     ON e.bossId = b.id;

查询结果:

后面的四个字段就是虚拟化出的b表的所有记录,但看这四个字段其实就是记录所有是上司的员工的信息

所以,自连接查询一般用作表中的某个字段的值是引用另一个字段的值,比如权限表中,父权限也属于权限。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141866.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
MYSQL基础操作之数据约束与关联查询--Java学习网
1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值。 默认值的字段允许为空。 对默认值字段也可以插入null。
用户1289394
2021/07/09
4480
【MySQL】:深入解析多表查询(上)
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系。
屿小夏
2024/04/10
2840
【MySQL】:深入解析多表查询(上)
mysql[0x01]--基础知识
上大学时,导论老师教的是用SQL Server,开发老师教的是用MySQL,Oracle也在课程体系之内,自学用的是Redis和Mongodb,以上构成了前段时间我对数据库我接触过的并且使用过然而也只是个crud boy的全部认知。在没听过丁奇老师的《MySQL实战45讲》之前,我觉得MySQL CURD写的6,然后事务啥的搞搞懂就还行吧。看了他的课后,受益良多,遂决定重新梳理下MySQL的知识点,这也坚定了我离开学校后,每个月花点钱投资在学习上的决心,付出就会有回报。
江涛学编程
2020/06/19
6450
多表查询与7种JOINS的实现
前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
timerring
2023/02/16
1.4K0
多表查询与7种JOINS的实现
数据库-MySQL-基础(10)-内连接,外连接,自连接
最开始写代码的时候,要先写 select * from .....,然后写完之后,通过取别名就可以把前面 * 根据自己所需要查询内容替换掉,注意 * 代表显示所有字段
莫浅子
2022/11/18
2K0
数据库-MySQL-基础(10)-内连接,外连接,自连接
【MySQL】学习连接查询和案例演示
ImAileen
2024/02/22
1610
【MySQL】学习连接查询和案例演示
【说站】mysql右外连接查询的介绍
1、以join右表为主表,显示右表的所有数据,根据条件查询join左表的数据。如果满意,显示。如果不满意,显示在null。
很酷的站长
2022/11/24
6580
【说站】mysql右外连接查询的介绍
MySQL数据库基础学习(二十九)
由于需求中提到,要查询emp的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。
用户1289394
2023/01/05
2510
MySQL数据库基础学习(二十九)
深圳软件测试学习:【数据库】-【oracle】-连接查询--千锋
Select * from emp e,dept d where e.deptno=d.deptno;
深圳java培训技术
2019/11/05
7440
深圳软件测试学习:【数据库】-【oracle】-连接查询--千锋
MySQL 表连接(内连接与外连接)
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
猫咪-9527
2025/03/28
2710
MySQL 表连接(内连接与外连接)
【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
YY的秘密代码小屋
2024/04/03
1.8K0
【MySQL】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
Hibernate【查询详解、连接池、逆向工程】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式….到目前为止,我们都是使用一些简单的主键查询阿…使用HQL查询所有的数据….本博文主要讲解Hibernate的查询操
Java3y
2018/03/15
1.3K0
Hibernate【查询详解、连接池、逆向工程】
MySQL基础之多表查询
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
叫我阿杰好了
2022/11/07
6510
MySQL基础之多表查询
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 。
.29.
2023/11/16
8390
⑧【MySQL】数据库查询:内连接、外连接、自连接、子查询、多表查询
mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)
前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
一个风轻云淡
2022/11/13
8120
mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)
【MySQL】表的内外连接和视图
内连接实际上就是利用 where 子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
YoungMLet
2024/03/01
3620
【MySQL】表的内外连接和视图
多表连接查询
连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。
星哥玩云
2022/09/15
1.6K0
多表连接查询
第36次文章:数据库查询语句
由于在sql语法中,仅仅支持内连接,所以我们对sql92语法标准的介绍仅限于内连接的三种方式。
鹏-程-万-里
2019/09/27
1.8K0
第36次文章:数据库查询语句
MySQL基础
SQL:操作关系型数据库的编程语言,定义了一套操作 关系型数据库统一标准,英文:Structured Query Language (SQL)。
roydonGuo
2023/03/08
2K0
MySQL基础
MySQL怎样进行多表设计与查询?什么是MySQL的事务和索引?
前面说完了数据库的DDL,DML和DQL,今天主要来看一下MySQL的多表设计与查询。本篇将带你快速了解MySQL的多表设计与查询,以及了解MySQL事务和索引相关的内容。
reload
2024/04/10
2880
MySQL怎样进行多表设计与查询?什么是MySQL的事务和索引?
推荐阅读
相关推荐
MYSQL基础操作之数据约束与关联查询--Java学习网
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验