MySQL-多表查询(中)

news2025/1/16 18:47:58

♥️作者:小刘在C站

♥️个人主页:小刘主页

♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生!

♥️树高千尺,落叶归根人生不易,人间真情

前言

我们之前在讲解 SQL 语句的时候,讲解了 DQL 语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作上章讲到2.3本章继续

目录

MySQL

2.3 分类

 5.3 内连接

1). 隐式内连接

2). 显式内连接

5.4 外连接

1). 左外连接

2). 右外连接

5.5 自连接

5.1 自连接查询

5.2 联合查询


MySQL

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

2.3 分类

    连接查询
内连接:相当于查询 A B 交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
子查询

 5.3 内连接

 据。(也就是绿色部分的数据)

内连接的语法分为两种 : 隐式内连接、显式内连接。先来学习一下具体的语法结构。

1). 隐式内连接

SELECT 字段列表 FROM 表1 , 表2 WHERE 条件 ... ;

2). 显式内连接

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ; 

案例:

  查询每一个员工的姓名 , 及关联的部门的名称 ( 隐式内连接实现 )
表结构 : emp , dept
连接条件 : emp.dept_id = dept.id
select emp.name , dept.name from emp , dept where emp.dept_id = dept.id ;
-- 为每一张表起别名,简化SQL编写
select e.name,d.name from emp e , dept d where e.dept_id = d.id;
B. 查询每一个员工的姓名 , 及关联的部门的名称 ( 显式内连接实现 ) --- INNER JOIN ...
ON ...
表结构 : emp , dept
连接条件 : emp.dept_id = dept.id
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
-- 为每一张表起别名,简化SQL编写
select e.name, d.name from emp e join dept d on e.dept_id = d.id;
表的别名 :
. tablea as 别名 1 , tableb as 别名 2 ;
. tablea 别名 1 , tableb 别名 2 ;
注意事项: 一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字 段。

5.4 外连接

 外连接分为两种,分别是:左外连接 和 右外连接。具体的语法结构为:

1). 左外连接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;
左外连接相当于查询表 1( 左表 ) 的所有数据,当然也包含表 1 和表 2 交集部分的数据。

2). 右外连接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ; 
右外连接相当于查询表 2( 右表 ) 的所有数据,当然也包含表 1 和表 2 交集部分的数据。
案例: 查询 emp 表的所有数据 , 和对应的部门信息
由于需求中提到,要查询 emp 的所有数据,所以是不能内连接查询的,需要考虑使用外连接查询。
表结构 : emp, dept
连接条件 : emp.dept_id = dept.id
select e.*, d.name from emp e left outer join dept d on e.dept_id = d.id;
select e.*, d.name from emp e left join dept d on e.dept_id = d.id;
查询 dept 表的所有数据 , 和对应的员工信息 ( 右外连接 )
由于需求中提到,要查询 dept 表的所有数据,所以是不能内连接查询的,需要考虑使用外连接查
询。
表结构 : emp, dept
连接条件 : emp.dept_id = dept.id
select d.*, e.* from emp e right outer join dept d on e.dept_id = d.id;
select d.*, e.* from dept d left outer join emp e on e.dept_id = d.id;
注意事项:
左外连接和右外连接是可以相互替换的,只需要调整在连接查询时 SQL 中,表结构的先后顺
序就可以了。而我们在日常开发使用时,更偏向于左外连接。

5.5 自连接

5.1 自连接查询

自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。我们先来学习一下自连接的查询语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 ... ;
而对于自连接查询,可以是内连接查询,也可以是外连接查询。
案例: A. 查询员工 及其 所属领导的名字 表结构 : emp
select a.name , b.name from emp a , emp b where a.managerid = b.id;
B. 查询所有员工 emp 及其领导的名字 emp , 如果员工没有领导 , 也需要查询出来
表结构 : emp a , emp b
select a.name '员工', b.name '领导' from emp a left join emp b on a.managerid =
b.id;
注意事项 :
在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底
是哪一张表的字段。

5.2 联合查询

