基本功:SQL 多表联合查询的几种方式

多测师肖sir_高级金牌讲师_数据库之多表语句(8.6) 什么是多表关联查询 ? 有时候查询的数据需要从2个表或者更多的表中提取,这个时候就需要使用多表关联查询多表查询分 主要讲:1.内连接 2.左连接 3.右连接 4、全外连接 先建表: dept表 emp表: 关联字段是dept1和dept2 1、笛卡尔积查询 两张表相乘得到的结果:比如,左边有m条记录,右边有n条记录,查询出来的结果就是m*n,这种查询包含大量的错误结果,通常不会使用这种查询 select * from 表1,表2 ; 格式:select * from dept,emp ; 2、内连接 (普通 阅读详情

点击关注公众号,实用技术文章及时了解ac17b7f2c6936b549aca2ec92891f3f5.png

来源:blog.youkuaiyun.com/zt15732625878/article

/details/79074123

前言

最近在项目中用到连接查询,连接查询是关系数据中最主要的查询,包括内连接、外连接等。通过连接运算符可以实现多个表查询。下面来复习一下。

正文

连接查询主要分为三种:内连接、外连接、交叉连接。

内连接

使用比较运算符(包括=、>、<、<>、>=、<=、!> 和!<)进行表间的比较操作,查询与连接条件相匹配的数据。根据所使用的比较方式不同,内连接分为等值连接、自然连接和自连接三种。

关键字 INNER JOIN

2a0ff01bc9198b0a5d5eb444711c2759.png
等值连接/相等连接

使用”=”关系将表连接起来的查询,其查询结果中列出被连接表中的所有列,包括其中的重复列

SELECT
    PM_ACT_JOB_RLS.*, PM_ACT_RLS.*
FROM
    PM_ACT_JOB_RLS
INNER JOIN PM_ACT_RLS ON PM_ACT_JOB_RLS.RlsPK = PM_ACT_RLS.RlsPK
d61ef36e9ed07ad7203f875ebe18021f.png
自然连接

等值连接中去掉重复的列,形成的连接

SELECT
    PM_ACT_JOB_RLS.JobPK,
    PM_ACT_RLS.RlsPK,
    RlsName
FROM
    PM_ACT_JOB_RLS
INNER JOIN PM_ACT_RLS ON PM_ACT_JOB_RLS.RlsPK = PM_ACT_RLS.RlsPK
94ba87863901278b2e7343998d3a2abe.png
自连接

如果在一个连接查询中,设计到的两个表都是同一个表,这种查询称为自连接查询。

--c1、c2逻辑上是两张表,物理上是一张表
SELECT
    c1.CategoryID,
    c1.CategoryName
FROM
    [dbo].[Category] c1
INNER JOIN [dbo].[Category] c2 ON c1.[CategoryID] = c2.[ParentID]

外连接

内连接只返回满足连接条件的数据行,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。外连接分为左外连接、右外链接、全外连接三种。

左外连接

返回左表中的所有行,如果左表中行在右表中没有匹配行,则在相关联的结果集中右表的所选择字段均为NULL。

关键字 LEFT [OUTER] JOIN

7cb58f83d0891ceb0c8e5a33b85b3f8d.png
--左外连接  --1679条数据
SELECT
    me.*,
    mo.*
FROM
    MM_LOTS_EXT AS me
LEFT OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber
c75d528ad1c74787a9e746e8e30dac34.png
右外连接

返回右表中的所有行,如果右表中行在左表中没有匹配行,则在左表中相关字段返回NULL值。

关键字     RIGHT [OUTER] JOIN

--右外连接  --209条数据
SELECT
    me.*,
    mo.*
FROM
    MM_LOTS_EXT AS me
RIGHT OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber
21ba81ae5e72090fb7dce092fca8ffd4.png
全外连接/完全外连接

返回两个连接中所有的记录数据,是左外连接和右外连接的并集。

关键字     FULL [OUTER] JOIN

--全外连接  --1816条数据 
SELECT
    me.*,
    mo.*
FROM
    MM_LOTS_EXT AS me
FULL OUTER JOIN MM_LOT_OPERATIONS AS mo ON me.LotID = mo.SerialNumber
交叉连接/笛卡尔积

两个表做笛卡尔积,得到的结果集的行数是两个表的行数的乘积。

关键字      CROSS JOIN

--笛卡尔积 (cross join后加条件只能用where,不能用on)  --45条数据(9*5)
SELECT
    *
FROM
    PM_ACT_JOB_RLS
CROSS JOIN PM_ACT_RLS

注意:带有where条件的子句,往往会先生成两个表行数乘积的数据表,然后从根据where条件从中选择。

当数据量比价大的时候,笛卡尔积操作会很消耗数据库的性能

总结

连接查询是关系型数据库中的一个重要标志,这次和大家一起复习多表查询的几种操作,希望给您带来帮助!


 
如有文章对你有帮助,
“在看”和转发是对我最大的支持!

暂时开放微信大号,好友位不多,需要的小伙伴们可以加,朋友圈和交流群里会发一些学习资料、个人见解、白嫖课程等等。

扫描下方二维码即可加我微信啦,2022,抱团取暖,一起牛逼。

28b5f2a3b0f8aff5a7c44e5b975ba7b6.png

染色体外环状DNA:肿瘤研究新方向 染色体外环状DNA(ecDNA)是癌症中活化原癌基因扩增的主要方式。区别于常染色体,这类生物大分子主要以环状的形式存在于细胞核当中,长度分布在103-106数量级,无中心粒。ecDNA序列中包含一个或者多个基因与调控元件,结构开放,转录活性强,相比于在棒状染色体结构基因,ecDNA的生物功能活性更强。癌症中,成环的基因区域拷贝数往往增高,而超过一半的高拷贝数事件是ecDNA驱动生成。... 阅读详情

相关推荐

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走 同步的比较简单,直接在coze 工作流里面就可以搞定了,也不用写代码之类的

AI懒虫 2358

Oracle SQL多表查询

Oracle SQL多表查询 开发工具与关键技术:Oracle sql*plus PLSQL Developer 作者:王福驰 撰写时间:2019年4月01日 多表查询要注意的笛卡尔积和叉集,他们都是一样的。 笛卡尔积:它主要是因为省略连接条件、连接条件无效、所有表中的所有行互相连接,所产生,所以我们为了避免笛卡尔积为他加上有效where语句连接条件。 叉集:使用CROSS JOIN 子句使连接...

weixin_44548814的博客 563

ABAP传输自定义IDOC实例

首先确定出站方和入站方,本例中我使用150作为发送方将200作为接收方。 发送端系统配置 进入tcode-SALE,点击定义逻辑系统,这里我定义D01CLNT150为发送端, D01CLNT200为接收端 2,将逻辑系统分配给对应的client 3,进入tcode-WE31,创建IDOC开发段(segment)这里可以按照实际需求创建想要传输的结构,为求简单我创建了ZKNA1并选取了几个客户主数据的字段作为示例 4,进入tcode-WE30,创建Idoc Ty...

Nathan的博客 4078

PLSQL Developer多 表 查 询

多 表 查 询 表 查 询就从多个表中获取数据,那么我们就会产生笛卡尔集, 笛卡尔集会在这种条件下产生:1. 省略连接条件2. 连接条件无效3. 所有表中的所有行互相连接,同时为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。 Oracle 连接 在在 WHERE 子句中...

jiangqingzhihe的博客 5472

高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)

