MYSQL-多表查询
一、概述
1、定义
多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。
2、前提条件
这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
3、多表查询分类关系
分类: 隐式内连接内连接(查交集)显示内连接左外连接(差左表+包括交集的部分)
连接查询 外连接 右外连接(查右表+包括交集部分)自连接:当前表与自身的连接查询标量子查询(查询结果为单个值,比如数字、字符串、日期等)列子查询(查询的结果只有一列)子查询 行子查询(查询的结果只有一行)表子查询(查询的结果是一个表,为多行或列)
4、准备数据
dept表和emp表:
dept部门表:
create table dept (id int auto_increment primary key comment 'id',name varchar(50) not null comment '部门名称'
) comment '部门表';insert into dept (id, name)
values (1, '研发部'),(2, '市场部'),(3, '财务部'),(4, '销售部'),(5, '总经办'),(6, '人事部');
emp员工表:
create table emp(id int auto_increment primary key ,name varchar(50) not null ,age int,job varchar(20) comment '职位',salary int ,entrydate date comment '入职时间',managerid int comment '直属领导id',dept_id int comment '所在部门id'
) comment '员工表';insert into emp
values ( 1, '金庸', 66, '总裁', 20000, '2000-01-01', null, 5 ),( 2, '张无忌', 20, '项目经理', 12500, '2005-12-05', 1, 1 ),( 3, '杨晓', 33, '开发', 8400, '2000-11-03', 2, 1 ),( 4, '韦一笑', 48, '开发', 11000, '2002-02-05', 2, 1 ),( 5, '陈玉存', 43, '开发', 10500, '2004-09-07', 3, 1 ),( 6, '小昭', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1 ),( 7, '灭绝', 60, '财务总监', 8500, '2002-09-12', 1, 3 ),( 8, '周芷若', 19, '会计', 48000, '2006-06-02', 7, 3 ),( 9, '丁敏君', 23, '出纳', 5250, '2009-05-13', 7, 3 ),( 10, '赵敏', 20, '市场部总监', 12500, '2004-10-12', 1, 2 ),( 11, '鹿杖客', 56, '职员', 3750, '2006-10-03', 10, 2 ),( 12, '何碧文', 19, '职员', 3750, '2007-05-09', 10, 2 ),( 13, '东方白', 19, '职员', 5500, '2009-02-12', 10, 2 ),( 14, '张三丰', 88, '销售总监', 14000, '2004-10-12', 1, 4 ),( 15, '鱼梁洲', 38, '销售', 4600, '2004-10-12', 14, 4 ),( 16, '宋远桥', 40, '销售', 4600, '2004-10-12', 14, 4 ),( 17, '陈友谅', 42, null, 2000, '2011-10-12', 1, null );
二、分类
1、连接查询
(1)、内连接
隐式内连接:
select 字段列表 from 表1,表2 where 条件;
显示内连接:
select 字段列表 from 表1 [inner] join 表2 on 连接条件;
-- 查询每一个员工的姓名及关联的部门的名称
-- 隐式内连接
select emp.name, dept.name from emp, dept where emp.dept_id=dept.id;
-- 显示内连接
select emp.name, dept.name from emp inner join dept on emp.dept_id = dept.id;
查询结果:
(2)、外连接
左外连接:select 字段列表 from 表1 left [outer] join 表2 on 条件;
右外连接: select 字段列表 from 表1 right [outer] join 表2 on 条件;
-- 查询emp表的所有数据,和应于的部门信息(左查询)
select emp.*, dept.* from emp left outer join dept on emp.dept_id = dept.id;
-- 查询dept表的所有数据,和对于的员工信息(右查询)
select dept.*, emp.* from emp right outer join dept on emp.dept_id = dept.id;
查询结果:
左查询:
右查询:
(3)、自连接
select 字段列表 from 表a 别名a join 表a 别名b on 条件;
-- 查询员工及其所属领导的名字
select a.name, b.name from emp a join emp b on a.managerid=b.id;
查询结果:
2、联合查询----union、union all
select 字段列表 from 表a
union [all]
select 字段列表 from 表b
对于联合查询就是把多次查询的结果合并起来,形成一个新的查询结果。
注意:
对于联合查询的多张表的列数必须保持一致,字段类型也要保持一致。
union all会将全部的数据合并在一起,union会对合并之后的数据去重。
-- 将薪资低于5000的员工和年龄大于50的员工查询出来
select * from emp where salary>5000
union all
select * from emp where age>50;-- 没有all重复满足条件的只出现一次
-- 将薪资低于5000的员工和年龄大于50的员工查询出来
select * from emp where salary>5000
union
select * from emp where age>50;
查询结果:
union会进行去重:
3、子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。
select * from 表1 where 字段=(select 字段 from 表2);
SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。
(1)、标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询
常用符号:=、<>、>、>=、<、<=
-- 查询销售部所有员工信息
select id from dept where name='销售部'; -- 先查询销售部门的id,结果为4
select * from emp where dept_id=4;-- 再查询销售部门中员工的信息
-- 合并为一个查询
select * from emp where dept_id=(select dept.id from dept where dept.name='销售部' );
查询结果:
(2)、列子查询
子查询的结果为一列(可以是多行)的,这种子查询为列子查询。
常用操作符:in not in any some alll
-- 列子查询
-- 查询销售部和市场部的所有员工信息
select id from dept where name='销售部' or name='市场部';-- 查询销售部和市场部的id 结果为id为2 4
select * from emp where dept_id in (2,4); -- 查询两个部门的所有员工
-- 合并
select * from emp where dept_id in (select id from dept where name='销售部' or name='市场部');
查询结果:
(3)、行子查询
子查询返回的结果是一行(可以是多列),这种子查询为行子查询
常用操作符:=、<>、in、not in
-- 行子查询-- 查询与张无忌的薪资及直属领导相同的员工信息
select * from emp where (salary,managerid)=(select salary, managerid from emp where name='张无忌');
查询结果:
(4)、表子查询
子查询的结果是多行多列这种查询为表子查询
常用操作符:in
-- 表子查询
-- 查询与鹿杖客和宋远桥的职位和薪资相同的员工信息
select * from emp where (job, salary) in ( select job, salary from emp where name in ('鹿杖客', '宋远桥'));
查询结果:
相关文章:

