DQL命令查询数据 (二)

本课目标

掌握 ORDER BY 子句

使用 LIMIT 子句实现分页查询

掌握MySQL的分组查询

掌握MySQL的子查询

 SELECT 语法

ORDER BY 排序

ORDER BY 子句:按照一定顺序显示查询结果

排序可以是升序(ASC)或者是降序(DESC),结果默认按ASC升序排列

#把成绩都降低10%后加5分,再查询及格成绩
#按照成绩排序(ASC升序 DESC降序)
SELECT * FROM RESULT WHERE SUBJECTNO=3 AND (STUDENTRESULT*0.9+5) > 60 ORDER BY STUDENTRESULT DESC;

 代码案例:

#查询学生表中年级编号为1的学生姓名、电话和出生日期,并按照出生日期降序排序。
SELECT STUDENTNAME,PHONE,BORNDATE FROM STUDENT WHERE GRADEID=1 ORDER BY BORNDATE DESC;#查询成绩表中学号为10000的学号、成绩和考试日期,并按照日期先后次序显示。
SELECT STUDENTRESULT,EXAMDATE FROM RESULT WHERE STUDENTNO=10000 ORDER BY EXAMDATE;#查询成绩表中课程编号为1的学号、成绩和考试日期,并按照日期先后、成绩由高到低的次序显示
SELECT STUDENTNO,STUDENTRESULT,EXAMDATE FROM RESULT WHERE SUBJECTNO=1 ORDER BY EXAMDATE,STUDENTRESULT DESC;

分页查询

LIMIT 子句

MySQL查询语句中使用 LIMIT 子句限制结果集

  • 限制显示的结果集的行数
  • 分页查询(分页显示数据)
#查询学生表  前4条数据
SELECT * FROM STUDENT LIMIT 4;
SELECT * FROM STUDENT LIMIT 0,4;
#设定每页展示2条数据,查询第三页数据
SELECT * FROM STUDENT LIMIT 4,2;
#LIMIT是做分页的关键字,通常有两个参数  第一个参数表示查询记录的起始位置的索引(0开始)第二个参数表示页面大小

代码案例:

#查询成绩表中2023年课程编号为1且分数大于80的信息(学号,课程编号,分数),只显示前2名。
SELECT STUDENTNO,SUBJECTNO,STUDENTRESULT FROM RESULT WHERE YEAR (EXAMDATE)='2023' AND SUBJECTNO=1 AND STUDENTRESULT>80 ORDER BY STUDENTRESULT DESC LIMIT 2; #查询2023年课程编号为1的学号、考试成绩,并按照考试成绩由高到低的次序显示。要求查询出第3条-4条的记录
SELECT STUDENTNO,STUDENTRESULT FROM RESULT WHERE YEAR (EXAMDATE)='2023' AND SUBJECTNO=1 ORDER BY STUDENTRESULT DESC LIMIT 2,2;

结果1.

结果2.

分组查询

GROUP BY 分组

  • 对所有的数据进行分组统计
  • 分组的依据字段可以有多个,并依次分组
  • 与 HAVING 结合使用,进行分组后的数据筛选

GROUP BY子句经常和聚合函数结合使用完成分组统计功能

WHERE 和 HAVING 对比
  • WHERE 子句:用来筛选 FROM 子句中指定的操作所产生的行
  • GROUP BY 子句:用来分组 WHERE 子句的输出
  • HAVING 子句:用来从分组的结果中筛选行

代码案例:

