《数据库的嵌套查询和统计查询》

2023-05-16

选择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;

运行结果将会按照商品类别对销售额进行分组,计算每个类别的销售额总和,最终返回每个类别的销售额总和。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《数据库的嵌套查询和统计查询》 的相关文章

  • lodash防抖节流

    应用场景 xff1a 当用户高频率的触发事件 xff0c 事件较短 xff0c 内部出现卡顿现象 解决方法 xff1a 防抖节流 防抖节流功作用 xff1a 主要目的是为了降低高频事件触发 xff0c 减少dom操作或请求次数 xff0c
  • 使用webpack(4版本)搭建vue2项目

    在学习webpack之前 xff0c 也从网上搜过一些用webpack搭建vue项目的博客 xff0c 但是在自己使用的时候会报各种的问题 xff0c 报错的根本原因其实就是版本的问题 xff0c 以下代码是经过解决了许多报错问题研究出来最
  • VUE调用摄像头PC

    页面效果 实现代码 lt template gt lt div id 61 34 app 34 gt lt router view gt lt 开启摄像头 gt lt Button type 61 34 primary 34 64 clic
  • koa2的脚手架koa-generator使用

    我们在搭建项目的时候 xff0c 会使用一些脚手架 xff0c 今天我们使用koa2的脚手架koa generator 使用非常简单 首先 xff0c 我们需要全局安装 npm install g koa generator 创建项目 ko
  • css行内元素、块元素、行内块元素的区别

    行内元素的特点 xff1a 1 和其他元素在一行显示 2 元素的宽度 高度 行高及底部边距不可编辑 3 元素的宽度就是它包含的文字或图片的宽度 xff0c 不可改变 4 行内元素只能容纳纯文本或者是其他的行内元素 xff08 a标签除外 x
  • STM32CubeMX安装

    一 STM32CubeMX下载 官网地址 xff1a STM32CubeMX STM32Cube初始化代码生成器 意法半导体STMicroelectronics 官网下载需要注册账号 网盘链接 xff08 6 8 xff09 xff1a 链
  • 关于汇编指令sar右移32位的情况,记录一下

    网上 对sar指令右移超过31位的情况 比如右移32位 右移33位 很少有详细的说明 为了防止下一次还有像我这样傻x的人不会 我就记录一下 我不会过多说基础 基础了解就行 xff0c 能懒就懒 1字节 sar 我们以一字节为例子 00412
  • vs2022 汇编环境配置,xxx.inc头文件找不到,出现报错,不影响正常代码生成的解决方案

    解决方案前提 1 你的include和lib路径已经配置好了 然后代码可以正常的生成一个exe 2 安装了的AsmDube 其实inc文件找不到 是AsmDub找不到 不是vs2022找不到 所以你就去AsmDube修改一下 所以你只需要告
  • 关于8皇后解决方法的浅析

    关于8皇后解决方法的浅析 众所周知 xff0c 解决8皇后最普遍的方法是回溯法 那具体是怎么样的呢 xff1f 大概思路 xff1a 定义一个int型数组queen xff0c 角标 1 2 7 代表皇后所在的行 xff0c 值代表皇后所在
  • Latex闲谈

    关于latex呢 xff0c 首先它是一个排版工具 xff0c 是一个将文章排版和文章内容分开的一个排版工具 有个问题是你是边写边排版呢还是用word写完之后再来说是进行这个排版呢 xff0c 对于我而言 xff0c 我更倾向于后者 xff
  • Linux下phpmyadmin忘记root的登录密码,找回方法

    第一步 xff1a 执行 etc init d mysql stop 结束当前正在运行的mysql进程 第二步 xff1a 执行 usr bin mysqld safe skip grant tables 用mysql安全模式运行并跳过权限
  • matlab郭彦甫-听课笔记-02

    可以分块 xff0c 分块之后可以进行分块执行run section 关系运算符 xff1a 61 不等于 取余函数 xff1a mod a b rem a b switch case case case otherwise 连乘函数 xf
  • 51单片机硬件介绍

    1 单片机是啥 单片机 xff0c 简称MCU xff0c 是微型计算机 xff0c 集成了一部计算机许多硬件功能 xff0c 有CPU 存储器 xff08 ROM RAM xff09 等 2 有了这样一个单片机芯片后 xff0c 怎么将程
  • matlab硬件支持包离线安装-(安装文件夹错误)

    dSupport Software Downloader MATLAB amp Simulinkhttps ww2 mathworks cn support install support software downloader html
  • 小结:卸载SolidWorks2018->重新安装系统->安装SolidWorks2020

    因为卸载SW2018卸载不干净 xff0c 所以在安装SW20版一直在出错 xff0c 错误如下 xff1a 这个错误解决后继续安装 xff0c 又发现没有出现原本序列号的那一界面 xff0c 然后还有异型孔向导安装不了 xff0c 最后还
  • FreeRTOS信号量 基于STM32

    目录 概述 一 信号量基本概念 1 二值信号量 2 计数信号量 3 互斥信号量 4 递归信号量 二 二值信号量运作机制 三 计数信号量运作机制 四 常用信号量函数接口讲解 1 创建二值信号量 xSemaphoreCreateBinary 2
  • FreeRTOS互斥量 基于STM32

    文章目录 一 互斥量基本概念 二 互斥量的优先级继承机制 三 互斥量应用场景 四 互斥量运作机制 五 互斥量函数接口讲解 1 互斥量创建函数 xSemaphoreCreateMutex 2 递归xSemaphoreCreateRecursi
  • FreeRTOS事件组 基于STM32

    概述 文章对事件组的 xff0c 应用场景 xff0c 运作机制 xff0c 以及事件的创建 xff0c 删除 xff0c 等待 xff0c 置位 xff0c 同步等操作 文章目录 概述 一 事件标志组简介 1 事件位 事件标志 2 事件组
  • FreeRTOS任务通知 基于STM32

    文章目录 一 任务通知简介 二 任务通知的运作机制 三 任务通知的函数接口讲解 1 xTaskGenericNotify 2 xTaskNotifyGive 3 vTaskNotifyGiveFromISR 4 xTaskNotify 5

