SQL关联查询(左联,右联,内联,外联,自关联)

article/2025/9/17 21:36:40

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

一,内连接查询

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

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

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

在这里插入图片描述

t_dept表中记录如下:

在这里插入图片描述

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

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

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

select 
e.empName,d.deptName
from t_employee e
INNER JOIN t_dept d
ON e.dept = d.id;

查询的结果如下:

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

二,左外连接查询

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

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

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,在关联查询中,做外连接查询就是左连接查询,两者是一个概念

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

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

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关键字连接左外连接和右外连接。例如:

select e.empName,d.deptNameFROM t_employee e left JOIN t_dept dON e.dept = d.id
UNION
select e.empName,d.deptNameFROM t_employee e RIGHT JOIN t_dept dON e.dept = d.id;

查询结果:
在这里插入图片描述

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

五,自连接查询

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

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

SELECT e.empName,b.empNamefrom t_employee eLEFT JOIN t_employee bON e.bossId = b.id;

查询结果:
在这里插入图片描述

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

SELECT e.empName,b.empName,b.*from t_employee eLEFT JOIN t_employee bON e.bossId = b.id;

查询结果:
在这里插入图片描述

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

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


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

相关文章

SQL中,表之间的左联和右联是什么意思

首先来看张图片: 定义: 左联:首先取出A表中所有数据,然后再加上A、B表通过关联字段key查询到的数据 右联:首先取出B表中所有数据,然后再加上A、B表通过关联字段key查询到的数据 内联:查询A、…

数据库内联、左联和外联的区别

INNER JOIN(内联):两个表a,b 相连接,取出符合连接条件的数据,数据集C LEFT JOIN(左联):先返回左表的所有行,再加上符合连接条件的匹配行,数据集A1数据集C R…

RDD、矩阵基础——3. 矩阵、向量(Breeze、BLAS)

