目录

前言

一、创建数据库表

二、练习题

2、查询 score 表中成绩为85,86或88的记录

3、以 cno 升序、degree降序查询 score 表的所有记录

4、查询“95031”班的学生人数。

5、查询Score表中的最高分的学生学号和课程号

6、查询‘3-105’号课程的平均分。

7、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

8、查询最低分大于70,最高分小于90的Sno列。

9、查询所有学生的Sname、Cno和Degree列。

10、查询所有学生的Sno、Cname和Degree列。

11、查询所有学生的Sname、Cname和Degree列。

12、查询“95033”班所选课程的平均分。

13、查询所有同学的Sno、Cno和rank列

14、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

15、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

16、查询“张旭“教师任课的学生成绩。

17、查询选修某课程的同学人数多于5人的教师姓名。

18、查询95033班和95031班全体学生的记录。

19、查询存在有85分以上成绩的课程Cno。

20、查询出“计算机系“教师所教课程的成绩表。

21、查询所有教师和同学的name、sex和birthday。

22、查询所有“女”教师和“女”同学的name、sex和birthday。

23、查询成绩比该课程平均成绩低的同学的成绩表。

24、查询所有任课教师的Tname和Depart。

25、查询至少有2名男生的班号。

26、查询Student表中不姓“王”的同学记录。

27、查询Student表中每个学生的姓名和年龄。

28、对查询score中选学一门以上课程的同学中分数为非最高分成绩的记录的辨析


前言

mysql数据库综合练习3

一、创建数据库表

首先自己先创建一个数据库,再创建数据库表

CREATE TABLE STUDENT
(SNO       VARCHAR(3) NOT NULL,SNAME     VARCHAR(4) NOT NULL,SSEX      VARCHAR(2) NOT NULL,SBIRTHDAY DATETIME,CLASS     VARCHAR(5)
);CREATE TABLE COURSE
(CNO   VARCHAR(5)  NOT NULL,CNAME VARCHAR(10) NOT NULL,TNO   VARCHAR(10) NOT NULL
);CREATE TABLE SCORE
(SNO    VARCHAR(3)     NOT NULL,CNO    VARCHAR(5)     NOT NULL,DEGREE NUMERIC(10, 1) NOT NULL
);CREATE TABLE TEACHER
(TNO       VARCHAR(3)  NOT NULL,TNAME     VARCHAR(4)  NOT NULL,TSEX      VARCHAR(2)  NOT NULL,TBIRTHDAY DATETIME    NOT NULL,PROF      VARCHAR(6),DEPART    VARCHAR(10) NOT NULL
);INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (108, '曾华', '男', '1977-09-01', 95033);
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (105, '匡明', '男', '1975-10-02', 95031);
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (107, '王丽', '女', '1976-01-23', 95033);
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (101, '李军', '男', '1976-02-20', 95033);
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (109, '王芳', '女', '1975-02-10', 95031);
INSERT INTO STUDENT (SNO, SNAME, SSEX, SBIRTHDAY, CLASS) VALUES (103, '陆君', '男', '1974-06-03', 95031);INSERT INTO COURSE (CNO, CNAME, TNO) VALUES ('3-105', '计算机导论', 825);
INSERT INTO COURSE (CNO, CNAME, TNO) VALUES ('3-245', '操作系统', 804);
INSERT INTO COURSE (CNO, CNAME, TNO) VALUES ('6-166', '数据电路', 856);
INSERT INTO COURSE (CNO, CNAME, TNO) VALUES ('9-888', '高等数学', 100);INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (103, '3-245', 86);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (105, '3-245', 75);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (109, '3-245', 68);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (103, '3-105', 92);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (105, '3-105', 88);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (109, '3-105', 76);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (101, '3-105', 64);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (107, '3-105', 91);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (101, '6-166', 85);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (107, '6-106', 79);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (108, '3-105', 78);
INSERT INTO SCORE (SNO, CNO, DEGREE) VALUES (108, '6-166', 81);INSERT INTO TEACHER (TNO, TNAME, TSEX, TBIRTHDAY, PROF, DEPART)
VALUES (804, '李诚', '男', '1958-12-02', '副教授', '计算机系');
INSERT INTO TEACHER (TNO, TNAME, TSEX, TBIRTHDAY, PROF, DEPART)
VALUES (856, '张旭', '男', '1969-03-12', '讲师', '电子工程系');
INSERT INTO TEACHER (TNO, TNAME, TSEX, TBIRTHDAY, PROF, DEPART)
VALUES (825, '王萍', '女', '1972-05-05', '助教', '计算机系');
INSERT INTO TEACHER (TNO, TNAME, TSEX, TBIRTHDAY, PROF, DEPART)
VALUES (831, '刘冰', '女', '1977-08-14', '助教', '电子工程系');

