《数据库的嵌套查询和统计查询》
选择Study数据库,用SQL语句进行以下查询操作。
1.嵌套查询
①求选修了数据结构的学生学号和成绩。
SELECT Sno, grade FROM sc WHERE Cno = '007';
②求007课程的成绩高于于文轩的学生学号和成绩。
SELECT Sno, grade FROM sc
WHERE Cno = '007' AND
grade >(SELECT grade FROM sc WHERE Sno = '20418001' AND Cno = '007');
③求其他系中比软件工程系某一学生年龄小的学生姓名和年龄。
SELECT Sname, TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) AS age FROM s
WHERE Sdept != '软件工程系' AND
TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) <
(SELECT MIN(TIMESTAMPDIFF(YEAR, Sbirth, CURDATE())) FROM s WHERE Sdept = '软件工程系');TIMESTAMPDIFF(YEAR, Sbirth, CURDATE())是MySQL函数,用于计算两个时间(或时间戳)之间的年数差。
在这个代码中,它用于计算学生出生日期(Sbirth)和当前日期(CURDATE())之间的年数差,以确定学生的年龄。
④求其他系中比软件工程系所有学生年龄都小的学生姓名和年龄。
SELECT Sname, TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) AS age FROM s
WHERE Sdept != '软件工程系' AND
TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) <
(SELECT MIN(TIMESTAMPDIFF(YEAR, Sbirth, CURDATE())) FROM s
WHERE Sdept = '软件工程系');
⑤求选修了002课程的学生姓名。
SELECT s.Sname FROM s INNER JOIN sc ON s.Sno = sc.Sno WHERE sc.Cno = '002';
⑥求没有选修了002课程的学生姓名。
SELECT Sname FROM s WHERE Sno NOT IN (SELECT Sno FROM sc WHERE Cno = '002');
⑦查询选修了全部课程的学生的姓名。
SELECT Sname FROM s WHERE Sno IN (SELECT Sno FROM sc GROUP BY Sno HAVING COUNT(Cno) = (SELECT COUNT(*) FROM c));
⑧求至少选修了学号为20418002的学生所选修的全部课程的学生学号和姓名。
SELECT s.Sno, s.Sname FROM s INNER JOIN sc ON s.Sno = sc.Sno WHERE sc.Cno IN (SELECT sc.Cno FROM sc WHERE sc.Sno = '20418002');
2.分组、统计查询
①查询学生总人数。
SELECT COUNT(*) as total_students FROM s;
②查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno) as enrolled_students FROM sc;
③计算001课程的学生平均成绩。
SELECT AVG(grade) as avg_grade FROM sc WHERE Cno = '001';
④查询选修001课程的学生的最高分数。
SELECT MAX(grade) as highest_grade FROM sc WHERE Cno = '001';
⑤求学号为20418002学生的总分和平均分。
SELECT SUM(grade) as total_score, AVG(grade) as average_score FROM sc WHERE Sno = '20418002';
⑥求各个课程号及相应的选课人数。
SELECT Cno, COUNT(Sno) as student_count FROM sc GROUP BY Cno;
⑦查询选修了3门以上课程的学生学号。
SELECT Sno FROM sc GROUP BY Sno HAVING COUNT(Cno) >= 3;
⑧查询选修了3门以上且各门课程均为及格的学生的学号及其总成绩,查询结果按总成绩降序列出。
SELECT Sno, SUM(grade) as total_score FROM sc GROUP BY Sno HAVING COUNT(Cno) >= 3 AND MIN(grade) >= 60 ORDER BY total_score DESC;
3.集合查询
①查询软件软件工程系的学生及年龄不大于19岁的学生。
SELECT * FROM s WHERE Sdept = '软件工程系' OR TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) <= 19;
②查询选修了课程001或者选修了002的学生。
SELECT DISTINCT Sno FROM sc WHERE Cno IN ('001', '002');
③查询学号为002和学号为005的学生的学号和总分。
SELECT Sno, SUM(grade) as total_score FROM sc WHERE Sno IN ('002', '005') GROUP BY Sno;
④查询网络工程系与年龄不大于19岁的学生的交集。
SELECT * FROM s WHERE Sdept = '网络工程系' AND TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) <= 19;
⑤查询计算机科学系的学生与年龄不大于19岁的学生的差集。
SELECT * FROM s WHERE Sdept = '计算机科学系' AND TIMESTAMPDIFF(YEAR, Sbirth, CURDATE()) > 19;
注意:
子句WHERE<条件>表示元组筛选条件,子句HAVING<条件>表示元组选择条件。
子句HAVING<条件>必须和GROUP BY<分组列名>子句配合使用。
组合查询的子句间不能有语句结束符。
使用UNION将多个查询结果合并起来时,系统会自动去掉重复元组。
参加UNION操作的各结果表的列数必须相同;对应项数据类型也必须相同。
Any和All与比较运算符配合使用:
> ANY 大于子查询结果中的某个值 > ALL 大于子查询结果中的所有值< ANY 小于子查询结果中的某个值 < ALL 小于子查询结果中的所有值>= ANY 大于等于子查询结果中的某个值 >= ALL 大于等于子查询结果中的所有值!=(或<>)ALL 不等于子查询结果中的任何一个值<= ANY 小于等于子查询结果中的某个值 <= ALL 小于等于子查询结果中的所有值= ANY 等于子查询结果中的某个值 =ALL 等于子查询结果中的所有值(没有实际意义)!=(或<>)ANY 不等于子查询结果中的某个值
MySQL5.7.40版本以前的版本和SQL Server2008仅支持集合的并操作UNION,不支持集合的交操作INTERSECT和差MINUS操作,但可以使用其他方法实现。而MySQL 8.0.31以后版本提供了对集合操作交操作INTERSECT和差操作EXCEPT。
集合操作一般要求两个输入表必须拥有相同的列数且相应列的数据类型相同。MySQL支持两种形式的并操作:UNION DISTINCT和UNION ALL,将合并两个查询结果并应用DISTINCT过滤重复项,生成一个虚拟表。而UNION ALL不会排除掉重复的数据项。若两个输入表相应列的数据类型不同时,MySQL自动将进行隐式转换,结果列的名称由第一个输入决定。
并操作格式:
SELECT column,... FROM table1
[DISTINCT] UNION [ALL]
SELECT column,... FROM table2交操作格式:
SELECT column,... FROM table1
INTERSECT
SELECT column,... FROM table2差操作格式:
SELECT column,... FROM table1
EXCEPT
SELECT column,... FROM table2
思考:
组合查询语句是否可以用其他语句代替,有什么不同?
可以使用其他语句代替组合查询,但是不同的语句可以有不同的结果和性能。下面是一些代替组合查询的语句: 1. 嵌套查询:使用一个查询作为另一个查询的条件,以实现类似于组合查询的功能。嵌套查询可以更加灵活,但在复杂的查询中可能会影响性能。 2. UNION ALL:将多个SELECT语句的结果集合并为一个结果集。UNION ALL 可以更容易地将多个结果集组合在一起,但效率可能会比组合查询慢。 3. JOIN:使用JOIN可将两个或多个表中的数据合并到一个结果集中。JOIN更适合关联多个表的数据,但对于相同的查询,性能可能会比组合查询慢。 总之,组合查询是一种方便、灵活和高效的查询方式,但无论使用哪种替代方案,都需要考虑查询的性能和结果的正确性。
使用GROUP BY<分组列名>子句后,语句中的统计函数的运行结果有什么不同?
使用GROUP BY子句后,语句中的统计函数的运行结果将会按照分组列名进行分组,然后对每个组的数据进行统计计算,返回每个组的计算结果。不同分组列名的组之间的计算结果将会相互独立,互不干扰。 例如,如果在SELECT语句中使用了SUM函数,语句将按照GROUP BY子句中指定的分组列名对数据进行分组,然后对每个组的数据进行SUM运算,最终返回每个组的SUM运算结果。 举个例子,假设有一个sales表,其中包含商品名称(name)、商品类别(category)和销售额(sales)三个字段,可以使用以下语句:SELECT category, SUM(sales) FROM sales GROUP BY category;运行结果将会按照商品类别对销售额进行分组,计算每个类别的销售额总和,最终返回每个类别的销售额总和。
相关文章:
《数据库的嵌套查询和统计查询》
选择Study数据库,用SQL语句进行以下查询操作。 1.嵌套查询 ①求选修了数据结构的学生学号和成绩。 SELECT Sno, grade FROM sc WHERE Cno 007;②求007课程的成绩高于于文轩的学生学号和成绩。 SELECT Sno, grade FROM sc WHERE Cno 007 AND grade …...
【网站架构】Nginx 4层、7层代理配置,正向代理、反向代理详解
大家好,欢迎来到停止重构的频道。 本期我们讨论网络代理。 在往期《大型网站 安全性》介绍过,出于网络安全的考虑,一般大型网站都需要做网络区域隔离,以防止攻击者直接操控服务器。 网站系统的应用及数据库都会放在这个网络安全…...
mysql备份和恢复
mysql备份和恢复 数据丢失的原因: 程序错误 人为操作错误 运算错误 磁盘故障 灾难(火灾,地震)和盗窃 数据库备份分类 物理备份 数据库此操作系统的物理文件(数据文件,日志文件等)的备份 …...
新闻月刊 | GBASE 4月市场动态一览
产品动态 4月,GBASE南大通用大规模分布式并行数据库GBase 8a MPP Cluster中标人保财险“2022年基础软件产品及服务采购”项目。这是自2019年GBASE与人保财险达成合作以来支持建设的第三期项目。项目上线后,将极大满足人保财险大数据中心及研发中心的增量…...
Java --- springboot2数据响应与内容协商
目录 一、数据响应与内容协商 1.1、响应json 1.1.1、返回值解析器 1.1.2、springMVC支持的返回值类型 1.1.3、HttpMessageConverter原理 1.2、内容协商 1.2.1、引入依赖 1.2.2、 postman分别测试返回json和xml 1.2.3、开启浏览器参数方式内容协商功能 1.3、自定义 Message…...
“中特估”乘风破浪!后续机遇在哪?
5月第一个交易日,“中特估”继续乘风破浪,A股银行板块集体大涨。 随着新一轮国企改革正在推进,中特估体系也在积极构建之中。在市场缺乏增量资金背景下,市场选股范式已经转向数字经济AI、央国企价值重估的两条主线,此…...
OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法3
《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录 创建并运行 CI/CD Pipeline访问 VMPipeline 的 Task 解读 创建并运行 CI/CD Pipeline 执行命令,生成公钥-私钥对。 $ ssh-keygen$ l…...
功率放大器在Lamb波信号波包模型验证研究中的应用
实验名称:窄带激励条件下的兰姆波时域信号参数估计研究 研究方向:Lamb波 测试目的: 基于Lamb波的二阶频散理论,提出了时域信号的波包模型,为全文奠定理论基础。模型考虑两种情况:初始激励以单模态传播和…...
Apache Hadoop
一、Apache Hadoop入门 1.1、Hadoop介绍 狭义上:hadoop指的是Apache一款java开源软件,是一个大数据分析处理平台。 Hadoop HDFS:分布式文件系统。 解决了海量数据存储问题。 Hadoop Distributed File System (HDFS™)Hadoop MapReduce&…...
PHP+vue大学生心理健康评价和分析系统8w3ff
本整个大学生心理健康管理系统是按照整体需求来实现各个功能的,它可以通过心理健康测评来检测大学生的心理健康,并且给予预警,还可以预约医生来解决问题。并且,管理员可以查看用户信息,发布一些关于心理健康的文章。该…...
【图像分割】【深度学习】SAM官方Pytorch代码-Mask decoder模块MaskDeco网络解析
【图像分割】【深度学习】SAM官方Pytorch代码-Mask decoder模块MaskDeco网络解析 Segment Anything:建立了迄今为止最大的分割数据集,在1100万张图像上有超过1亿个掩码,模型的设计和训练是灵活的,其重要的特点是Zero-shot(零样本迁…...
A Restful API
SpringBoot 定义Restful API 定义POJOOrderBuyer 定义RestfulControllerGet API for queryPost API for addPut API for updateDelete API for delete 定义AjaxResponse Patavariable RequestParm RequestBodyRequestHeader 定义POJO Order import java.util.Date; import ja…...
从零开始学习JSP,让你全面掌握Web开发技能
JSP(Java Server Pages),是一种动态网页技术,它允许开发者使用Java代码和HTML标签来创建网页。在这篇文章中,我们将详细介绍JSP的基本概念、语法和应用。 一、JSP的基本概念 1.1 JSP的含义 JSP是一种网页技术&#…...
java基于知识库的中医药问询系统
本系统主要包含了等系统用户管理、中医药常识管理、科室信息管理、知识库管理多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块:管理员登录系统对本系统其他管理模块进行管理。 用户的登录模块:用户登录本系统,对个…...
【新星计划-2023】什么是ARP?详解它的“解析过程”与“ARP表”。
一、什么是ARP ARP(地址解析协议)英文全称“Address Resolution Protocol”,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确…...
自动驾驶行业观察之2023上海车展-----车企发展趋势(2)
自主品牌发展 比亚迪:展示3款新车,均于2023年年内上市 比亚迪在本次展会上推出了3款新车:宋L概念车(王朝系列)、驱逐舰07(海洋系列)、海鸥(海洋系列)。 • 宋L&#x…...
通知所有员工所需的时间
题目描述 公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第 i 名员工的直属负责人。对于总负责…...
Docker:bash: vim: command not found
进入docker容器 docker exec -it [容器ID] /bin/bash docker exec -it e56e7bbe85ad /bin/bash 在使用 Docker 容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要安装vim,可是…...
排序算法之选择排序
选择排序(Selection Sort)是一种简单直观的排序算法,其基本思路是在未排序的数据序列中找到最小元素,将其放在已排序的数据序列的末尾。重复该过程,直到整个序列排序完成。 具体实现过程如下: 首先&#x…...
5_服务编排_docker-compose
服务编排之Docker Compose 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。 要从Dockerfile build image 或者去dockerhub拉取image 要创建多个container 要…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
