MySQL基础-多表查询

多表查询-多表关系

多表查询-概述

例如执行下行sql语句就会出现笛卡尔积:

select *from emp,dept;
--消除笛卡尔积
select * from emp,dept where emp.dept_id = dept.id;

多表查询-查询分类

多表查询-连接查询-内连接

--内连接演示
--1.查询每一个员工的姓名,及关联的部门的名称(隐式内连接实现)
--表结构: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;
--2.查询每一个员工的姓名,及关联的部门的名称(显式内连接实现)
--关键字:INNER JOIN .. . ON ...(INNER可以省略)
--表结构:emp,dept
--连接条件:emp.dept_id = dept.id
select emp.name,dept.name from emp inner join dept on emp.dept_id = dept.id;
--起别名
select e.name,d.name from emp e inner join dept d on e.dept_id = d.id;

多表查询-连接查询-外连接

--外连接演示
--1.查询emp表的所有数据,和对应的部门信息(左外连接),会完全包含左表中的全部数据.
--表结构:emp,dept
--连接条件:emp.dept_id = dept.id
select emp.* ,dept.name from emp left (outer) join dept on emp.dept_id = dept.id;
--起别名
select e.*,d.name from emp e left outer  join dept d on e.dept_id = d.id;
--2.查询dept表的所有数据,和对应的员工信息(右外连接),会完全包含右表中的全部数据.
select dept.* ,emp.* from emp right (outer) join dept on emp.dept_id = dept.id;
--起别名
select d.* ,e.* from emp e right (outer) join dept d on e.dept_id = d.id;
--左外连接和右外连接可以相互转换,只需要将表的顺序换一下
select dept.* ,emp.* from dept left (outer) join emp on emp.dept_id = dept.id;

多表查询-连接查询-自连接

要进行操作的数据表信息如下:

--自连接
--1. 查询员工及其所属领导的名字(这里面的manager_id就是领导的id,通过自连接--相当于二次查询一张表--查询即可获取领导的名字)
--表结构:emp a,emp b
select a.name,b.name from emp a, emp b where a.managerid = b.id; 
--2. 查询所有员工及其领导的名字,如果员工没有领导,也要查询出来
--表结构:emp a,emp b
select a.name '员工', b.name '领导' from emp a left join emp b on a.managerid  = b.id;

多表查询-联合查询

--union all,union
--1.将薪资低于5000的员工,和年龄大于50岁的员工全部查询出来
select * from emp where salary < 5000
union 
select * from emp where age > 50;

注意:

多表查询-子查询

标量子查询

--1.查询"销售部"所有员工信息
--(1)查出"销售部"部门id
select id from dept where name = '销售部';
--(2)根据销售部部门id的查询员工信息
select * from emp where dept_id = 4;
--结合起来
select * from emp where dept_id = (select id from dept where name = '销售部');
​
--2.查询在"方东白"入职之后的员工信息
--(1).查询"方东白"的入职日期
select entrydate from emp where name = '方东白';
--(2).查询指定入职日期之后入职的员工信息
select *from emp where entrydate > '2009-02-12';
--结合起来
select *from emp where entrydate > (select entrydate from emp where name = '方东白');
 

--1.查询"销售部"和"市场部"的所有员工信息
--(1).查询"销售部"和"市场部"的部门ID
select id from dept where name = '销售部' or name = '市场部';
--(2).根据部门id,查询员工信息
select * from dept where dept_id in (2,4);
--结合
select * from dept where dept_id in (select id from dept where name = '销售部' or name = '市场部');--2.查询比财务部所有人工资都高的员工信息
--(1).查询所有财务部人员工资
select id from dept where name = '财务部';
select salary from emp where dept_id = 3;
--结合
select salary from emp where dept_id = (select id from dept where name = '财务部');
--(2).查询比财务部所有人工资都高的员工信息
select * from emp where salary > all(select salary from emp where dept_id = (select id from dept where name = '财务部'));--3. 查询比研发部其中任意一人工资高的员工信息
--(1).查询所有研发部人员工资
select id from dept where name = '研发部';
select salary from emp where dept_id = 2;
--结合
select salary from emp where dept_id = (select id from dept where name = '研发部');
--(2).查询比研发部其中任意一人工资高的员工信息
select * from emp where salary > any(select salary from emp where dept_id = (select id from dept where name = '研发部'));

