MySQL常用练习题

#创建数据库EXAM

CREATE DATABASE EXAM;

#使用数据库

USE EXAM;

#创建表STUDENT

CREATE TABLE STUDENT

(SNO VARCHAR(3) NOT NULL,

SNAME VARCHAR(4) NOT NULL,

SSEX VARCHAR(2) NOT NULL,

SBIRTHDAY DATETIME,

CLASS VARCHAR(5))ENGINE=InnoDB DEFAULT CHARSET=utf8;

#创建表COURSE

CREATE TABLE COURSE

(CNO VARCHAR(5) NOT NULL,

CNAME VARCHAR(10) NOT NULL,

TNO VARCHAR(10) NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#创建表SCORE

CREATE TABLE SCORE

(SNO VARCHAR(3) NOT NULL,

CNO VARCHAR(5) NOT NULL,

DEGREE NUMERIC(10, 1) NOT NULL)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#创建表TEACHER

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)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中添加数据

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 ('108','3-105','78');

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','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、 查询STUDENT表中的所有记录的SNAME、SSEX和CLASS列。

2、 查询教师所有的单位即不重复的DEPART列。

3、 查询STUDENT表的所有记录。

4、 查询SCORE表中成绩在60到80之间的所有记录。

5、 查询SCORE表中成绩为85,86或88的记录。

6、 查询STUDENT表中“95031”班或性别为“女”的同学记录。

7、 以CLASS降序查询STUDENT表的所有记录。

8、 以CNO升序、DEGREE降序查询SCORE表的所有记录。

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

10、查询SCORE表中的最高分的学生学号和课程号。

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

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

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

14、查询所有学生的SNAME、CNO和DEGREE列。

-15、查询所有学生的SNO、CNAME和DEGREE列。

--16、查询所有学生的SNAME、CNAME和DEGREE列。

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

--18、假设使用如下命令建立了一个GRADE表:

CREATE TABLE GRADE

(LOW NUMERIC(3,0),

UPP NUMERIC(3),

RANK CHAR(1))ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO GRADE VALUE(90,100,'A');

INSERT INTO GRADE VALUE(80,89,'B');

INSERT INTO GRADE VALUE(70,79,'C');

INSERT INTO GRADE VALUE(60,69,'D');

INSERT INTO GRADE VALUE(0,59,'E');

--现查询所有同学的SNO、CNO和RANK列。

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

--20、查询SCORE中选学一门以上课程的同学中分数为非最高分成绩的记录。

--21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

--22、查询和学号为108的同学同年出生的所有学生的SNO、SNAME和SBIRTHDAY列。

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

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

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

--26、查询存在有85分以上成绩的课程CNO。

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

--28、查询“计算机系”与“电子工程系“不同职称的教师的TNAME和PROF。

--29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的CNO、SNO和DEGREE,并按DEGREE从高到低次序排序。

--30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的CNO、SNO和DEGREE。

--31、查询所有教师和同学的NAME、SEX和BIRTHDAY。

--32、查询所有“女”教师和“女”同学的NAME、SEX和BIRTHDAY。

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

--34、查询所有任课教师的TNAME和DEPART。

--35、查询所有未讲课的教师的TNAME和DEPART。

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

--37、查询STUDENT表中不姓“王”的同学记录。

--38、查询STUDENT表中每个学生的姓名和年龄。

--39、查询STUDENT表中最大和最小的SBIRTHDAY日期值。

--40、以班号和年龄从大到小的顺序查询STUDENT表中的全部记录。

--41、查询“男”教师及其所上的课程。

--42、查询最高分同学的SNO、CNO和DEGREE列。

--43、查询和“李军”同性别的所有同学的SNAME。

--44、查询和“李军”同性别并同班的同学SNAME。

--45、查询所有选修“计算机导论”课程的“男”同学的成绩表。

参考答案:

use exam;

select * from student;

select * from teacher;

select * from course;

select * from score;

/*

1、 查询STUDENT表中的所有记录的SNAME、SSEX和CLASS列。

*/

select sname,ssex,class from student;

/*

2、 查询教师所有的单位即不重复的DEPART列。

*/

select distinct depart from teacher;

/*

3、 查询STUDENT表的所有记录。

*/

select * from student;

/*

4、 查询SCORE表中成绩在60到80之间的所有记录。

*/

select * from score where degree>60 and degree<80;

select * from score where degree between 60 and 80;

/*

5、 查询SCORE表中成绩为85,86或88的记录。

*/

select * from score where degree = 85 or degree=86 or degree=88;

select * from score where degree in (85,86,88);

select * from score where 1=1

/*

6、 查询STUDENT表中“95031”班或性别为“女”的同学记录。

*/