随机推荐

  • FreeRTOS软件定时器 基于STM32

    文章目录 一 软件定时器的基本概念 二 软件定时器应用场景 三 软件定时器的精度 四 软件定时器的运作机制 五 软件定时器函数接口讲解 1 软件定时器创建函数 xTimerCreate 2 软件定时器启动函数 xTimerStart 3 软
  • FreeRTOS内存管理 基于STM32

    目录 一 内存管理的基本概念 二 内存管理的应用场景 三 heap 4 c 1 内存申请函数 pvPortMalloc 2 内存释放函数 vPortFree 四 内存管理的实验 五 内存管理的实验现象 一 内存管理的基本概念 在计算系统中
  • 关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合

    1 admin index php admin sms url php ECSHOP模板 报错 xff1a Strict Standards mktime You should be using the time function inst
  • FreeRTOS中断管理 基于STM32

    文章目录 一 异常与中断的基本概念 二 中断的介绍 三 和中断相关的名词解释 四 中断管理的运作机制 五 中断延迟的概念 六 中断管理的应用场景 七 中断管理讲解 八 中断管理实验 九 中断管理实验现象 一 异常与中断的基本概念 异常是导致
  • 链表基础知识详解(非常详细简单易懂)

    概述 xff1a 链表作为 C 语言中一种基础的数据结构 xff0c 在平时写程序的时候用的并不多 xff0c 但在操作系统里面使用的非常多 不管是RTOS还是Linux等使用非常广泛 xff0c 所以必须要搞懂链表 xff0c 链表分为单
  • FreeRTOS临界段的保护

    什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段 在 FreeRTOS 里面 xff0c 这个临界段最常出现的就是对全局变量的操作 xff0c 全局变量就好像是一个枪把子 xff0c 谁都可以 对他开枪 xff0c 但
  • SPI通讯协议详解 基于STM32

    SPI 协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议 Serial Peripheral Interface xff0c 即串行外围设备接口 xff0c 是 一种高速全双工的通信总线 它被广泛地使用在 ADC LCD 等设备与 MC
  • C语言编译过程

    C语言的编译过程 xff1a 预处理 编译 汇编 链接 gcc E hello c o hello i 1 预处理 gcc S hello i o hello s 2 编译 gcc c hello s o hello o 3 汇编 gcc
  • C语言数组详解

    目录 一 数组的概念 二 数组的分类 2 1 按元素的类型分类 2 2 按维数分类 三 数组的定义 3 1 一维数组的定义 格式 xff1a 3 2 二维数组的定义 四 定义并初始化 4 1 一维数组的初始化 4 2 二维数组的初始化 五
  • C语言动态分配内存

    文章目录 一 动态分配内存的概述 二 静态分配 动态分配 三 动态分配函数 3 1 malloc 3 2 free 3 3 calloc 3 4 realloc 四 内存泄漏 一 动态分配内存的概述 在数组一章中 xff0c 介绍过数组的长
  • 嵌入式C语言(入门必看)

    目录 STM32的数据类型 const关键字 static 关键字 volatile关键字 extern关键字 struct结构体 enum typedef define 回调函数 ifdef ifndef else if 嵌入式开发中既有
  • ESP32上手指南

    乐鑫的ESP32微控制器是一款集成有2 4 GHz Wi Fi和蓝牙4 0双模的物联网芯片方案 xff0c 采用台积电 TSMC 超低功耗的40纳米工艺代工 片上集成有天线开关 射频巴伦 功率放大器 接收低噪声放大器 滤波器 电源管理模块等
  • 基于STM32硬币识别检测

    本设计基于ARM内核的单片机STM32F4的高识别率硬币识别装置 xff0c 主要应用于各公共营业场所 xff0c 如各超市 xff0c 自动售货机 xff0c 公共交通等 它应该能完成一角 xff08 分新版旧版 xff09 xff0c
  • PHP多维数组排序

    User 61 M 39 User 39 Incomelog 61 M 39 incomelog 39 user 61 User gt select now date 61 39 2015 02 09 39 integral 61 arra
  • PH电极酸碱度检测

    最近做了一个项目是关于PH电极测酸碱度的一个仪器 简单地说 xff1a 玻璃电极是一种氢离子选择性电极 xff0c 相当于一个对玻璃膜两侧氢离子浓度差异能产生附加电势差的 盐桥 xff0c 一般的盐桥是为了消除浓差电势或者液体接触电势这种附
  • 关于调试RTC时钟出现的问题

    此次做一个项目出现了一个令我很不解的问题 xff0c 就是RTC时钟 xff0c 代码是提前写好的 xff0c 当时是用的STM32F103ZET6最小系统板 xff0c 所有功能都是没有问题的 但是最终我画好的PCB芯片用的是STM32F
  • vscode编写c/c++及自动配置c/c++环境

    目录 前言所需的工具链接一 vscode中文设置及c c 43 43 插件安装1 中文设置2 c c 43 43 插件安装 二 环境配置1 解压AutoVsCEnv WPF V1 993自动配置工具压缩包2 运行AutoVsCEnv WPF
  • 安装最新版keil5编译报错*** target ‘target 1‘ uses arm-compiler ‘default compiler version 5‘ which i,keil5.37版

    原因是 missing compiler version5 xff0c 缺少V5编译器 xff08 compiler version5 xff09 xff0c 因为打开的工程比较老 xff0c 是用v5的编译器写的 xff0c 而现在下的k
  • vector的理解以及模拟实现

    vector的理解以及模拟实现 vector介绍vector常见函数介绍vector模拟实现及迭代器失效讲解 vector介绍 vector文档 vector是表示可变大小数组的序列容器 就像数组一样 xff0c vector也采用的连续存
  • 《数据库的嵌套查询和统计查询》

    选择Study数据库 xff0c 用SQL语句进行以下查询操作 1 xff0e 嵌套查询 求选修了数据结构的学生学号和成绩 span class token keyword SELECT span Sno span class token