MySQL—多表查询—练习(2)

一、引言

接着上篇博客《 MySQL多表查询——练习(1)》继续完成剩下的案例需求。


二、案例

(0)三张表(员工表、部门表、薪资等级表)

员工表:emp

部门表:dept

薪资等级表:salgrade


接着下面完成案例。从第6个需求开始。

(6)查询 “ 研发部 ” 所有员工的信息及工资等级。
1、分析

涉及三张表,两个连接条件,一个查询条件。

(连接条件:emp.salary between salgrade.losal and salgrade.hisal ,emp.dept_id = dept.id)

(查询条件:dept.name ="研发部")

2、实操
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='研发部';

3、问题

随着SQL语句的复杂程度越来越高,所涉及的表也越来越多,这时SQL语句的长度越来越长,在可视化工具看起来的可视化不是很直观。

解决方法如下:

展示结果:

(7)查询 “ 研发部 ” 员工的平均工资。

分析:涉及两张表,使用聚合函数

SELECT AVG(e.salary) FROM emp e,dept d WHERE e.dept_id=d.id AND d.name='研发部';

(8)查询工资比员工 “ 灭绝 ” 高的员工信息。

分析:用子查询。先查员工 " 灭绝 " 的工资,再查其它满足需求的员工信息。

标量子查询

SELECT * FROM emp WHERE emp.salary > (SELECT e.salary FROM emp e WHERE name='灭绝');

(9)查询比平均薪资高的员工信息。

实操

SELECT * FROM emp WHERE salary > (SELECT AVG(e.salary) FROM emp e);

(10)查询低于本部门平均工资的员工信息

1、分析

先假如查询id=1 的部门的平均工资

SELECT AVG(e1.salary) FROM emp e1 WHERE e1.dept_id=1;

查到之后,按照题目的意思就是要查询当前部门的员工小于平均工资的员工信息

现在题目要求的是查询低于当前部门的平均工资的员工。即每个部门都要有这种查询结果

SELECT e2.*,(SELECT AVG(e1.salary) FROM emp e1 WHERE e1.dept_id=e2.dept_id) AS '所属部门的平均工资' FROM emp e2 WHERE e2.salary < (SELECT AVG(e1.salary) FROM emp e1 WHERE e1.dept_id=e2.dept_id);

(11)查询所有的部门信息,并统计部门的员工人数

1、分析

首先试试查询某个部门的员工数量

SELECT COUNT(*) FROM emp WHERE emp.dept_id=1;

再改一下(最终SQL语句)

SELECT d.id,d.name,(SELECT COUNT(*) FROM emp e1 WHERE e1.dept_id=d.id) AS '部门总人数' FROM dept d;

在 SELECT 语句也可以出现子查询语句。

(12)查询所有学生的选课情况,展示出学生名称,学号,课程名称

涉及到三张表:学生表 student 、课程表 course 、学生选课表 student_course

通过中间表来维护三张表的多对多的关系。

1、三张表的基本数据

课程表:course

学生表:student

学生选课表

2、实操开始

注意:三张表要消除笛卡尔积(避免无效数据),至少两个条件。

连接条件:(student.id = student_course.student_id,course.id = student_course.course_id)

SELECT s.name,s.id,c.name FROM student s ,student_course sc ,course c WHERE (s.id=sc.student_id) AND (sc.course_id=c.id);

这就是演示的三张表的多表联查。就是要搞清楚:注意两两表之间的联系

关于多表查询的12个SQ语句案例已经全部实操完成了,

在完成的时候,SQL语句的写法不是固定的,有很多种查询方法去完成这些SQL语句的编写。

简而言之:只要能满足需求即可。

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

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

相关文章

让GNSSRTK不再难【第二天-第7部分2】

状态更新计算过程&#xff1a; 计算卡尔曼增益&#xff1a; 根据预测的误差协方差矩阵 P k − P_k^- Pk−​ 和观测噪声协方差矩阵 R R R 计算卡尔曼增益 K k K_k Kk​&#xff1a; K k P k − H T ( H P k − H T R ) − 1 K_k P_k^- H^T (H P_k^- H^T R)^{-1} Kk​Pk…

使用 PlatformIO 将文件上传到 ESP32-S3 的 SPIFFS 文件系统

PlatformIO环境 将文件上传到 ESP32-S3 的 SPIFFS 文件系统 介绍&#xff1a; PlatformIO 是一个流行的开发平台&#xff0c;用于编写、构建和上传嵌入式项目。ESP32-S3 是 Espressif 推出的一款功能强大的嵌入式开发板&#xff0c;具有丰富的外设和通信接口。本文将介绍如何…

前端 JS 经典:动态执行 JS

前言&#xff1a;怎么将字符串当代码执行。有 4 中方式实现 eval、setTimeout、创建 script 标签、new Function 1. eval 特点&#xff1a;同步执行&#xff0c;当前作用域 var name "yq"; function exec(string) {var name "yqcoder";eval(string); …

「C系列」C 数组

文章目录 一、C 数组1. 声明数组2. 初始化数组3. 访问数组元素4. 数组越界5. 多维数组 二、C 操作数组的方法有哪些三、C 数组-应用场景1. 存储固定数量的数据2. 实现算法&#xff08;如排序&#xff09;3. 处理数据集合 四、相关链接 一、C 数组 在C语言中&#xff0c;数组是…

Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 006 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

