MySQL练习题,学生成绩查询练习题,附带答案

题目

(一) 新建以下几个表

student(学生表):

snosnamesexdeptbirthagePhone

其中约束如下:

(1) 学号不能存在相同的

sno int auto_increment primary key

(2) 名字为非空

sname varchar(20) not null

(3) 性别的值只能是*’男’**或’女’**

sex enum('男','女') fefault

(4) 系包括这几个:信息系,计算机科学系,数学系,管理系,中文系,外语系,法学系

dept ENUM('信息系','计算机科学系','数学系','管理系','中文系','外语系','法学系'),

(5) 出生日期为日期格式

birth DATE,

(6) 年龄为数值型,且在**0~100之间**

age INT(100),

(7) phone唯一

phone CHAR(11) UNIQUE

cs(成绩表):

snocnocj

其中约束如下:

(**1)sno和cno分别参照student和course表中的sno,cno的字段**

sno int,

foreign key(sno)references student(sno),

cno int,

foreign key (cno) references course(cno),

(**2)cj(成绩)只能在0~100之间,可以不输入值**

cj int check(cj>=0 and cj<=100)

course(课程表)

cnocname

其约束如下:

(**1)课程号(cno)不能有重复的**

cno INT AUTO_INCREMENT PRIMARY KEY,

(**2)课程名(cname)非空**

cname VARCHAR(50) NOT NULL

(三)针对学生课程数据库查询

(1) 查询全体学生的姓名、学号、所在系,并用别名显示出结果。

(2) 查全体学生的姓名及其出生年份。

(3) 查询选修了课程的学生学号。

(4) 查询年龄在**20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。**

(5) 查询信息系、数学系和计算机科学系生的姓名和性别。

(6) 查询姓**“欧阳”且全名为三个汉字的学生姓名**

(7) 查询缺少成绩的学生的学号和相应的课程号。

(8) 查所有有成绩的学生学号和课程号。

(9) 查询选修了**3号课程的学生的学号及其成绩,查询结果按分数降序排列。**

(10) 查询学生总人数。

(11) 查询选修了课程的学生人数。

(12) 求各个课程号及相应的选课人数。

(13) 查询选修了**3门以上课程的学生学号。**

(14) 查询有**3门以上课程是90分以上的学生的学号及(90分以上的)课程数。**

(15) 查询每个学生选修课程的总学分。

(16) 查询每个学生及其选修课程的情况。

(17) 查询选修**2号课程且成绩在90分以上的所有学生的学号、姓名**

(18) 查询每个学生的学号、姓名、选修的课程名及成绩。

(19) 查询与**“刘晨”在同一个系学习的学生(分别用嵌套查询和连接查询)**

(20) 查询选修了课程名为**“管理学”的学生学号和姓名**

(21) 查询其他系中比信息系任意一个**(其中某一个)学生年龄小的学生姓名和年龄**

(22) 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。**(可以用嵌套聚合函数或者用ALL谓词)**

(23) 查询所有选修了**1号课程的学生姓名。(分别用嵌套查询和连查询)**

(24) 查询没有选修**1号课程的学生姓名。**

(25) 查询选修了全部课程的学生姓名。

(26) 查询选修了课程**1或者选修了课程2的学生的信息。**

(27) 查询既选修了课程**1又选修了课程2的学生的信息。**

(28) 通过查询求学号为**2006001学生的总分和平均分。**

(29) 求出每个系的学生数量

(30) 查询平均成绩大于**85的学生学号及平均成绩。**

(31) 要求查寻学生的所有信息,并且查询的信息按照年龄由高到低排序,如果年龄相等,则按照学号从低到高排序

表的创建

CREATE TABLE student(sno INT AUTO_INCREMENT PRIMARY KEY,sname VARCHAR(20) NOT NULL,sex ENUM('男','女') DEFAULT '男',dept ENUM('信息系','计算机科学系','数学系','管理系','中文系','外语系','法学系'),birth DATE,age INT(100),phone CHAR(11) UNIQUE)	CREATE TABLE cs(id INT PRIMARY KEY,sno INT ,FOREIGN KEY(sno) REFERENCES student(sno),cno INT,FOREIGN KEY(cno) REFERENCES course(cno),cj INT CHECK(cj>=0 AND cj<=100))DROP TABLE courseCREATE TABLE course(cno INT AUTO_INCREMENT PRIMARY KEY,cname VARCHAR(50) NOT NULL)

学生表数据

INSERT INTO student VALUES ( '7','甜甜','女','计算机科学系','2000-01-10','18','12345678911');