#查询每门课程及格总人数和及格学生的平均分
SELECT STUDENTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT WHERE STUDENTRESULT>=60 GROUP BY SUBJECTNO;#查询每门课程及格总人数和及格平均分在80分以上的记录
SELECT STUDENTNO,COUNT(1),AVG(STUDENTRESULT) FROM RESULT WHERE STUDENTRESULT>=60 GROUP BY SUBJECTNO
HAVING AVG(STUDENTRESULT)>80;#查询每个年级的总学时数,并按照升序排列
SELECT GRADEID,SUM(CLASSHOUR) FROM `SUBJECT` GROUP BY GRADEID ORDER BY SUM(CLASSHOUR); #查询每门课程的平均分,并按照降序排列
SELECT SUBJECTNO,AVG(STUDENTRESULT) FROM RESULT GROUP BY SUBJECTNO ORDER BY AVG(STUDENTRESULT) DESC;#查询每个学生参加的所有考试的总分,并按照降序排列
SELECT STUDENTNO,SUM(STUDENTRESULT) FROM RESULT GROUP BY STUDENTNO ORDER BY SUM(STUDENTRESULT);#查询每个年级学生的平均年龄
SELECT GRADEID,AVG(YEAR(NOW())-YEAR(BORNDATE)) FROM STUDENT GROUP BY GRADEID;#查询考试不及格的学生学号和不及格的次数
SELECT STUDENTNO,COUNT(STUDENTRESULT) FROM RESULT WHERE STUDENTRESULT<60 GROUP BY STUDENTNO;

子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE、DELETE语句或其他子查询中的查询

子查询在 WHERE 语句中的一般用法

SELECT … FROM 表名 WHERE 字段X  比较运算符(子查询)

当父查询的条件要求是一个具体的值时,子查询的结果也必须只能返回一条数据

IN 子查询

  • IN 后面的子查询可以返回多条记录
  • 常用 IN 替换等于(=)的子查询

SELECT … FROM 表名 WHERE 字段X  IN(子查询)

代码案例:

#查询年级名称为”大一”开设的课程信息(课程编号、课程名称、课时数)
SELECT SUBJECTNO,SUBJECTNAME,CLASSHOUR FROM `SUBJECT` WHERE GRADEID=(SELECT GRADEID FROM GRADE WHERE GRADENAME ='大一');#查询课程名称为”高等数学一”最近一次考试的学生信息(学号、姓名和联系电话)
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT WHERE STUDENTNO IN(SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO=(SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME='高等数学-1')AND EXAMDATE=(SELECT MAX(EXAMDATE) FROM RESULT WHERE SUBJECTNO=(SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME='高等数学-1')) 
)#查询没有参加课程名称为”高等数学-1”最近一次考试的学生信息(学号、姓名和联系电话)
SELECT STUDENTNO,STUDENTNAME,PHONE FROM STUDENT WHERE STUDENTNO NOT IN(SELECT STUDENTNO FROM RESULT WHERE SUBJECTNO=(SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME='高等数学-1')AND EXAMDATE=(SELECT MAX(EXAMDATE) FROM RESULT WHERE SUBJECTNO=(SELECT SUBJECTNO FROM `SUBJECT` WHERE SUBJECTNAME='高等数学-1')) 
)

EXISTS 子查询

带有 EXISTS 的子查询不返回任何记录单数据,只返回逻辑值“True”或“False”

SELECT …… FROM 表名 WHERE EXISTS(子查询);

1.子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;

2.子查询无返回结果: EXISTS子查询结果为FALSE,   外层查询不执行;

子查询注意事项

任何允许使用表达式的地方都可以使用子查询

嵌套在父查询 SELECT 语句的子查询可包括:

  • SELECT 子句
  • FROM 子句
  • WHERE 子句
  • GROUP BY 子句
  • HAVING 子句

只出现在子查询中而没有出现在父查询中的列不能包含在输出列中