对于 union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
union all 会将全部的数据直接合并在一起, union 会对合并之后的数据去重
案例: A. 将薪资低于 5000 的员工 , 和 年龄大于 50 岁的员工全部查询出来 .
当前对于这个需求,我们可以直接使用多条件查询,使用逻辑运算符 or 连接即可。 那这里呢,我们
也可以通过 union/union all 来联合查询 .
select * from emp where salary < 5000
union all
select * from emp where age > 50;

 union all查询出来的结果,仅仅进行简单的合并,并未去重。

select * from emp where salary < 5000
union
select * from emp where age > 50;

 union 联合查询,会对查询出来的结果进行去重处理。

注意: 如果多条查询语句查询出来的结果,字段数量不一致,在进行 union/union all 联合查询时,将会报 错。如:

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux指令速查

文章目录 Linux指令速查1.Linux初步认识1.1 Linux标识符1.2 Linux目录结构1.2.1 (/)目录结构说明1.2.2 目录颜色说明 1. 帮助命令1.1 help指令1.2 man指令 2. 快捷操作3. 文件或目录的管理3.1 处理目录的基本命令3.1.1 列出目录&#xff08;ls&#xff09;3.1.2 切换目录&#…

怎么申请免费的cdn?带附件图文详细操作

背景 我的服务器在国外&#xff0c;域名国内正规备案&#xff0c;但由于国外服务器到国内实在太慢&#xff0c;所以用了cdn&#xff0c;先是用cloudflare&#xff0c;结果慢的惊人&#xff0c;本来测速需要12s&#xff0c;加上cloudflare之后需要15s以上。。。 测速的网站是这…

chatgpt赋能Python-python_dingtalk

Python DingTalk&#xff1a;高效企业通讯利器 当今互联网时代&#xff0c;企业内部沟通必不可少。在成千上万的企业应用中&#xff0c;DingTalk作为高效沟通工具被越来越多的企业所使用。Python DingTalk库的出现&#xff0c;为企业带来了更加方便快捷的通讯方式。 什么是Py…

【数据结构】图的定义,存储,遍历

&#x1f38a;专栏【数据结构】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Dream It Possible】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;前言 &#x1f381;图的定义 &a…

安全中级2:nginx的中间件漏洞

目录 一、nginx解析php的流程 1.原理 2.CGI、FastCGI、PHP-FPM、PHP-CG、WrapperI的定义 二、Fastcgi协议 1.Fastecgi Record 2.Fastcgi Type 3.PHP-FPM(FastCGI进程管理器) 4.总结FastCGI解析的流程 三、nginx配置错误导致的漏洞 1.CRLF注入漏洞&#xff08;$uri解…

rk3568 适配rk809音频

rk3568 适配rk809音频 RK809是一款集成了多种功能的电源管理芯片&#xff0c;主要用于笔记本电脑、平板电脑、工控机等设备的电源管理。以下是RK809的详细功能介绍&#xff1a; 电源管理&#xff1a;控制电源的开关、电压、电流等参数&#xff0c;保证设备的稳定运行。音频管…

开放原子训练营(第三季)inBuilder低代码开发实验室之人人都是开发者

目录 前言: 一、知己知彼 1.1全场景 全角色 多终端 快速开发 1.2直觉化 响应式 1.3所见即所得 1.4全栈开发 二、百战百胜 2.1inBuilder开发入门 2.2点火启动&#xff0c;新的征程 三、实战表现 3.1实战总结 3.2实战效果 四、总结 前言: 2023年&#xff0c;是我们摘…

chatgpt赋能Python-python_embedded_null_character

Python中嵌入空字符的介绍 在Python编程语言中&#xff0c;空字符是一种特殊的字符&#xff0c;它在字符串中表示为空格或空行。不过&#xff0c;在某些情况下添加一个空字符是非常必要的&#xff0c;例如在编码时需要将字符串以空字符分隔&#xff0c;或者在数据库存储中需要…

CC++——深入探究动态内存管理

文章目录 总述C&C程序内存区域划分C内存管理方式运用new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete操作符的实现原理自定义类型 malloc/free 和 new/delete 的区别 总述 俗话说&#xff0c;没有理解过底层的c&c程序员…

性能测试——服务端监控工具nmon

这里写自定义目录标题 一、性能监控工具nmon介绍二、nmon可监控的数据类型三、nmon特点四、Linux下安装1、检查安装环境2、下载nmon3、解压 五、运行nmon1、启动nmon2、常用nmon快捷命令3、nmon命令行参数4、命令行例子5、重点 六、查看 nmon 监控结果1、nmon_analyser 介绍2、…