二、练习题

1、查询Score表中成绩在60到80之间的所有记录

方法1

-- 1、查询Score表中成绩在60到80之间的所有记录
SELECT*
FROM score
WHERE DEGREE >= 60 AND DEGREE <= 80

方法2

-- 1、查询Score表中成绩在60到80之间的所有记录
SELECT*
FROMscore
WHEREDEGREE BETWEEN 60 AND 80

2、查询 score 表中成绩为85,86或88的记录

-- 2、查询 score 表中成绩为85,86或88的记录
SELECT *
FROM score
WHEREDEGREE IN ( 85, 86, 88 )ORDER BY DEGREE desc

3、以 cno 升序、degree降序查询 score 表的所有记录

注意 ORDER BY 子句中的顺序,交换顺序之后是不一样的。首先根据第一个字段排序,如果第一个字段相同,再根据第二个字段排序。

-- 以 cno 升序、degree降序查询 score 表的所有记录
SELECT*
FROMscore
ORDER BYCNO ASC,DEGREE DESC

4、查询“95031”班的学生人数。

MySQL 中 COUNT() 函数的使用。

-- 4、查询“95031”班的学生人数。
SELECTcount( sno ) AS '95031班的人数'
FROMstudent
WHEREclass = 95031

5、查询Score表中的最高分的学生学号和课程号

-- 5、查询Score表中的最高分的学生学号和课程号
SELECTsno AS '学号',cno AS '课程号' ,degree AS '成绩'
FROMscore
GROUP BYdegree DESC LIMIT 1

6、查询‘3-105’号课程的平均分。

MySQL 的 AVG 函数的使用。

-- 5、查询‘3-105’号课程的平均分。
SELECTavg( degree ) AS '3-105平均分'
FROMscore
WHEREcno = '3-105'

7、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。

--  7、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECTcno AS '学号',avg( degree ) AS '平均分'
FROMscore
WHEREcno LIKE '3%'
GROUP BYcno
HAVINGcount( * ) >=5

8、查询最低分大于70,最高分小于90的Sno列。

本题乍一看不太好理解,可以翻译为:查询所有课程成绩最低分大于70分,最高分小于90分的学生的学号。

题意暗含了要根据 sno 分组的意思。

-- 8、查询最低分大于70,最高分小于90的Sno列。
SELECTsno AS '学号',degree AS '成绩'
FROMscore
GROUP BYsno
HAVINGmin( degree ) > 70 AND max( degree ) < 90;

9、查询所有学生的Sname、Cno和Degree列。

-- 9、查询所有学生的Sname、Cno和Degree列。
SELECTstu.sname AS '姓名',sc.cno AS '课程号',sc.degree AS '成绩'
FROMstudent AS stuINNER JOIN score AS sc ON ( stu.sno = sc.sno )
GROUP BYstu.sno

10、查询所有学生的Sno、Cname和Degree列。

-- 10、查询所有学生的Sno、Cname和Degree列。
SELECTsc.sno AS '学号',sc.degree AS '成绩',c.cname AS '课程名'
FROMscore AS scINNER JOIN course AS c ON ( c.cno = sc.cno )
ORDER BYsc.degree DESC

11、查询所有学生的Sname、Cname和Degree列。

-- 11、查询所有学生的Sname、Cname和Degree列。
SELECTstu.sname AS '姓名',c.cname AS '课程名',sc.degree AS '成绩'
FROMstudent AS stuINNER JOIN score AS sc ON ( stu.sno = sc.sno )INNER JOIN course AS c ON ( sc.cno = c.cno )
ORDER BYsc.degree ASC

12、查询“95033”班所选课程的平均分。

方法1

--  12、查询“95033”班所选课程的平均分。
SELECTavg( sc.degree )
FROMstudent AS stuINNER JOIN score AS sc ON ( sc.sno = stu.sno )
WHEREstu.class = '95033'

方法2

--  12、查询“95033”班所选课程的平均分。
SELECTavg( sc.degree )
FROMscore AS sc
WHEREsc.sno IN ( SELECT stu.sno FROM student AS stu WHERE stu.class = '95033' )

13、查询所有同学的Sno、Cno和rank列

方法1