--1.查询与"张无忌"的薪资及直属领导相同的员工信息
--(1). 查询"张无忌"的薪资及直属领导
select salary,managerid from emp where name = '张无忌';
--(2). 查询与"张无忌"的薪资及直属领导相同的员工信息
select * from emp where (salary,managerid) = (select salary,managerid from emp where name = '张无忌');

--1.查询与"鹿杖客","宋远桥"的职位和薪资相同的员工信息
--(1). 查询与"鹿杖客","宋远桥"的职位和薪资
select job,salary from emp where name = '鹿杖客' or name = '宋远桥';
--(2). 查询与"鹿杖客","宋远桥"的职位和薪资相同的员工信息
select * from emp where (job,salary) in (select job,salary from emp where name = '鹿杖客' or name = '宋远桥');
​
--2.查询入职日期是"2006-01-01" 之后的员工信息,及其部门信息
--(1).查询入职日期是"2006-01-01" 之后的员工信息
select * from emp where entrydate > '2006-01-01';
--(2).查询这部分员工,对应的部门信息
select e.*,d.* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id;

多表查询-实战

1.select e.name,e.age,e.job,d.name from emp e,dept d where e.dept_id = d.id;
2.select e.name,e.age,e.job, d.name from emp e inner join dept d on e.dept_id = d.id where e.age < 30;
3.select distinct d.id,d.name from emp e,dept d where e.dept_id = d.id;
4.select e.*,d.name from emp e left join dept d on e.dept_id = d.id where e.age > 40;
5.select e.*,s.grade from emp e,salgrade s where e.salary >= s.losal and e.salary <= s.hisal;
6.select e.*,s.grade from emp e,dept d,salgrade s where e.dept_id = d.id and (e.salary between s.losal and s.hisal) and d.name = '研发部';
7.select avg(e.salary) from emp e,dept d where e.dept_id = d.id and d.name = '研发部';
8.select * from emp where salary > (select salary from emp where name = '灭绝');
9.select * from emp where salary > (select avg(salary) from emp);
10.select * from emp e2 where e2.salary < (select avg(e1.salary) from emp e1 where e1.dept_id = e2.dept_id);
11.select d.id,d.name,(select count(*) from emp e where e.dept_id = d.id ) '人数' from dept d;
12.select s.name,s.no,c.name from student s,student_course sc ,course c where s.id = sc.studentid and sc.courseid = c.id;

多表查询-总结

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[权限提升] Wdinwos 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;Trusted Service Paths 提权原理 Windows 的服务通常都是以 System 权限运行的&#xff0c;所以系统在解析服务的可执行文件路径中的空格的时候也会以 System 权限进行解析&a…

【01】共识机制

BTF共识 拜占庭将军问题 拜占庭将军问题是一个共识问题 起源 Leslie Lamport在论文《The Byzantine Generals Problem》提出拜占庭将军问题。 核心描述 军中可能有叛徒&#xff0c;却要保证进攻一致&#xff0c;由此引申到计算领域&#xff0c;发展成了一种容错理论。随着…

本地部署DeepSeek教程(Mac版本)

第一步、下载 Ollama 官网地址&#xff1a;Ollama 点击 Download 下载 我这里是 macOS 环境 以 macOS 环境为主 下载完成后是一个压缩包&#xff0c;双击解压之后移到应用程序&#xff1a; 打开后会提示你到命令行中运行一下命令&#xff0c;附上截图&#xff1a; 若遇…

【Redis】Redis 经典面试题解析:深入理解 Redis 的核心概念与应用

Redis 是一个高性能的键值存储系统&#xff0c;广泛应用于缓存、消息队列、排行榜等场景。在面试中&#xff0c;Redis 是一个高频话题&#xff0c;尤其是其核心概念、数据结构、持久化机制和高可用性方案。 1. Redis 是什么&#xff1f;它的主要特点是什么&#xff1f; 答案&a…

JavaWeb入门-请求响应(Day3)

(一)请求响应概述 请求(HttpServletRequest):获取请求数据 响应(HttpServletResponse):设置响应数据 BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器就可访问,应用程序的逻辑和数据都存储在服务端(维护方便,响应速度一般) CS架构:Client/ser…

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

FFmpeg(7.1版本)在Ubuntu18.04上的编译