AI:Vue2和Vue3的对比

1. 什么是Vue.js以及Vue.js在前端开发中的重要性。 Vue.js是一个遵循MVVM&#xff08;Model-View-ViewModel&#xff09;模式的前端JavaScript框架&#xff0c;它采用了双向数据绑定和组件化的思想&#xff0c;使得前端开发变得更加简洁、高效、可维护。Vue.js由中国工程师尤雨…

chatgpt赋能Python-python_dlib

Python Dlib&#xff1a;从入门到实践 Python Dlib 是一个用于人脸检测、跟踪和姿态估计的高性能C库&#xff0c;提供 Python 接口方便调用。它是一个开源项目&#xff0c;被广泛应用于计算机视觉、图像处理和机器学习等领域。本文将从介绍Dlib的原理、特点以及应用场景等方面…

Rshiny基本函数(交互式web应用)

Rshiny基础函数 引言shiny包的下载shinyApp的构成ui的设计函数HTML类比img函数无法加载图片控件函数ui设计的输出对象 server总结 引言 R语言shiny包可以帮助我们轻松的制作交互式的web应用&#xff0c;并且可以搭建为独立的桌面可执行程序&#xff0c;非常方便制作和分享&…

人工智能(柴玉梅)第四章课后部分习题答案(仅供参考)

注释部分只是复习用&#xff0c;不是答案 第五题 注释&#xff1a;便于复习 本来想搜个类似的&#xff0c;结果发现r1这种人家都带括号&#xff01;&#xff01;&#xff01;额&#xff0c;没括号那我就从前往后算了&#xff0c;按顺序算准没错~ CF&#xff08;H&#xff09;的…

Python logging使用

目录 logging模块 logging核心组件 logger handler StreamHandler&#xff1a;把日志内容在控制台中输出 FileHandler&#xff1a;把日志内容写入到文件中 filter formatter 注意日志级别的继承问题 logger.exception 上述样例的整体代码 日志的配置文件及其模板 lo…

用Python爬取了三大相亲软件评论区,结果…

小三&#xff1a;怎么了小二&#xff1f;一副愁眉苦脸的样子。 小二&#xff1a;唉&#xff01;这不是快过年了吗&#xff0c;家里又催相亲了 ... 小三&#xff1a;现在不是流行网恋吗&#xff0c;你可以试试相亲软件呀。 小二&#xff1a;这玩意靠谱吗&#xff1f; 小三&#…

使用Gradle7.6.1 + SpringBoot3.0.2 + java17创建微服务项目(学习)

这是一个大胆的决定 这里是导航 技术栈开发工具一、创建gradle父子项目&#xff08;deity&#xff09;1.0 简单流程示意1.1、IDEA中主要图示1.1.1 项目结构图1.1.2 IDEA中 Gradle配置 1.2、deity父项目build.gradle文件1.3、deity父项目settings.gradle文件1.4、子项目build.g…

计算机底层知识

汇编语言&#xff08;机器语言&#xff09;的执行过程 汇编语言的本质&#xff1a;机器语言的助记符 其实他就是机器语言 计算机通电->CPU读取内存中程序&#xff08;电信号输入&#xff09; ->时钟发生器不断震荡通电 ->推动CPU内部一步一步执行&#xff08;执行多…

elementUI,自定义表头,多层级表头,表头合并,行内容一致的合并行

先上效果&#xff1a; 1.自定义表头&#xff1a; 通过设置 slot"header" 来自定义表头。 slot-scope"scope" 这一行千万不要因为没有再template中使用到scope&#xff0c;vscode报红而删除&#xff0c;这会导致input框不能输入任何内容&#xff01; &l…

软考网工计算题总结(一):总共27类题型,进来复习啦!

题型一&#xff1a; 1.地址编号从80000H到BFFFFH且按字节编址的内存容量为&#xff08;5&#xff09;KB,若用16KX4bit的存储芯片够成该内存&#xff0c;共需&#xff08;6&#xff09;片。 (5)A.128 B.256 C.512 D.1024 (6)A.8 B.16 C.32 D.64 【答案】B C 【解析】本题…