MLlib库底层的Vector(向量)、Matrix(矩阵)运算使用了 Breeze库和BLAS库。 Breeze库提供了相应计算的接口(Linalg)。 但是在MLlib里面同时也提供了Vector和Linalg等的实现。 BLAS(线性代数运…

WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.

(WARNING : Using NumPy C-API based implementation for BLAS functions)的解决方案 情况说明问题的解决第一步:使用CMD安装类库第二步:在用户目录下放置一个文件 验证 情况说明 再训练生成对抗网络GAN时,需要Pylear…

BLAS之GEMM和GEMV

BLAS简介 BLAS全称是Basic Linear Algebra Subprograms是规定了一套低级的执行常见线性代数操作的规范。其实现经常针对特殊的机器进行优化,比较著名的BLAS库有ACML, ATLAS, MKL, OpenBLAS。许多常见的数值软件均采用兼容BLAS规范的实现库来进行线性代数计算&#…

linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文

系统是centOS6.5,机器上已有gfortran编译器 从网上搜索下载blas、cblas、lapack的tar压缩文件包 1.编译blas 先解压文件 tar xvf blas.tgz cd blas #blas的解压文件夹 gfortran -c -O3 *.f #编译生成.o执行文件 ar rv libblas.a *.o #链接所有的 .o文件&#xff0…

BLAS学习

导师突然通知要开始关于blas的讨论班,之前甚至都没听说过blas这个词,又要开始新一波的锤炼小白之路了… 1. BLAS简介 首先BLAS的全称是 Basic Linear Algebra Subprograms,即 基础线性代数子程序库,其中包含了一系列基本的线性代…

android 您的手机上未安装应用程序的解决方法

android 创建桌面快捷方式的时候设置应用名称和图标是完全没有问题,但是点击快捷方式的时候出现“您的手机上未安装应用程序“,这是快捷方式的执行目标设置错误,也就是启动Activity。有些应用的启动Activity是欢迎界面,创建快捷方…

android显示应用程序未安装,如何解决安卓系统显示应用程序未安装

我们在安装软件的时候经常会遇到应用程序未安装这个问题,尤其是在更新软件或者是从ROM提取出来的软件会出现这样的问题。那我们该如何处理这个问题呢?下面我就为大家列举几个解决这种问题的办法。 产生应用程序未安装的原因 软件签名不一致。这种情况一般…

什么是android应用程序未安装,应用程序未安装,教您安卓系统应用程序未安装怎么解决...

大家在使用智能手机的时候,尤其是安卓系统的手机,在安装应用程序,也就是App的时候,有时会提示“应用程序未安装”,相信很多使用安卓机器的朋友都曾遇到过“应用程序未安装”的问题,但是懂得解决的用户并不多…

android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题

android studio AVD模拟器安装某些app出现 “app not installed(未安装应用程序)”的问题 参考: 安装apk时出现INSTALL_FAILED_NO_MATCHING_ABIS?Android 开发之 INSTALL_FAILED 汇集表 问题说明 在为安卓模拟器中android 11版本的系统安装一些常用软…

一加5应用未安装怎么解决_应用程序未安装怎么解决 手机提示应用程序未安装解决办法...

安卓手机系统的应用繁多,丰富人们使用体验的同时,有时候还会出现种种问题,比如安装提示“应用程序未安装”,那么,遇见这个问题应该怎么处理呢?请阅读本文教程! 手机提示应用程序未安装解决办法 …

android开发下载安装app提示未安装应用

出现的情况是通过usb可以安装,然后用androidStudio运行生成的apk,发送出去,下载安装,提示未安装应用: 问题如图: 解决过程:在百度上看一些方案,不一致呢,问了问别人,通过正确的打包方式打包试一下,尝试过在AndroidStudio通过Build,然后Build…

什么是android应用程序未安装,显示“应用程序未安装”是怎么回事?程序未安装的解决图文步骤...

安卓手机安装应用的时候,有时候会莫名其妙无法安装……明明存储空间够的啊摔!经过搜索和尝试,本人找到一种可行的方法,下面分享给大家。目前看来,这是部分系统内的bug,下面,小编跟大家介绍安卓系统应用程序…

Andorid手机安装apk文件,提示应用未安装

项目场景:Andorid手机安装apk文件,提示应用未安装 通过Andorid studio打包生成的apk文件,在Andorid手机上安装时,提示应用未安装 安装apk文件到手机上,提示“应用未安装” 原因分析: 可能是手机上的Andor…

安装APK时提示“应用未安装”

情况说明:最近在做公司的移动端项目,作为新手碰到许多问题,不过也算是在披荆斩棘般前行。本来今天星期一高高兴兴来上班,结果测试姐姐跑过来说应用程序安装不上,忙活了一上午也没什么结果,最后还是靠公司前…

应用未安装

安卓删除软件之后安装失败 我在使用uniapp开发玩一个软件之后,打包,由于安卓之前是有一个旧的版本的,于是我把旧的版本删除之后,再去安装新的包,就会一直报错。 如图所示 出现这种原因是因为我在删除的时候&#xff…

手机apk应用程序未安装解决办法

用智能手机很多都会遇到“X应用程序未安装”这种情况,这是为什么呢?1、软件未卸载干净,比如是我以前手机装过手机淘宝,非正常卸载后再装可能就提示X应用程序未安装;2、下载的安装包不完整,也会导致X应用程序…

89C51单片机中的中断系统

89C51单片机中的中断系统 对于在单片机中的学习,中断系统是一难点,如果中断系统没有理解透彻,51单片机的学习就算是失败的。 首先,举例说明下什么是中断。 eg.当你在家正在吃着爆米花,看着电视,突然门铃响…

AT89C51单片机交通灯仿真图+代码

接上篇万年历,这篇博客也是记录我的实训内容,我们实训有万年历和交通灯。好了不说闲话,上正文。 不知道为何突然发现说原创审核不过,完全手写的,也不知道为何,哭 注:在评论有附本人交通灯的图噢…