#查询“高等数学-1”课程最近一次考试成绩,如果有 80分以上的成绩,显示分数排在前5名的学员学号和分数。
select studentno,studentresult from result
where EXISTS(select 1 from result where subjectno=(select subjectno from `subject` where subjectname='高等数学-1') and examdate = (select max(examdate) from resultwhere subjectno=(select subjectno from `subject` where subjectname='高等数学-1') )and studentresult > 50
)and subjectno=(select subjectno from `subject` where subjectname='高等数学-1') 
and examdate = (select max(examdate) from resultwhere subjectno=(select subjectno from `subject` where subjectname='高等数学-1') 
)
order by studentresult desc
limit 5;#查询“高等数学-1”课程最近一次考试成绩,
#如果全部未通过考试(60分及格),
#认为本次考试偏难,显示考试平均分时加5分。
select avg(studentresult)+5 from result
where not EXISTS(select 1 from result where subjectno=(select subjectno from `subject` where subjectname='高等数学-1') and examdate = (select max(examdate) from resultwhere subjectno=(select subjectno from `subject` where subjectname='高等数学-1') )and studentresult >= 60
) and subjectno=(select subjectno from `subject` where subjectname='高等数学-1') 
and examdate = (select max(examdate) from resultwhere subjectno=(select subjectno from `subject` where subjectname='高等数学-1') 
)

 ------------------------------------------------------------------------------------------------------------------------------

#如果今年是2024年,则显示当前时间
SELECT NOW() FROM DUAL WHERE EXISTS(SELECT 1 FROM DUAL WHERE YEAR(NOW())='2024'
);

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

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

相关文章

使用C#发送邮箱验证码

使用C#发送邮箱验证码 在很多应用程序中&#xff0c;我们需要使用邮箱来进行用户身份验证。其中一种常见的方式是通过发送验证码到用户的邮箱&#xff0c;然后要求用户输入该验证码进行验证。本文将介绍如何使用 C# 发送邮箱验证码。 声明 验证码登录没有用任何的工具&#…

【大数据】Zookeeper 数据写入与分布式锁

Zookeeper 数据写入与分布式锁 1.数据是怎么写入的2.基于 Zookeeper 实现分布式锁 1.数据是怎么写入的 无论是 Zookeeper 自带的客户端 zkCli.sh&#xff0c;还是使用 Python&#xff08;或者其它语言&#xff09;实现的客户端&#xff0c;本质上都是连接至集群&#xff0c;然…

记事本在手机桌面上怎么找?手机里的记事本怎么找?

在日常生活、工作和学习中&#xff0c;我们时常需要随手记录一些重要的事项、灵感闪现的瞬间或者是待办的任务。比如&#xff0c;在超市购物前&#xff0c;列出购物清单&#xff1b;在开会时&#xff0c;记下重要的讨论点&#xff1b;在学习时&#xff0c;捕捉那一刹那的灵感。…

C语言-第十八周做题总结-数组3

id:454 A.字符串逆序 题目描述 输入一个字符串&#xff0c;对该字符串进行逆序&#xff0c;输出逆序后的字符串。 输入 输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。 输出 在一行中输出逆序后的字符串。 输入样例 输出样例 题解 先用一个while…

【大数据进阶第三阶段之Hive学习笔记】Hive基础入门

目录 1、什么是Hive 2、Hive的优缺点 2.1、 优点 2.2、 缺点 2.2.1、Hive的HQL表达能力有限 2.2.2、Hive的效率比较低 3、Hive架构原理 3.1、用户接口&#xff1a;Client 3.2、元数据&#xff1a;Metastore 3.3、Hadoop 3.4、驱动器&#xff1a;Driver Hive运行机制…

2.3_6 用信号量实现进程互斥、同步、前驱关系

2.3_6 用信号量实现进程互斥、同步、前驱关系 #mermaid-svg-fj0wp6tJGfadcT8h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fj0wp6tJGfadcT8h .error-icon{fill:#552222;}#mermaid-svg-fj0wp6tJGfadcT8h .error-t…

在Ubuntu22.04上离线部署Tailchat(一)

一&#xff1a;Tailchat介绍 Tailchat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景&#xff0c;是面向企业与私域用户打造&#xff0c;高度自由的群组管理与定制化…

第11章 GUI Page462~476 步骤二十三,二十四,二十五 Undo/Redo ③实现“Undo/Redo”菜单项

