MySQL学习笔记8-----多表查询,又难又重要

MySQL 高级多表查询 MySQL多表查询 添加练习表 -- 用户表(user) CREATE TABLE `user`( `id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户id(主键)', `username` VARCHAR(50) COMMENT '用户姓名', `age` CHAR(3) COMMENT '用户年龄' ); -- 订单表(orders) CRE... 阅读详情

=========== 【康师傅Day6】===========

 

目录

1.引言

2. 实现多表查询 

2.1 出现笛卡尔积的错误

 2.2 多表查询的正确打开方式

 2.3 傲娇的表的别名,增强复杂语句可读性

2.4 3+个表手拉手

2.5 多表查询分类 

2.5.1 等值连接&非等值连接,用符号区分

2.5.2 自连接&非自连接

2.5.3 内连接&外连接

重要Max!7种SQL JOINS的实现!

 3. SQL99语法新特性

3.1 自然连接 NATURAL JOIN,经典白学

 3.2 USING 简化关联条件


1.引言

多表查询,也称关联查询,指两个或更多个表一起完成一次查询工作

前提条件:这些一起查询的表之间室友关系的,他们之间一定有关联字段,这些关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表之间靠 “部门编号” 进行关联。

这个例子中用到三个表:employees,departments,location

先用 DESC 查询一下表信息:

三张表之间的关联信息如图所示:

查询员工编号116的员工,在哪个城市工作,通过下面三条SQL语句,我们可以人为查找到,但是会占用大量的网络资源

2. 实现多表查询 

2.1 出现笛卡尔积的错误

错误的实现方式 越简单越错误

这种情况下会发现每个员工都和每个部门匹配了一遍,这种错误称为笛卡尔积的错误

错误的原因:缺少了多表链接的条件

 2.2 多表查询的正确打开方式

SELECT 显示的列
FROM 表1 , 表2
#链接条件
WHERE 表1 . 关联字段 = 表2 . 关联字段;

 例子,查询employees表中的employee_id 和 departments 表中的 department_name

 当链接字段就是我们想要查找的字段时,会出现报错如下:

 解决方案:随便明确一个表让它查就可以了

         建议,从优化的角度来说,建议多表查询时,所有要查询的的字段都指明所在的表,像下面这样,不关联的字段也写清楚,可以增加运行速度

 

 2.3 傲娇的表的别名,增强复杂语句可读性

        在 FROM 语句处加别名,让语句看起来短一点,增加程序可读性

SELECT...
FROM 表名 表的别名
....

         用别名优化一下上面的程序:

 注意,一旦起了表的别名,在 SELECT 和 WHERE 中就必须全部使用它的别名!!不然报错

真的有够傲娇的呢 0.0 

2.4 3+个表手拉手

三个及以上的表要用 WHERE... AND ...拉手 ,不要用WHERE... , ...哦

SELECT...
FROM...
WHERE 表1.关联字段1 = 表2.关联字段1
AND 表2.关联字段2 = 表3.关联字段2 ; 

        n个表手拉手,至少需要n-1个链接条件

2.5 多表查询分类 

        针对 WHERE 后面的链接条件进行的一系列分类

2.5.1 等值连接&非等值连接,用符号区分

等值连接:用 “ = ” 进行连接,上面的例子都是等值连接

非等值连接:没有用等号进行连接的,都叫非等值连接

        例如,有一个表名为 job_grade ,规定了不同的工资区间对应不同的工资等级。

        下面查询一下每个员工都属于什么工资等级:        

2.5.2 自连接&非自连接

自连接:对应表中的自我引用。例如employees表中,员工编号对应一个主管编号,但是主管也是一名员工

         例如,我们想要查询员工id,员工姓名 以及 管理者的id,管理者的姓名:

        相当于  1. 在 FROM 中创建了两张一样的表,用不同的别名区分开  2. 在 SELECT 中写出要查找的内容,注意一定要带上表名  3. 在 WHERE 中进行对应(这里要小心对应!)

2.5.3 内连接&外连接

内连接:以上例子中,当我们通过关联字段来调取多个表的信息时,是通过行的关联信息进行匹配的,结果集中不包含一个表与另一个表匹配不上的行信息

上面写的所有都叫内链接

例如,下面这个代码的运行结果不会显示出没有管理者的员工id,以及没有员工可以管理的经理id

 外连接:除了匹配的行之外,还查询到了左表或右表中不匹配的行。细分为左外连接,右外连接和满外连接

例如,查询所有的员工的last_name,department_name  一旦出现所有,就是一定要用外连接了

SQL92 语法实现内连接:见上,以上全部内容都是92语法

SQL92 语法实现外连接:使用 + ,即谁腿短就在谁后面加个(+)即可。因为要查询的是所有员工,所以可能会存在有的员工没有匹配的部门,那么部门id就是腿短的那个,要写+

 注意!!!但是MySQL不支持SQL92实现外连接 0.0

SQL99 语法:使用 JION...ON 的方式实现多表查询,内外连接都能解决

        99实现内连接

      JOIN ON可以理解为,表1申请 JOIN 加入表2,同时要说明 ON 一下他和表2里的谁是认识的~

SELECT 字段1 ,字段2,字段3
FROM 表1 (INNER) JOIN 表2 -- 这个INNER可以省略!
ON 表1.关联字段1 = 表2.关联字段1
JOIN 表3
ON 表2.关联字段2 = 表3.关联字段2;

           SQL99实现左右外连接

        刚才内连接是 INNER,外连接当然就是 OUTER 啦.

LEFT (OUTER) JOIN -- 左外连接,OUTER可以省略
RIGHT (OUTER) JOIN -- 右外连接,OUTER可以省略

        因为employees在左边,所以左外连接是对应全员工 ,有的员工没有部门:

         右外连接对应的是全部门,有的部门没有员工:

         SQL99实现满外连接

        原则上SQL99的满外连接是下面这么实现的:

FULL (OUTER) JOIN -- 满外连接,OUTER可以省略
                  -- 但是!!MySQL不支持!!

        但是!MySQL不支持这个写法!!(MySQL属实不灵 *.* 真.小刀喇pp)

重要Max!7种SQL JOINS的实现!

下面这个图需要什么就直接用下面的语句带入即可!重要Max!!

 

         UNION 合并查询结果:可以给出多条SELECT语句,并将他们的结果组合成单个的结果集。合并时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间,用UNION或者UNION ALL关键字分隔。

SELECT column,... 
FROM table1
WHERE...
UNION (ALL) -- 就是用UNION将两部分连接一下就行
SELECT column,... 
FROM table2
WHERE...

        UNION:返回两次查询的并集,去掉重复的部分

        UNION ALL:返回两次查询的并集,不去掉重复的部分

        注意,执行 UNION ALL 所需的资源比 UNION 要少,在明确知道不会出现重复数据时,最好使用UNION ALL。例如,先求出下方两部分,再用 UNION ALL合并在一起

 

                下面实现一下一直没实现的满外连接:

        只需要把上面需要的语句分别写出来,在用UNION ALL连接在一起即可

        运行之后发现没有员工的部门和没有部门的员工都显示出来了,实现成功 

         这样就终于用MySQL实现满外连接啦,撒花~

 3. SQL99语法新特性

3.1 自然连接 NATURAL JOIN,经典白学

可以理解为SQL92中的等值连接,它会自动帮你查找两张连接表中的所有相同字段,自动等值连接

SELECT 字段1,字段2
FROM 表1  NATURAL JOIN 表2;

        例如在表 employees 和 departments 中,有两个相同的字段:

        如果想把所有字段都关联,在SQL92中需要写:

         在SQL99中可以简化为:

 这么简单!!疯狂心动!!❤ 

但是这种方式不够灵活,可能会匹配多余的东西,有点憨,不建议使用(经典白学)

3.2 USING 简化关联条件

        当两个表中的关联字段名完全一样的时候才可以用!而且只能配合 JOIN

SELECT 字段1 , 字段2 , 字段3
FROM 表1 JOIN 表2
USING (同名关联字段);

        在SQL92中需要写:

        在SQL99中可以简化为:

         上面自连接中出现的下面这种情况就不能用 USING 了哦

 


        ✿✿✿ 第六章完结撒花~✿✿✿     

MySQL多表查询核心指南 , > 比较运算符。 阅读详情

相关推荐

MySQL多表查询案例

本文介绍了多表查询中的表关系概念和操作方法。主要内容包括:1.三种表关系类型(一对多、多对多、一对一)及其实现方式;2.多表查询的四种连接方式(内连接、左外连接、右外连接、自连接)及语法;3.子查询的使用方法;4.通过员工-部门-薪资等级表的实际案例,演示了9种典型查询场景的实现方式,包括基础查询、条件筛选、分组统计、子查询应用等。案例涵盖了从简单到复杂的多表查询操作,展示了SQL在数据关联分析中的强大功能。

weixin_75072370的博客 1344

MySQL数据库,从入门到精通:第六篇——全面掌握MySQL多表查询技巧

本文主要分为三部分,第一部分通过一个案例引出多表连接问题,包含案例说明和笛卡尔积的理解。 第二部分介绍多表查询的分类和拓展,如多个连接条件与 AND 操作符、表的别名、连接多个表等。同时,还深入探讨了自连接和非自连接、SQL92中INNER JOIN和OUTER JOIN等内容,包括使用(+)创建连接、右外连接(RIGHT OUTER JOIN)和满外连接(FULL OUTER JOIN)等。 第三部分在SQL99语法的基础上讲解多表查询实现,包括INNER JOIN的实现、OUTER JOIN的实现以

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

Mysql多表查询实践

Mysql多表查询实践 一、目的 1、掌握多表连接的基本方法 2、学会使用SQL命令进行多表查询操作 3、学会使用SQL命令进行子查询操作 二、内容 用于企业管理的员工管理数据库,数据库名为YGGL,包含员工信息表Employees、部门信息表Departments、员工薪水情况表Salary ,各表数据如下。 对YGGL数据库完成以下查询。 1、 查询“伍容华”的基本情况和所工作的部门名称 select employees.*,departments.部门名称 from employees,depa

tanzhenxinasd的博客 3811

简单查询与多表联合复杂查询

简单查询与多表联合复杂查询

2402_83910107的博客 458

MySQL多表查询、用户授权

备份复制表 将源表xxx复制为新表yyy create table yyy select * from xxx; 将指定的查询结果复制为新表zzz create table zzz SQL查询语句; 复制源表xxx的结构到新表vvv create table vvv select * from xxx where false; 将源表vvv的名称改为www alert table vvv ren...

JReno的博客 3716

CarPlay无线连接背后的‘握手’秘密:深入解读iAP2协议与蓝牙/Wi-Fi协同

本文深入解析了CarPlay无线连接背后的技术细节,重点探讨了iAP2协议与蓝牙/Wi-Fi的协同工作原理。从蓝牙层的UUID识别到iAP2协议的握手过程,再到Wi-Fi热点的建立与优化,详细揭示了CarPlay无线连接的安全机制和调试方法,为开发者提供了实用的技术参考。

weixin_42520573的博客 475

功能越多,表越多,sql语句越不好写

功能越多,表越多,sql语句越不好写。好的习惯最重要。

wtt561111的专栏 1506

银河麒麟服务器操作系统V10SP3 U盘安装中“基础软件仓库错误”的排查与修复指南

本文针对在无网络环境下使用U盘安装银河麒麟服务器操作系统V10SP3时,遇到的“基础软件仓库错误”问题,提供了详细的排查与修复指南。核心解决方案是通过进入救援模式,使用lsblk命令确定U盘实际设备路径,并在系统引导时手动添加inst.repo内核参数来指定安装源,从而绕过安装程序的自动探测故障,确保安装流程顺利进行。

ik67890123的博客 1193

MySQL(四)多表查询(重难点,多看多练)

多表查询:也称为关联查询,指两个或者多个表一起完成查询操作。 笛卡尔积:交叉连接,把表进行连接, 为了避免笛卡尔积,连接是要设定条件 union操作符:重合位置只算一次 unionall操作符:重合地方算两次 #中图:内连接 A∩B SELECT employee_id,last_name,department_name FROM employees e JOIN departments d ON e.department_id = d.department_id; #左上图:左外连接 SELECT

CNCF_CN 1069

三电平逆变器LC滤波设计避坑指南:从SVPWM谐波到Simulink仿真验证

本文详细解析了三电平逆变器LC滤波设计中的关键问题,从SVPWM谐波特性到Simulink仿真验证,提供了800V/10kW系统的参数计算方法和优化技巧。通过实际案例和仿真配置示例,帮助工程师避免常见设计误区,提升电能质量和系统稳定性。

weixin_29261711的博客 172

某程token参数逆向分析

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

weixin_73499887的博客 2881

MySQL 多表查询与复杂查询技巧实战

这篇博客介绍了MySQL中的多表查询、子查询、自连接及合并查询的技巧与实战应用。

酷酷的崽的博客 2018

《一》:LBE,VR 大空间系列——场景环境需求解析

当前,大量 VR 体验活动在室内场地开展。因此,对于场地照明有特定要求:除天花板外,场地的所有表面均需有照明覆盖。这是为了保证玩家无论处于场地的哪个位置,地面与墙面都不会出现明显的影子。场地内不建议安装射灯或高强度的点光源,若已安装此类灯具,需使用柔光板进行遮盖。此外,要避免在阳光下使用 VR 设备台。参考图(请忽略其中Maker标签)

unitygroup的博客 942

【MySQL】多表查询

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一)、多对多、一对一 的关系,有时需要通过这些关系查询另一张表的数据,这时就需要进行多表查询

m0_72532428的博客 2158

2025_NIPS_RAGRouter: Learning to Route Queries to Multiple Retrieval-Augmented Language Models

该研究聚焦检索增强生成(RAG)场景下的大语言模型(LLM)路由问题,提出了首个RAG感知的路由框架RAGRouter。核心解决现有路由方法依赖静态参数知识、忽略检索文档动态影响的缺陷,通过融合文档嵌入、RAG能力嵌入与对比学习,捕捉RAG引发的模型知识表征变化,为每个查询-文档对选择最优LLM。实验覆盖5个知识密集型任务、15个开源/闭源LLM,验证了RAGRouter在性能上超越最佳单LLM和非RAG感知路由方法,且通过阈值机制实现低延迟约束下的性能-效率平衡。

UnknownBody_2的博客 271

tsfknn 预测R语言中的时间序列

rolling参数应该设置为FALSE,这使得最后的18个观测值成为测试集,其余的作为训练集;如果我们将rolling参数设置为默认值TRUE,那么测试集就不会是一个恒定的向量。lag 滞后参数表示时间序列数据的滞后值。在这个例子中,由于我们的时间序列数据是月度的,我们将参数设置为1:12。作为药品福利计划的一部分,澳大利亚健康保险委员会记录的属于ATC代码A10的产品的每月政府支出(百万美元)。我们将使用tsfknn包,它可以用来预测R语言中的时间序列。格式:ts类别的月度时间序列。

Mrrunsen的博客 322

MYSQL8多表联合查询

MYSQL8多表联合查询多表联合查询常用连接查询多表查询--数据准备交叉连接查询内连接查询:隐式内连接显示内连接内连接示例外连接:左外连接右外连接:外连接使用using子句相互关联子查询WITH AS子句满外连接不加`all`会去重`UNION all`数据会重复自关联查询进行关联查询自关联查询示例:多表联合查询通常情况下...

cnzzs的博客 1052

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1025

【MySQL】多表操作 —— 多表查询

MySQL 有时在信息查询时需要进行对表自身进行关联查询,即一张表自己和自己关联,一张表当成多张表使用。子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,通俗一点就是包含。多表查询就是同时查询两个或两个以上的表,因为有的时候用户在查看数据的时候,需要显示的数据来自多张表。在子查询中,有一些常用的逻辑关键字,这些关键字可以提供更丰富的查询功能。对于联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。注意:交叉连接查询会产生很多错误的冗余数据。

m0_72516377的博客 1388

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL多表查询

在数据库中,我们经常需要从多个表中获取数据。本文将介绍如何使用MySQL进行多表查询,包括内连接、外连接、子查询、事务、索引等方法。SQL脚本#建议:创建新的数据库use db04;-- 部门表id int unsigned primary key auto_increment comment '主键ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',

weixin_73644434的博客 1413

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL之多表查询和子查询

分享了MySQL中的多表查询和子查询,大量实例让你看到爽

xieyichun_的博客 1778

8、【MySQL】多表查询

合并结果集:UNION 、 UNION ALL 内连接 [INNER] JOIN ON 外连接 OUTER JOIN ON 左外连接 LEFT [OUTER] JOIN 右外连接 RIGHT [OUTER] JOIN 全外连接(MySQL不支持)FULL JOIN 自然连接 NATURAL JOIN 子查询

不迁怒,不贰过。小知识,大智慧。 980

【MySQL】多表连接查询

多表连接查询是关系型数据库中最重要的特性之一,它允许我们从多个相关表中检索数据,将它们按照指定的关系组合在一起显示。MySQL支持多种连接类型,使开发者能够灵活地进行数据检索和分析。

Guiat的博客 2013

mysql多表查询

左外连可以查到到没有dept的emp的信息,右外链可以查到没有emp的dept。

u012941592的博客 1022

MySQL之多表查询

一、介绍 二、多表关系 三、多表查询简述 四、多表查询操作 :1.连接查询--内连接 2.连接查询--外连接 3.连接查询--自连接

小月月的博客 6231
上一篇: MySQL学习笔记7-----垫底二人组,排序与分页
下一篇: MySQL学习笔记8-----SELECT的单行函数们
MuteuooW
博客等级 码龄7年 63粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值