这是sql语句创建,后面数据用的图形化创建

课程表数据

成绩表数据

练习答案

-- (三)针对学生课程数据库查询-- (1) 查询全体学生的姓名、学号、所在系,并用别名显示出结果。SELECT * FROM student -- (2) **查全体学生的姓名及其出生年份。SELECT sname,birth FROM student--  查询选修了课程的学生学号。** SELECT sno FROM student WHERE dept IS NOT NULL
--  **查询年龄在 20~23岁(包括18岁和23岁)之间的学生的姓名、系别和年龄。* SELECT sname,dept,age FROM student WHERE age>=18 AND age<=23
--   (5) **查询信息系、数学系和计算机科学系生的姓名和性别。**SELECT sname,sex FROM student WHERE dept IN('信息系','数学系','计算机科学系');
-- (6) 查询姓“鬼火”且全名为四个汉字的学生姓名SELECT sname FROM student WHERE sname LIKE '鬼火__'
-- (7) 查询缺少成绩的学生的学号和相应的课程号。SELECT student.sno,course.cno FROM student JOIN course  JOIN cs  ON cs.sno=student.sno AND cs.cj IS NULL AND  course.cno=cs.cno
-- (8) **查所有有成绩的学生学号和课程号。
SELECT student.sno,course.cno FROM student JOIN course  JOIN cs  ON cs.sno=student.sno AND cs.cj IS NOT NULL AND  course.cno=cs.cno
-- (9)查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。
SELECT student.sno,cs.cj FROM student JOIN course ON course.cno = 3  JOIN cs ON  course.cno = cs.cno AND student.sno = cs.sno AND cj IS NOT NULL ORDER BY cj DESC
-- (10)查询学生总人数。**SELECT COUNT(1) FROM student
-- (11)  查询选修了课程的学生人数SELECT COUNT(DISTINCT student.sno)AS '选课的人数'  FROM student JOIN cs ON student.sno=cs.sno
-- (12)求各个课程号及相应的选课人数。**
SELECT cs.cno AS '课程号',COUNT(1)AS '选课人数' FROM student JOIN course JOIN cs ON cs.cno=course.cno AND student.sno=cs.sno  GROUP BY cs.cno
-- (13) 查询选修了2 门以上课程的学生学号。
SELECT cs.sno AS '学号',COUNT(1)AS '选课数量' FROM student JOIN cs ON student.sno=cs.snoJOIN COURSE ON COURse.cno=cs.cno GROUP BY cs.sno HAVING COUNT(1)>2-- (14) 查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。
SELECT *,COUNT(1)AS'所有同学90以上课程数'FROM ( SELECT cs.sno AS '学号',sname FROM student JOIN cs ON student.sno=cs.snoJOIN COURSE ON COURse.cno=cs.cno  AND  cj>=90) AS cjj-- 这题应该是输出3门都是九十以上的学生,而不是输出三门九十学生后在输出所有考了九十分的人数
SELECT * ,COUNT(1)AS'选课数' FROM (SELECT student.sname,student.sno FROM student JOIN cs ON student.sno=cs.snoJOIN course ON course.cno=cs.cno  AND cj>=90)AS cjj  GROUP BY sno HAVING COUNT(1) >2-- (15) 查询每个学生选修课程的总学分。
SELECT sname AS '名字',sno AS '学号',SUM(cj)AS'总分' FROM(SELECT sname,cj,cs.sno FROM student JOIN cs ON student.sno=cs.sno)AS fen GROUP BY sno-- (16) 查询每个学生及其选修课程的情况。
SELECT cs.sno,sname,cname FROM student JOIN cs ON student.sno=cs.snoJOIN course ON cs.cno = course.cno ORDER BY sno -- (17) 查询选修2号课程且成绩在90分以上的所有学生的学号、姓名
SELECT cs.sno,sname,cs.cno,cj FROM student JOIN cs ON student.sno=cs.snoJOIN course ON cs.cno = course.cno AND cs.cno =2 AND cj>=90	-- (18) 查询每个学生的学号、姓名、选修的课程名及成绩。
SELECT cs.sno,sname,cname,cj FROM student JOIN cs ON student.sno=cs.snoJOIN course ON cs.cno = course.cno 	-- (19) 查询与“张三”在同一个系学习的学生(分别用嵌套查询和连接查询)
-- 嵌套查询SELECT * FROM(SELECT * FROM student WHERE dept = '计算机科学系')AS taWHERE sname != '张三'
-- 链接查询
SELECT * FROM student JOIN cs ON student.sno=cs.sno AND sname != '张三'AND dept = '计算机科学系'-- (20) 查询选修了课程名为“基础课”的学生学号和姓名
SELECT cs.sno,sname,cname FROM student JOIN cs ON student.sno=cs.snoJOIN course ON cs.cno = course.cno AND cname = '基础课'-- (21) 查询其他系中比法学系任意一个(其中某一个)学生年龄小的学生姓名和年龄
SELECT sname,student.age,dept FROM student JOIN (SELECT age FROM student WHERE dept='法学系')AS ww WHERE student.age < ww.age AND dept != '法学系'-- (22) **查询其他系中比法学系所有学生年龄都小的学生姓名及年龄。****(可以用嵌套****聚合函数****或者****用****ALL谓词****)**
SELECT sname,student.age,dept FROM student WHERE student.age <(SELECT MIN(age)AS age FROM student WHERE dept='法学系') AND dept != '法学系'-- (23) 查询所有选修了1号课程的学生姓名。(分别用嵌套查询和连查询)
-- 嵌套
SELECT sname FROM student,
(SELECT sno  FROM cs WHERE cno =(SELECT cno FROM course WHERE cno=1)) AS ww
WHERE ww.sno=student.sno-- 链接
SELECT sname FROM student JOIN cs ON student.sno=cs.snoJOIN course ON cs.cno = course.cno AND cs.cno=1	-- (24) 查询没有选修2号课程的学生姓名。	 
SELECT * 
FROM student 
WHERE sno 
IN(SELECT sno FROM cs WHERE cno!=2)	 -- student.sno,sname
SELECT * ,COUNT(1)
FROM student JOIN cs
ON student.sno=cs.sno    
GROUP BY(student.sno) HAVING COUNT(1)<3 AND cno!=2-- (25) 查询选修了全部课程的学生姓名。
SELECT COUNT(1), student.sno,sname
FROM student JOIN cs
ON student.sno=cs.sno  GROUP BY(student.sno) HAVING COUNT(1)>2-- (26) 查询选修了课程1或者选修了课程2的学生的信息。
SELECT DISTINCT * 
FROM student JOIN cs
ON student.sno=cs.sno AND
(cs.cno=1 OR cs.cno=2)-- (27) 查询既选修了课程1又选修了课程2的学生的信息。
SELECT COUNT(1), student.sno,sname
FROM student JOIN cs
ON student.sno=cs.sno AND
(cs.cno=1 OR cs.cno=2) GROUP BY(student.sno) HAVING COUNT(1)>1-- (28) 通过查询求学号为1学生的总分和平均分
SELECT cs.sno ,AVG(cj),SUM(cj) FROM student JOIN cs ON cs.sno = student.sno AND cs.sno=1-- (29) 求出每个系的学生数量
SELECT dept,COUNT(1)AS '学生数量' FROM student GROUP BY dept-- (30) 查询平均成绩大于85的学生学号及平均成绩。
SELECT sno,a FROM(SELECT id,cs.sno,AVG(cj) AS a  FROM student JOIN cs GROUP BY cs.sno)AS aa WHERE a>85-- (31) 要求查寻学生的所有信息,并且查询的信息按照年龄由高到低排序,如果年龄相等,则按照学号从低到高排序
SELECT * FROM student ORDER BY age DESC

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

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