是一款基于微软windows操作系统的多传感器成像工具,用于处理和分析高光谱图像。它是一个模块化的系统,由一个基本的引擎,一个图形用户界面,一个化学计量工具箱和可选的用户提供的模块组成。它支持最重要的光谱成像技术,如UV/Vis、红外、拉曼、太赫兹、光发射/吸收和质谱。除此之外,还允许用户将高光谱图像与物理属性图和传统高分辨率彩色照片合并在一起 链接:https://pan.baidu.com/s/1ruQ5YSh5_ZS9wx_V3Q5Oow 提取码:qdx0 ...

业余程序员小徐的博客 8072

DRAM架构演进与HBM技术在高性能计算中的应用

DRAM(动态随机存取存储器)是现代计算系统中关键的内存技术,其架构优化直接影响数据供给能力。随着AI训练和科学计算等数据密集型负载的普及,传统DDR架构面临带宽墙、能效比和访问粒度等挑战。HBM(高带宽内存)通过3D堆叠技术(如TSV硅通孔)和异构集成(如PIM存内计算)显著提升了带宽和能效比。这些技术在高性能计算、AI推理和大模型训练等场景中展现出巨大潜力,例如HBM3的带宽可达819GB/s,能效比低至0.95pJ/b。未来,DRAM技术将继续向更高密度、更低功耗和更智能的内存计算方向发展。