-- 13、查询所有同学的Sno、Cno和rank列
SELECTsc.sno AS '学号',sc.cno AS '课程号',g.rank AS '等级'
FROMscore AS sc,grade AS g -- inner join grade as gWHEREsc.degree BETWEEN g.low AND g.upp
ORDER BYg.rank

方法2

-- 13、查询所有同学的Sno、Cno和rank列
SELECTsc.sno AS '学号',sc.cno AS '课程号',g.rank AS '等级'
FROMscore AS sc inner join grade as g
WHEREsc.degree BETWEEN g.low AND g.upp
ORDER BYg.rank

14、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。

-- 14、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT*
FROMscore
WHEREcno = '3-105' AND degree > ( SELECT degree FROM score WHERE sno = 109 AND cno = '3-105' )

15、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。

涉及到函数 YEAR() 的使用。

-- 15、查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
SELECTsno AS '学号',sname AS '姓名',sbirthday AS '生日'
FROMstudent
WHEREYEAR ( sbirthday ) = ( SELECT YEAR ( sbirthday ) FROM student AS stu WHERE stu.sno = 108 )

16、查询“张旭“教师任课的学生成绩。

--  16、查询“张旭“教师任课的学生成绩。
SELECT*
FROMscore AS sc
WHEREsc.cno IN (
SELECTc.cno
FROMcourse AS cINNER JOIN teacher AS t ON ( t.tno = c.tno )
WHEREt.tname = '张旭' )

17、查询选修某课程的同学人数多于5人的教师姓名。

--  17、查询选修某课程的同学人数多于5人的教师姓名。
SELECTt.tname
FROMteacher AS t
WHEREtno IN ( SELECT tno FROM course AS c WHERE cno IN ( SELECT cno FROM score GROUP BY cno HAVING count( sno ) > 5 ) )

18、查询95033班和95031班全体学生的记录。

-- 18、查询95033班和95031班全体学生的记录。
SELECT*
FROMstudent AS stu
WHEREstu.class = '95033' OR stu.class = '95031'
GROUP BYstu.sno

19、查询存在有85分以上成绩的课程Cno。

-- 19、查询存在有85分以上成绩的课程Cno。
SELECTcno,degree
FROMscore
WHEREdegree > 85

20、查询出“计算机系“教师所教课程的成绩表。

-- 20、查询出“计算机系“教师所教课程的成绩表。
SELECT*
FROMscore
WHEREcno IN (
SELECTc.cno
FROMcourse AS c
WHEREc.tno IN ( SELECT t.tno FROM teacher AS t WHERE t.depart = '计算机系' ) )

21、查询所有教师和同学的name、sex和birthday。

-- 21、查询所有教师和同学的name、sex和birthday。
SELECTsname AS '姓名',ssex AS '性别',sbirthday AS '生日'
FROMstudent UNION
SELECTtname AS '姓名',tsex AS '性别',tbirthday AS '生日'
FROMteacher

22、查询所有“女”教师和“女”同学的name、sex和birthday。

-- 22、查询所有“女”教师和“女”同学的name、sex和birthday。
SELECTsname AS '姓名',ssex AS '性别',sbirthday AS '生日'
FROMstudent where ssex='女'UNION
SELECTtname AS '姓名',tsex AS '性别',tbirthday AS '生日'
FROMteacherwhere tsex='女'

23、查询成绩比该课程平均成绩低的同学的成绩表。

-- 23、查询成绩比该课程平均成绩低的同学的成绩表。
SELECTsc1.*
FROMscore AS sc1
WHEREdegree < ( SELECT avg( sc.degree ) FROM score AS sc WHERE sc.cno = sc1.cno )

24、查询所有任课教师的Tname和Depart。

-- 24、查询所有任课教师的Tname和Depart。
SELECTtname AS '姓名',depart AS '所属系'
FROMteacher

25、查询至少有2名男生的班号。

-- 25、查询至少有2名男生的班号。
SELECTclass AS '班号',sname AS '姓名'
FROMstudent
WHEREssex = '男'
GROUP BYclass
HAVINGcount( ssex ) >= 2

26、查询Student表中不姓“王”的同学记录。

-- 26、查询Student表中不姓“王”的同学记录。
SELECT*
FROMstudent
WHEREsname NOT LIKE '王%'

27、查询Student表中每个学生的姓名和年龄。

使用到了 NOW() 函数。

-- 27、查询Student表中每个学生的姓名和年龄。
SELECTsname AS '姓名',YEAR ( NOW( ) ) - YEAR ( sbirthday ) AS '年龄'
FROMstudent