工程六 添加“编辑”菜单和子菜单 菜单ID分别为 idMenuEditUndo 和 idMenuEditRedo 热键&#xff08;快捷键&#xff09;分别为CtrlZ 和 CtrlShiftZ 变量名分别为 MenuItemEditUndo 和 MenuItemEditRedo 分别添加事件 ActionLink类增加成员函数 运行效果&#xff1a;“添加…

C语言注意点(2)

1.使用pow函数的相关问题 局部变量n0 while(num/pow(10,n)) n; 为什么不可行 printf("%d",num/pow(10,4)%10) 为什么要提前用temp先引出来 答&#xff1a;pow函数的返回值为double类型&#xff0c;1.终止条件不会满足 2.num/pow(10,4)结果为浮点型&#xff0c;浮…

运维工程师的出路

运维工程师的出路到底在哪里&#xff1f; 你是不是也常常听到身边的运维人员抱怨&#xff0c;他们的出路到底在哪里呢&#xff1f;别着急&#xff0c;让我告诉你&#xff0c;运维人员就像是IT界的“万金油”&#xff0c;他们像“修理工”一样维修服务器&#xff0c;像“消防员…

基于日照时数计算逐日太阳辐射

基于日照时数计算逐日太阳辐射

配置cendos 安装docker 配置阿里云国内加速

由于我安装的cendos是镜像版。已经被配置好了。所以只需要更新相关配置信息即可。 输入 yum update自动更新所有配置 更新完成后输入 yum list docker-ce --showduplicates | sort -r 自动查询所有可用的docker版本 输入 yum install docker-ce docker-ce-cli container…

STM32-03-STM32HAL库

文章目录 STM32HAL库1. HAL库介绍2. STM32Cube固件包3. HAL库框架结构4. 新建HAL版本MDK工程 STM32HAL库 1. HAL库介绍 HAL库 HAL&#xff0c;英文全称 Hardware Abstraction Layer&#xff0c;即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库&#xff0c;用户只需要调…

LiveGBS流媒体平台GB/T28181功能-用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色

LiveGBS功能用户管理通道权限管理关联通道支持只看已选只看未选添加用户备注角色 1、用户管理2、添加用户3、关联通道3.1、只看已选3.2、只看未选 4、自定义角色5、搭建GB28181视频直播平台 1、用户管理 LiveGBS支持用户管理&#xff0c;添加用户&#xff0c;及配置相关用户权…

书摘:C 嵌入式系统设计模式 06

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述原书第 2 章的内容。 作为嵌入…

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i&#xff0c;进入编辑模式 6、把用户的ID改成跟r…

【C语言】关闭socket需要包含的头文件

一、问题 linux系统&#xff0c;包含了头文件<sys/socket.h>&#xff0c; 警告 warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] close(sockclient); ^~~~~ pclose 二、解决 在 Linux 系统下…

常用的窗体控件

常用窗体控件 MenuStrip&#xff1a;一个标准的菜单栏控件&#xff0c;可以添加菜单单项和子菜单项 //双击子菜单项同样可以添加点击事件 //menu&#xff1a;菜单 item&#xff1a;菜单选项 //当点击新建选项的时候触发的事件 private void 新建ToolStripMenuItem_Click(ob…

其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)

本篇博客主要详细讲解一下其他排序&#xff08;基数排序&#xff0c;希尔排序和桶排序&#xff09;也是排序综合系列里最后一篇博客。第一篇博客讲解的是LowB三人组&#xff08;冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff09;&#xff08;数据结构课设篇1&…

嵌入式项目——平衡小车(1)

焊接 驱动板需要焊接的如上图。 陀螺仪8pin排母电机两路排线插口。(个别同学需要焊接)两个电池仓,注意电池仓分正反。 安装 底部电池板 4个 双通尼龙柱M3*224个 尼龙螺钉M3*6电机驱动板