weixin_35757191的博客 400

ORACLE SQL 多表查询

ORACLE SQL 多表查询 开发工具与关键技术:Oracle sql*plus PLSQL Developer SQL 作者:张启翔 撰写时间:2019年05月08日 说明:顾名思义,多表就是多个表连接起来进行查询,但是连表的有一个是固定的条件,就是要有相同的列,相同的列都是会有相同的类型以及相同的数据(主键表与外键表的关系) 个人理解词义:SELECT查询,FORM来着 ,WHERE...

小白学编程 1240

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4114

数据库之多表联合查询

一、知识点名称 多表联合查询(一对多数据显示、多对多数据展示) 二、知识点业务场景 一对多关联: 学生和成绩的关系 用户与订单的关系 企业与员工的关系 用户与银行卡的关系 多对多关联: 学生和选课的关系 订单和商品的关系 用...

weixin_41726650的博客 1万+

R数据分析:广义估计方程式GEE的做法和解释

好久没有更新文章了,因为同学们咨询的问题有点多,另一个原因就是自己实在太懒。。。。 今天继续给大家写广义估计方程式GEE。 In statistics, a generalized estimating equation (GEE) is used to estimate the parameters of a generalized linear model with a possible unknown correlation between outcomes. 上面的英文解释告诉我们,当我们

Codewar的博客 1万+

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1434

SQL 多表查询:数据整合与分析的强大工具

在关系型数据库中,数据通常被组织在多个表中。这种表的分离有助于减少冗余并提高数据的管理效率。然而,在实际应用中,往往需要对多个表中的数据进行整合查询,来获得更完整的信息。这时候,多表查询(Join)就显得至关重要。本文将详细介绍 SQL 中常见的多表查询类型,并通过实际示例帮助大家理解如何高效地利用这些查询方法。

平凡程序猿~的博客 4376

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MySQL数据库中多表联合查询

多表联合查询的理论依据:笛卡尔积 通过笛卡尔乘积,把两个或者多个表变为一个大表,里面包含了有效的,无效的记录(需要加条件进行过滤数据) -- 总结 1、多表联合查询,你想要的数据在多个表中,得从多个表中查询获取,但是必须添加条件过滤, 如果不加条件,会出现大量错误数据。 2、条件,连接条件:先分析表跟表之间的关系,分析数据和数据之间的关系,把关系写成 SQL 语句: 多数情况下,表和表之间的关系是主外键关系,但是有特殊,有例外。 3、一个连接条件,只能连2个表,如果要连接N...

weixin_67792584的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MyBatis 多表联合查询及优化

序 这篇文章我打算来简单的谈谈 mybatis 的多表联合查询。起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复。但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误

紫羽风的博客 16万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Oracle多表联合查询