认识Spring中的BeanFactoryPostProcessor

先看下AI的介绍 在Spring 5.3.x中&#xff0c;BeanFactoryPostProcessor是一个重要的接口&#xff0c;用于在Spring IoC容器实例化任何bean之前&#xff0c;读取bean的定义&#xff08;配置元数据&#xff09;&#xff0c;并可能对其进行修改。以下是关于BeanFactoryPostProce…

【学习笔记】finalshell上传文件夹、上传文件失败或速度为0

出现标题所述的情况&#xff0c;大概率是finalshell上传文件的过程中的权限不够。 可参照&#xff1a;Finalshell上传文件失败或者进度总为百分之零解决方法 如果不成功&#xff0c;建议关闭客户端重试。 同时建议在设置finalshell的ssh连接时根据不同用户设置多个连接&#xf…

OJ刷题——2086.AI=?、2087.剪花布条、KPM算法

2086.AI&#xff1f; 题目描述 Problem - 2086 运行代码 #include <iostream> #include <cstdio> using namespace std; const int N 3005; int main() {int n;double Ao, An;double num[N];while (cin>>n) {cin >> Ao>>An;for (int i 1; i…

java技术专家面试指南100问【java学习+面试宝典】(二)

适配器模式是什么&#xff1f;什么时候使用&#xff1f; 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。适配器模式提供对接口的转换。如果你的客户端使用某…

kubernetes(k8s)集群部署(2)

目录 k8s集群类型 k8s集群规划&#xff1a; 1.基础环境准备&#xff1a; &#xff08;1&#xff09;保证可以连接外网 &#xff08;2&#xff09;关闭禁用防火墙和selinux &#xff08;3&#xff09;同步阿里云服务器时间&#xff08;达到集群之间时间同步&#xff09; &…

html+CSS+js部分基础运用20

根据下方页面效果如图1所示&#xff0c;编写程序&#xff0c;代码放入图片下方表格内 图1.效果图 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" conte…

LabVIEW调用DLL时需注意的问题

在LabVIEW中调用DLL&#xff08;动态链接库&#xff09;是实现与外部代码集成的一种强大方式&#xff0c;但也存在一些常见的陷阱和复杂性。本文将从参数传递、数据类型匹配、内存管理、线程安全、调试和错误处理等多个角度详细介绍LabVIEW调用DLL时需要注意的问题&#xff0c;…

UE5实战篇二(对话系统1):导语

实现一款商业游戏中使用的对话系统插件。 虚幻商店链接&#xff1a; https://www.unrealengine.com/marketplace/zh-CN/product/0b84eaa9343543f58138bc4956a2fa8f 1. 内容可配置 2. 多分支对话、旁白对话、对话序列动画、文字显示及各种特效 3. 可配置文字、音效、呈现位…

UML 统一建模语言简介

UML&#xff08;统一建模语言&#xff0c;Unified Modeling Language&#xff09;是一种标准化的建模语言&#xff0c;广泛用于软件工程中以可视化、描述、构建和记录系统的结构和行为。UML 提供了多种图表&#xff0c;用于不同的建模需求。以下是 UML 的主要使用方法和一些常见…

邻接矩阵深度优先遍历

深度优先遍历&#xff0c;就是一条路&#xff0c;走到底&#xff0c;然后再走下一个岔路。 下面代码就主要使用递归来进行&#xff0c;当然也可以借助栈来实现。 private void traverse(char v, boolean[] visited) {int index _getIndexOfV(v);//获取v顶点在vertexS字符数组…

【Spring Boot】过滤敏感词的两种实现

文章目录 项目场景前置知识前缀树 实现方式解决方案一&#xff1a;读取敏感词文件生成前缀树构建敏感词过滤器1. 导入敏感词文件 src/main/resources/sensitive_words.txt2. 构建敏感词过滤器 SensitiveFilter3. 测试与使用 解决方案二&#xff1a;使用第三方插件 houbb/sensit…

Prisma数据库ORM框架学习

初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …

「前端+鸿蒙」鸿蒙应用开发-TS接口-语法多态

在 TypeScript 中&#xff0c;接口&#xff08;Interfaces&#xff09;是一种强大的方式来定义对象的结构&#xff0c;它们用于类型检查和确保对象符合特定的结构。接口也可以用于类&#xff0c;实现类似多态的特性。以下是 TypeScript 中接口的语法和多态的快速入门指南。 TS快…

常用的通信协议

最近在做项目&#xff0c;用到了一些通信协议&#xff0c;这里详细整理一下相关的通信协议&#xff0c;方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信&#xff08;Simplex Communication&#xff09;半双工(Half-duplex Communication)全双工&#xff08;Full-dup…

速卖通如何放关联?

大家都知道&#xff0c;想要进行多账号操作必须一再小心&#xff0c;否则会有很大的关联风险&#xff0c;而账号关联所带来的后果是卖家绝对不能轻视的&#xff0c;严重的话会导致封号&#xff0c;这样一来自己前期的辛苦运营就全都打水漂了&#xff0c;因此防关联很重要&#…