相关文章

Excel如何设置在未打印时显示虚线打印时不显示虚线

记得之前分享过一个BOM表模板&#xff0c;但是在我打印时&#xff0c;发现明明是留空白的地方却打印出来的虚线 后来&#xff0c;看了自己的页面布局&#xff0c;原来是网格线设置错误了 当我设置为查看时显示网格线&#xff0c;打印时不显示网格线&#xff0c;这样就正常了

苹果配件妙控鼠标、键盘、触控板值得入手吗

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 苹果的优质和成功绝…

STM32存储左右互搏 SPI总线读写FRAM MB85RS16

STM32存储左右互搏 I2C总线读写FRAM MB85RS16 在中低容量存储领域&#xff0c;除了FLASH的使用&#xff0c;&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于FLASH&#xff0c;FRAM写操作时不需要预擦除&#xff0c;所以执行写操作时可以达到更高的速度&#xff0c;其…

40 mysql join 的实现

前言 join 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NULL,fi…

BGP多跳及BGP4+

一、知识补充 1、BGP4 传统BGP-4只管理IPV4路由信息&#xff0c;对于使用其它网络程协议 (若IPV6等)的应用末给予支持。IETF对BGP-4扩展&#xff0c;提出BGP4&#xff0c;可以提供对IPV6、IPX和MPLS VPN的支持 (简单说: 扩展IPV6协议栈支持)。 2、全互联 在上一篇博文中提…