select * from student where class = '95031' or ssex = '女'

/*

7、 以CLASS降序查询STUDENT表的所有记录。

*/

select * from student order by class desc;

/*

8、 以CNO升序、DEGREE降序查询SCORE表的所有记录。

*/

select * from score order by cno asc,degree desc;

/*

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

*/

select count(*) as '95031班的人数为' from student where class='95031'

/*

10、查询SCORE表中的最高分的学生学号和课程号。

*/

select sno,cno from score where degree = (select max(degree) from score);

/*

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

*/

select avg(degree) from score where cno='3-105';

/*

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

*/

select avg(degree) from score where cno=(select cno from score group by cno having count(sno)>=5 and cno like '3%')

/*

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

*/

select * from score;

select sno from score group by sno having min(degree)>70 and max(degree)<90;

--14、查询所有学生的SNAME、CNO和DEGREE列。

SELECT STUDENT.SNAME,SCORE.CNO,SCORE.DEGREE FROM STUDENT,SCORE WHERE STUDENT.SNO=SCORE.SNO;

--15、查询所有学生的SNO、CNAME和DEGREE列。

SELECT T1.SNO,T2.CNAME,T1.DEGREE FROM SCORE T1,COURSE T2 WHERE T1.CNO=T2.CNO;

--16、查询所有学生的SNAME、CNAME和DEGREE列。

SELECT T1.SNAME,T2.CNAME,T3.DEGREE FROM STUDENT T1,COURSE T2,SCORE T3 WHERE T1.SNO=T3.SNO AND T3.CNO=T2.CNO;

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

SELECT T2.CNO,AVG(T2.DEGREE) AS '平均分' FROM STUDENT T1,SCORE T2 WHERE T1.SNO=T2.SNO AND T1.CLASS='95033' GROUP BY T2.CNO;

--18、假设使用如下命令建立了一个GRADE表:

CREATE TABLE GRADE

(LOW NUMERIC(3,0),

UPP NUMERIC(3),

RANK CHAR(1))ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO GRADE VALUE(90,100,'A');

INSERT INTO GRADE VALUE(80,89,'B');

INSERT INTO GRADE VALUE(70,79,'C');

INSERT INTO GRADE VALUE(60,69,'D');

INSERT INTO GRADE VALUE(0,59,'E');

--现查询所有同学的SNO、CNO和RANK列。

SELECT SNO,CNO,RANK FROM SCORE,GRADE WHERE DEGREE BETWEEN LOW AND UPP ORDER BY RANK;

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

SELECT T1.CNO,T1.SNO,T1.DEGREE FROM SCORE T1,SCORE T2 WHERE T1.CNO='3-105' AND T1.DEGREE>T2.DEGREE AND T2.SNO='109'AND T2.CNO='3-105';

--20、查询SCORE中选学一门以上课程的同学中分数为非最高分成绩的记录。

SELECT * FROM SCORE T1 WHERE T1.DEGREE<(SELECT MAX(T2.DEGREE) FROM SCORE T2 WHERE T1.CNO=T2.CNO);

--21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。

SELECT T1.CNO,T1.SNO,T1.DEGREE FROM SCORE T1,SCORE T2 WHERE T1.DEGREE>T2.DEGREE AND T2.SNO='109'AND T2.CNO='3-105';

--或

SELECT CNO,SNO,DEGREE FROM SCORE WHERE DEGREE>(SELECT DEGREE FROM SCORE WHERE SNO='109' AND CNO='3-105');

--22、查询和学号为108的同学同年出生的所有学生的SNO、SNAME和SBIRTHDAY列。

SELECT SNO,SNAME,SBIRTHDAY FROM STUDENT WHERE DATE_FORMAT(SBIRTHDAY,'%Y')=(SELECT DATE_FORMAT(SBIRTHDAY,'%Y') FROM STUDENT WHERE SNO='108');

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

SELECT CNO,SNO,DEGREE FROM SCORE WHERE CNO=(SELECT T1.CNO FROM COURSE T1,TEACHER T2 WHERE T1.TNO=T2.TNO AND T2.TNAME='张旭');

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

SELECT TNAME FROM TEACHER WHERE TNO IN(SELECT T1.TNO FROM COURSE T1,SCORE T2 WHERE T1.CNO=T2.CNO GROUP BY T1.TNO HAVING COUNT(T1.TNO)>5);

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

SELECT * FROM STUDENT WHERE CLASS IN('95033','95031');

--26、查询存在有85分以上成绩的课程CNO。

SELECT DISTINCT CNO FROM SCORE WHERE DEGREE IN(SELECT DEGREE FROM SCORE WHERE DEGREE>85);

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

