《数据库的嵌套查询和统计查询》
选择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 要…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...