leetcode - 矩阵区域和

1314. 矩阵区域和 - 力扣&#xff08;LeetCode&#xff09; 给你一个 m x n 的矩阵 mat 和一个整数 k &#xff0c;请你返回一个矩阵 answer &#xff0c;其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和&#xff1a; i - k < r < i k, j - k < c …

备忘录模式 rust和java的实现

文章目录 备忘录模式介绍实现javarustrust仓库 备忘录模式 备忘录&#xff08;Memento&#xff09;模式的定义&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便以后当需要时能将该对象恢复到原先…

【5G PHY】5G NR 如何计算资源块的数量?

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

严蔚敏数据结构p17(2.19)——p18(2.24) (c语言代码实现)

目录 2.19已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于 mink 且小于 maxk 的元素(若表中存在这样的元素&#xff09;同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink 和 maxk 是给定的个参变量,它们的值可以和表…

Hdoop学习笔记(HDP)-Part.12 安装HDFS

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

继阿里云、滴滴、语雀后,腾讯视频也出现重大系统故障

昨晚&#xff0c;许多网友报告称腾讯视频出现了网络故障&#xff0c;具体表现为首页无法加载内容、VIP 用户无法观看会员视频等问题。 针对这一问题&#xff0c;腾讯视频回应称&#xff1a;目前腾讯视频遇到了暂时的技术问题&#xff0c;正在紧急修复中&#xff0c;各项功能正在…

在项目根目录未找到 app.json

这个问题就是我们在编译后的app.json文件找不到&#xff0c;路径出现了问题 首先看dist下我们该文件的路径 所以我们需要将该路径配置到我们project.config.json文件中去 在这里新加下面这行代码就可以了&#xff0c; "miniprogramRoot": "dist/dev/mp-weixi…

C语言扫雷游戏

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、扫雷游戏的分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析1.3文件结构设计 二、扫雷游戏的代码实现总结 前言 详细介绍扫雷游戏的思路和实现过程。 一…

基于springboot + vue体育馆使用预约平台

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

自动提交日志脚本(6)浏览器抓包日志提交的数据

主要完成 do_logigdo_write_log 通过python的requests库post数据上传&#xff0c;因为是公司的系统我就展示抓包了&#xff0c;不展示怎么写了。 这边用日志暂存的页面做展示。 步骤 打开对应的页面&#xff0c;再打开浏览器的开发人员工具【一般是按f12】点击暂存按钮&…

每周一算法:背包问题(三)多重背包

多重背包 有 N N N件物品和一个容量是 M M M的背包。第 i i i种物品最多有 s i s_i si​件&#xff0c;每件的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输…

最强Node js 后端框架学习看这一篇文章就够

距离上次认真花时间写作&#xff0c;似乎已经过了许久许久&#xff0c;前端讲了一个新框架 &#xff0c;叫 Nest.js 下方是课件&#xff0c;有过一定开发经验可跟随视频学习 B站 地址 &#xff1a; https://www.bilibili.com/video/BV1Lg4y197u1/?vd_sourcead427ffaf8a5c8344…

Linux --- 进程控制

目录 1. 进程创建 1.1. 内核数据结构的处理 1.2. 代码的处理 1.3. 数据的处理&#xff1a; 方案一&#xff1a;fork创建子进程的时候&#xff0c;直接对数据进行拷贝处理&#xff0c;让父子进程各自私有一份 方案二&#xff1a;写实拷贝(copy on write) 1.4. fork常规用…

后端Long型数据传到前端js后精度丢失的问题

假设一个场景&#xff0c;MybatisPlus的雪花算法生成long类型主键ID&#xff0c;存入数据库&#xff0c;前端获取到数据后&#xff0c;要执行一个更新操作&#xff08;updateById&#xff09;&#xff0c;但这时会出现无法成功更新的情况&#xff01;这是因为前端在长度大于17位…

24.Python 网络编程之socket编程

目录 1.认识TCP/IP2.socket编程2.1 使用socket2.2 使用socketserver 1.认识TCP/IP 计算机网络就是把各个计算机连接在一起&#xff0c;在网络中的计算机可以互相通信。 网络编程是如何在程序中实现两台计算机的通信。 网络通信是两台计算机上的两个进程之间的通信。 为了把…