SELECT * FROM SCORE WHERE CNO IN(SELECT T1.CNO FROM COURSE T1,TEACHER T2 WHERE T2.TNO=T1.TNO AND T2.DEPART='计算机系');

--28、查询“计算机系”与“电子工程系“不同职称的教师的TNAME和PROF。

SELECT TNAME,PROF FROM TEACHER WHERE DEPART='计算机系' AND PROF NOT IN(SELECT PROF FROM TEACHER WHERE DEPART='电子工程系');

--29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的CNO、SNO和DEGREE,并按DEGREE从高到低次序排序。

SELECT * FROM SCORE WHERE CNO='3-105' AND DEGREE>ANY(SELECT DEGREE FROM SCORE WHERE CNO='3-245') ORDER BY DEGREE desc;

--30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的CNO、SNO和DEGREE。

SELECT * FROM SCORE WHERE CNO='3-105' AND DEGREE>ALL(SELECT DEGREE FROM SCORE WHERE CNO='3-245');

--31、查询所有教师和同学的NAME、SEX和BIRTHDAY。

SELECT TNAME,TSEX,TBIRTHDAY FROM TEACHER UNION SELECT SNAME,SSEX,SBIRTHDAY FROM STUDENT;

--32、查询所有“女”教师和“女”同学的NAME、SEX和BIRTHDAY。

SELECT TNAME,TSEX,TBIRTHDAY FROM TEACHER WHERE TSEX='女' UNION SELECT SNAME,SSEX,SBIRTHDAY FROM STUDENT WHERE SSEX='女';

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

SELECT * FROM SCORE T1 WHERE T1.DEGREE<(SELECT AVG(T2.DEGREE) FROM SCORE T2 WHERE T1.CNO=T2.CNO);

--34、查询所有任课教师的TNAME和DEPART。

SELECT T1.TNAME,T1.DEPART FROM TEACHER T1 WHERE EXISTS(SELECT * FROM COURSE T2 WHERE T1.TNO=T2.TNO);

--35、查询所有未讲课的教师的TNAME和DEPART。

SELECT T1.TNAME,T1.DEPART FROM TEACHER T1 WHERE NOT EXISTS(SELECT * FROM COURSE T2 WHERE T1.TNO=T2.TNO);

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

SELECT CLASS FROM STUDENT WHERE SSEX='男'GROUP BY CLASS HAVING COUNT(*)>=2;

--37、查询STUDENT表中不姓“王”的同学记录。

SELECT * FROM STUDENT WHERE SNAME NOT LIKE'王_';

--38、查询STUDENT表中每个学生的姓名和年龄。

SELECT SNAME AS '姓名',(DATE_FORMAT(now(),'%Y')-DATE_FORMAT(SBIRTHDAY,'%Y')) AS '年龄' FROM STUDENT;

--39、查询STUDENT表中最大和最小的SBIRTHDAY日期值。

SELECT SNAME,SBIRTHDAY AS '最大' FROM STUDENT WHERE SBIRTHDAY=(SELECT MIN(SBIRTHDAY) FROM STUDENT)UNION SELECT SNAME,SBIRTHDAY AS '最小' FROM STUDENT WHERE SBIRTHDAY=(SELECT MAX(SBIRTHDAY) FROM STUDENT);

--40、以班号和年龄从大到小的顺序查询STUDENT表中的全部记录。

SELECT CLASS,SNAME,SBIRTHDAY FROM STUDENT ORDER BY CLASS DESC,SBIRTHDAY DESC;

--41、查询“男”教师及其所上的课程。

SELECT T1.TNAME,T2.CNAME FROM TEACHER T1,COURSE T2 WHERE T1.TNO=T2.TNO AND T1.TSEX='男';

--42、查询最高分同学的SNO、CNO和DEGREE列。

SELECT * FROM SCORE WHERE DEGREE=(SELECT MAX(DEGREE) FROM SCORE);

--43、查询和“李军”同性别的所有同学的SNAME。

SELECT SNAME FROM STUDENT WHERE SSEX=(SELECT SSEX FROM STUDENT WHERE SNAME='李军');

--44、查询和“李军”同性别并同班的同学SNAME。

SELECT SNAME FROM STUDENT WHERE SSEX=(SELECT SSEX FROM STUDENT WHERE SNAME='李军') AND CLASS=(SELECT CLASS FROM STUDENT WHERE SNAME='李军');

--45、查询所有选修“计算机导论”课程的“男”同学的成绩表。

SELECT * FROM SCORE WHERE SNO IN(SELECT SNO FROM STUDENT WHERE SSEX='男') AND CNO=(SELECT CNO FROM COURSE WHERE CNAME='计算机导论');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Ale-阿乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值