28、对查询score中选学一门以上课程的同学中分数为非最高分成绩的记录的辨析

第一种查询 score 中选学一门以上课程的同学中,分数不是其自己所有课程成绩的最高分的记录。

-- 28、28、对查询score中选学一门以上课程的同学中分数为非最高分成绩的记录的辨析
-- 第一种是查询 score 中选学一门以上课程的同学中,分数不是其自己所有课程成绩的最高分的记录。
SELECTsc.*
FROMscore AS scINNER JOIN ( SELECT sno, max( degree ) AS max_degree FROM score GROUP BY sno ) s ON sc.sno = s.sno AND degree <> max_degree

第二种是查询 score 中选学一门以上课程的同学中,其课程分数不是该课程所有学生成绩最高分的记录。

-- 28、28、对查询score中选学一门以上课程的同学中分数为非最高分成绩的记录的辨析
-- 第二种是查询 score 中选学一门以上课程的同学中,其课程分数不是该课程所有学生成绩最高分的记录。
SELECTsc.*
FROMscore AS scINNER JOIN ( SELECT cno, max( degree ) AS max_degree FROM score GROUP BY cno ) AS s ON ( s.cno = sc.cno AND degree <> max_degree )

MySQL数据库练习3相关推荐

  1. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  2. MySQL数据库+命令大全+常用操作

    格式:mysql -h主机地址 -u用户名 -p用户密码 1. 例:连接到本机上的MYSQL 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示 ...

  3. mysql数据库是一个软件呐_15款好用的mysql管理软件

    1. Induction Induction是一款用于理解数据关系的开源管理工具,它可用来探索行/列,运行查询和数据可视化等方面.该工具支持多种数据库,包括PostgreSQL,MySQL,SQLit ...

  4. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  5. C语言对mysql数据库的操作

    C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...

  6. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  7. python用django连接mysql_三分钟了解Django如何连接Mysql数据库

    处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py    在views函数文件中添加register函数,来处理用户注册 ...

  8. mysql数据库比对视频教程_MySQL数据库全学习实战视频教程(27讲 )

    一)mySQL数据库简介:MySQL属于关系型数据库,是当前最流行的关系型数据库管理系统之一,在WEB项目使用方面,MySQL是最好的 RDBMS应用软件. 二)本mySQL数据库视频教程目录如下:  ...

  9. eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法

    写帖子是为了让更多的程序员减少再调试bug中的时间,也希望大家能一起把自己遇到的错误及解决方法写出来.我是一个刚开始学java的大二学生,用的是<java开发实战经典>.在写p646的程序 ...

  10. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...

最新文章

  1. vivo 全球商城:商品系统架构设计与实践
  2. 寻找冬日里的流量美食,发现了李子柒走红的秘密
  3. PhpStorm快捷键
  4. MFC中修改静态文本框中文字的字体、颜色
  5. 机器学习十大经典算法之岭回归和LASSO回归
  6. linux 进程和线程或线程和线程之间通过管道通信(pipe)
  7. mac配置OpenGL超级宝典(第7版)环境
  8. java对象赋值优雅写法_JavaScript优雅写法及骚操作
  9. async.whilst 的一个简化版实现
  10. “死”法不重样,一根数据线如何从“机器伴侣”变身电脑杀手?
  11. SAAS 技术栈回顾
  12. opencart seo优化_「opencart seo插件」wordpress SEO插件都有哪些好用的?...
  13. 如何做好产品经理和如何学习UI
  14. 英伟达守望先锋巡回赛开启 上海/深圳/沈阳/重庆英雄齐聚
  15. SVM解释:二、SVM的数学基础
  16. Feign原理以及feign调优
  17. js编码书写规范(自学习用)
  18. USRP B210同步采集
  19. LeetCode 826 Most Profit Assigning Work
  20. 【辣子鸡的家常做法】

热门文章

  1. Compressor.js 图片压缩及方向修正
  2. WPF MVVM设计模式下 相同Xaml绑定不同ViewModel问题
  3. OS知识点汇总(考研用)——第二章:进程管理(下)
  4. html的 作用 是什么,html的作用
  5. Unity UGUI DoTween 学习笔记
  6. 20145238-荆玉茗 《Java程序设计》第五次实验报告
  7. STM32系统时钟详解
  8. 计组作业【题目记录】
  9. 使用Python获取国际版淘宝AliExpress的商品信息
  10. WPF+WCF一步一步打造音频聊天室(二):文字聊天和白板共享