MYSQL-多表查询
一、概述 1、定义 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 2、前提条件 这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键…...
MySQL改密码后不生效问题
MySQL修改密码后连接报密码错误 1.mysql修改密码命令: 这两种连接方式密码都必须修改 修改远程连接密码 ALTER USER ‘root’‘%’ IDENTIFIED BY ‘password’; 修改本地连接密码 ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘password’; 修改完后必须刷新…...

15分钟学Go 第1天:Go语言简介与特点
Go语言简介与特点 1. Go语言概述 Go语言(又称Golang)是由谷歌于2007年开发并在2009年正式发布的一种开源编程语言。它旨在简单、高效地进行软件开发,尤其适合于网络编程和分布式系统。 1.1 发展背景 多核处理器:随着计算机硬件…...

UDP/TCP协议
网络层只负责将数据包送达至目标主机,并不负责将数据包上交给上层的哪一个应用程序,这是传输层需要干的事,传输层通过端口来区分不同的应用程序。传输层协议主要分为UDP(用户数据报协议)和TCP(传输控制协议…...

gitee建立/取消关联仓库
目录 一、常用指令总结 二、建立关联具体操作 三、取消关联具体操作 一、常用指令总结 首先要选中要关联的文件,右击,选择Git Bash Here。 git remote -v //查看自己的文件有几个关联的仓库git init //初始化文件夹为git可远程建立链接的文件夹…...
在 Windows 环境下,Git 默认会自动处理 CRLF 和 LF 之间的转换。
在 Windows 环境下,Git 默认会自动处理 CRLF 和 LF 之间的转换。 要确保这一点并自动处理换行符差异,你可以按照以下步骤配置 1. 配置 Git 自动转换 CRLF 使用 Git Bash 或命令行执行以下命令,设置 Git 自动处理换行符: git con…...

Kibana可视化Dashboard如何基于字段是否包含某关键词进行过滤
kinana是一个功能强大、可对Elasticsearch数据进行可视化的开源工具。 我们在dashboard创建可视化时,有时需要将某个index里数据的某个字段根据是否包含某些特定关键词进行过滤,这个时候就可以用到lens里的filter功能很方便地进行操作。 如上图所示&…...
架构师之路-学渣到学霸历程-23
实战:NFS安装部署 接早上了解过了NFS的一些基本原理,咋们就看看一些实战; 尝试自己部署一下实验;然后实验成功了是我们最大的鼓励来着; 实战过程中,我们也面临了很多报错;所以每个实战的报错我…...

怎么修改编辑PDF的内容,有这4个工具就行了。
PDF 软件在现代的办公或者是学习当中的应用非常广泛,编辑PDF内容对很多人来说也是一件常有的事情。如果有了PDF 编辑软件,查看,编辑,修改,分享也会变得更加方便简单,所以今天要给大家介绍几款这样的工具。 …...

腾讯云宝塔面板前后端项目发版
后端发版 1. 打开“网站”页面,找到java项目,点击状态暂停服务 2.打开“文件”页面,进入jar包目录,删除原有的jar包,上传新jar包 3. 再回到第一步中的网站页面,找到jar项目,启动项目即可 前端发…...
C语言的结构体定义 java赋值关系运算符
1. /*#include<stdio.h> struct student { int num; //成员列表 int score; float avg; }; int main(void) { struct student Tom;//Tom结构体变量 struct student class4[50];//结构体数组 return 0; }*/ struct student { int nu…...

重学SpringBoot3-Spring WebFlux简介
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring WebFlux简介 1. 什么是 WebFlux?2. WebFlux 与 Spring MVC 的区别3. WebFlux 的用处3.1 非阻塞 I/O 操作3.2 响应式编程模型3.3 更高…...

distinct 和 group by
最近生产加了一个新字段 a、然后将主键赋值给 a 然后投产后验证是否有漏网之鱼。当时使用的是 select count(distinct pk),count(distinct a) from tableName当时在想这样子跟 group by 有啥区别 select a from tableName group by a having count(a) > 1所以查一下两者…...

RTThread-Nano学习一-基于MDK移植
一、简介 关于RTThread-nano的介绍,这里不做过多解释,官方文档已经介绍的非常详细了,有兴趣的可以参考如下文档:RT-Thread 文档中心 二、移植 1.准备一个能正常运行的代码 手头有M0内核的板子,那就以…...
Vue中v-bind对样式控制的增强—(详解v-bind操作class以及操作style属性,附有案例+代码)
文章目录 v-bind对样式控制的增强2.1 操作class2.1.1 语法2.1.2 对象语法2.1.3 数组语法2.1.4 使用2.1.5 Test 2.2 操作style2.2.1 语法2.2.2 使用2.2.3 Test v-bind对样式控制的增强 2.1 操作class 2.1.1 语法 <div> :class "对象/数组">这是一个div&l…...
【分布式微服务云原生】《ZooKeeper 深度探秘:分布式协调的强大利器》
**《ZooKeeper 深度探秘:分布式协调的强大利器》 ** 摘要:本文将深入详解 ZooKeeper,涵盖其工作原理、实现分布式锁的方法、应用场景、负载均衡的实现以及不同角色的作用等内容。读者将全面了解 ZooKeeper 的强大功能和价值,为构…...

打造高性能在线电子表格:WebGL 渲染引擎 Kola2d 自研之路
导读:本文主要阐述了 Docs 在线表格为打造极致渲染性能所做的关键优化和过程思考,作为首个在在线电子表格领域自研基于WebGL渲染引擎的「吃螃蟹」者,整个过程面临诸多不确定性与挑战,Kola2d 的整体设计在此期间也经历了几轮推倒重…...

深入理解WPF中的命令机制
Windows Presentation Foundation(WPF)是微软推出的一种用于构建桌面客户端应用程序的技术。它被认为是现代Windows应用程序的基础,具有强大的图形和媒体处理能力。在WPF中,“命令”是一个重要的概念,它为应用程序开发…...

基础算法(6)——模拟
1. 替换所有的问号 题目描述: 算法思路: 从前往后遍历整个字符串,找到问号之后,尝试用 a ~ z 的每一个字符替换即可 注意点:需考虑数组开头和结尾是问号的边界情况 代码实现: class Solution {public …...

2025年广西高考报名流程图解(手机端)
广西 2025 年高考报名时间已经确定啦,从 2024 年 10 月 21 日开始,到 10 月 31 日 17:30 结束 💻【报名路径】 有电脑端和手机端两种选择哦。 电脑端:登录 “广西招生考试院” 网站(https://www.gxeea.cn࿰…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...