—多表联合查询: –当需要获取的数据分布在多张中,考虑使用联合查询 –SQL92方式 –SQL99方式 –SQL92方式 –笛卡尔积:将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积。 –结果的数量为所有表的数量的乘积。 select * from emp,dept where emp.deptno=dept.deptno --等值连接筛选 –概念:先做表的笛卡尔积,然后...

大白的博客 4975

SQL查询语句:多表联合查询和存储过程

1.多表联合查询:• INNER JOIN :返回两个表中都有的匹配数据。• LOFT JOIN :返回左表中的所有数据,即使没有匹配的右表数据。• FULL JOIN : 返回两个表的所有数据(MySQL中通过UNION实现)。2.存储过程:• 存储过程可以将复杂的业务逻辑封装成科重复调用的程序单元。• 可以接受输入参数并返回结果。• 存储过程适用于数据处理、复杂查询或批量更新操作。

qq_73220363的博客 2571

SQL多表查询

概述:从多张表中进行数据查询例如:有以下两张表dept和emp:多表查询分类1、连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据(用的更多)右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名2、子查询。

weixin_45951205的博客 6287

【SQL】SQL语句多表联合查询

螓首蛾眉,靡颜腻理,明眸皓齿,冰肌玉骨 静待佳音

1万+

oracle多表联合查询SQL92方式&SQL99方式&三表联合查询

多表联合查询: --当需要获取的数据分布在多张中,考虑使用联合查询 --SQL92方式 --SQL99方式 SQL92方式 --笛卡尔积:将多个表的数据进行一一对应,所得到结果为多表的笛卡尔积。 --结果的数量为所有表的数量的乘积。 select * from emp,dept where emp.deptno=dept.dep...

weixin_44771312的博客 1179

Mybatis多表联合查询,嵌套查询,动态SQL

Mybatis多表联合查询,嵌套查询,动态SQL Mybatis多表联合查询 一对一 一对一查询:通过一方关联查询出另外一方的关系数据 创建数据库和相关数据表 创建需要关联查询的实体类,里面包含相关的属性 //丈夫查妻子 public class Husband { private Integer id; private String name; private Wife wife; } public class Wife { private

debugEDM的博客 9374

SQL--多表查询

1). 删除之前 emp, dept表的测试数据2). 执行如下脚本,创建emp表与dept表并插入测试数据-- 创建dept表,并插入数据name varchar(50) not null comment '部门名称') comment '部门表';VALUES (1, '研发部'),(2, '市场部'),(3, '财务部'),(4,'销售部'),(5, '总经办'),(6, '人事部');-- 创建emp表,并插入数据。

Sakura_j_h_的博客 4255

MySQL 多表联合查询

本文系统介绍了MySQL多表联合查询的5种核心方式:交叉连接(笛卡尔积)、内连接、外连接、分组查询和子查询,重点讲解了每种方式的语法格式和实际应用场景。同时详细说明了数据库备份与恢复的完整流程,包括mysqldump工具的使用方法和注意事项。通过"学生信息表"和"课程表"的实战案例,演示了如何通过关联条件提取整合数据,以及如何避免无效数据的产生。文章还提供了完整的SQL创建表和插入数据的脚本,便于读者实际操作和验证查询效果。

Sadsvit的博客 1382

多表联合查询:基于注解SQL

作者:汤圆 个人博客:javalover.cc 前言 背景:Spring Boot + MybatisPlus 用MybatisPlus就是为了不写SQL,用起来方便; 但是如果需要多表联合查询,还是需要手写SQL(不过GitHub上也是有一些开源的库,可以不写SQL) 本节介绍的还是通用的写法,基于注解SQL实现的多表联合查询 简介 大概流程就是 先把要联合查询的参数封装到一个类里进行返回 - 结果类 再在mapper中注入SQL查询语句 - @Select 最后在service中拼接查询条件 - Qu

汤圆学Java 998
上一篇: ​LeetCode刷题实战580:统计各专业学生人数
下一篇: 最新 IDEA 2022.1 版本即将发布,骚操作真不少...
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值