一、从官网上下载FFmpeg源码 官网地址:Download FFmpeg 点击Download Source Code 下载源码到本地电脑上 二、解压包 tar -xvf ffmpeg-7.1.tar.xz 三、配置configure 1.准备工作 安装编译支持的软件 ① sudo apt-get install nasm //常用的汇编器,用于编译某些需要汇编…

何谓共赢?

A和B是人或组织&#xff0c;他们怎样的合作才是共赢呢&#xff1f; 形态1:A提供自己的身份证等个人信息&#xff0c;B用来作贷款等一些事务&#xff0c;A每月得到一笔钱。 A的风险远大于收益&#xff0c;或者B从事的是非法行为&#xff1b; 形态2:A单方面提前终止了与B的合作…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…

2 MapReduce

2 MapReduce 1. MapReduce 介绍1.1 MapReduce 设计构思 2. MapReduce 编程规范3. Mapper以及Reducer抽象类介绍1.Mapper抽象类的基本介绍2.Reducer抽象类基本介绍 4. WordCount示例编写5. MapReduce程序运行模式6. MapReduce的运行机制详解6.1 MapTask 工作机制6.2 ReduceTask …

ASP.NET Core与配置系统的集成

目录 配置系统 默认添加的配置提供者 加载命令行中的配置。 运行环境 读取方法 User Secrets 注意事项 Zack.AnyDBConfigProvider 案例 配置系统 默认添加的配置提供者 加载现有的IConfiguration。加载项目根目录下的appsettings.json。加载项目根目录下的appsettin…

Clion开发STM32时使用stlink下载程序与Debug调试

一、下载程序 先创建一个文件夹&#xff1a; 命名&#xff1a;stlink.cfg 写入以下代码: # choose st-link/j-link/dap-link etc. #adapter driver cmsis-dap #transport select swdsource [find interface/stlink.cfg]transport select hla_swdsource [find target/stm32f4x.…

低成本、高附加值,具有较强的可扩展性和流通便利性的行业

目录 虚拟资源类 1. 网课教程 2. 设计素材 3. 软件工具 服务类 1. 写作服务 2. 咨询顾问 3. 在线教育 4. 社交媒体管理 虚拟资源类 1. 网课教程 特点&#xff1a;高附加值&#xff0c;可复制性强&#xff0c;市场需求大。 执行流程&#xff1a; 选择领域&#xff1a…

54. 螺旋矩阵

【题目】&#xff1a;54. 螺旋矩阵 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int startx 0, starty 0; // 起始坐标vector<int> res;int m matrix.size(), n matrix[0].size();int count min(m, n) …

elasticsearch8.15 高可用集群搭建(含认证Kibana)

文章目录 1.资源配置2.系统参数优化3.JDK17安装4.下载&安装ES 8.155.生成ES的证书(用于ES节点之间进行安全数据传输)6.修改ES 相关配置文件7.创建es用户并启动8.配置ES的账号和密码(用于ES服务端和客户端)9.下载和安装Kibana10.编辑Kibana配置文件11.启动Kiabana12.访问Kia…

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点&#xff1a; AMQP协议&#xff1a;RabbitMQ是基于AMQP&#xff08;高级消息队列协议&#xff09;构建的&#xff0c;支持多种消息传递模式&#xff0c;如发布/订阅、路由、RPC等。多语言支持&#xff1a;支持多种编程语言的客户端库&#xff0c;包括Java、P…

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT,以实现更智能的 AI

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT&#xff0c;以实现更智能的 AI 传统的检索增强生成&#xff08;RAG&#xff09;系统在生成具备上下文感知的答案方面表现出色。然而&#xff0c;它们往往存在以下不足&#xff1a; 精确性不足&#xff1a;单次推理可能会忽略复杂…

model calibration

如果模型的输出不是概率, 或者模型没有well calibrated的时候, 需要对模型进行calibrate: 具体方法如下: 首先需要用training data训练一个model然后通过测试数据来画图看看模型是否well calibrated 例如猫狗分类中, 将属于猫的对应概率落到相应的桶中。 然后计算桐中真正属…

记录 | 基于MaxKB的文字生成视频

目录 前言一、安装SDK二、创建视频函数库三、调试更新时间 前言 参考文章&#xff1a;如何利用智谱全模态免费模型&#xff0c;生成大家都喜欢的图、文、视并茂的文章&#xff01; 自己的感想 本文记录了创建文字生成视频的函数库的过程。如果想复现本文&#xff0c;需要你逐一…