MySql专项练习题全套②

MySql专项练习题②

CREATE DATABASE db01;
USE db01;
– 学生表
CREATE TABLE student (Sno VARCHAR(20),Sname VARCHAR(20),Ssex VARCHAR(20),Sbirthday DATETIME,Class VARCHAR(20));
– 添加学生数据
INSERT INTO student VALUE (‘108’,‘曾华’,‘男’,‘1977-09-01’,‘95033’);
INSERT INTO student VALUE (‘105’,‘匡明’,‘男’,‘1975-10-02’,‘95031’);
INSERT INTO student VALUE (‘107’,‘王丽’,‘女’,‘1977-09-01’,‘95033’);
INSERT INTO student VALUE (‘101’,‘李军’,‘男’,‘1976-02-20’,‘95033’);
INSERT INTO student VALUE (‘109’,‘王芳’,‘女’,‘1975-02-10’,‘95031’);
INSERT INTO student VALUE (‘103’,‘陆君’,‘男’,‘1974-06-03’,‘95031’);

– 创建课程表
CREATE TABLE course (Cno VARCHAR(20),Cname VARCHAR(20),Tno VARCHAR(20));
– 添加课程数据
INSERT INTO course VALUE(‘3-105’,‘计算机导论’,‘825’);
INSERT INTO course VALUE(‘3-245’,‘操作系统’,‘804’);
INSERT INTO course VALUE(‘6-166’,‘数字电路’,‘856’);
INSERT INTO course VALUE(‘9-888’,‘高等数学’,‘831’);

– 创建分数表
CREATE TABLE score (Sno VARCHAR(20),Cno VARCHAR(20),Degree DECIMAL(4,1));
– 添加分数内容
INSERT INTO score VALUE(‘103’,‘3-245’,‘86’);
INSERT INTO score VALUE(‘105’,‘3-245’,‘75’);
INSERT INTO score VALUE(‘109’,‘3-245’,‘68’);
INSERT INTO score VALUE(‘103’,‘3-105’,‘92’);
INSERT INTO score VALUE(‘105’,‘3-105’,‘88’);
INSERT INTO score VALUE(‘109’,‘3-105’,‘76’);
INSERT INTO score VALUE(‘101’,‘3-105’,‘64’);
INSERT INTO score VALUE(‘107’,‘3-105’,‘91’);
INSERT INTO score VALUE(‘108’,‘3-105’,‘78’);
INSERT INTO score VALUE(‘101’,‘6-166’,‘85’);
INSERT INTO score VALUE(‘107’,‘6-166’,‘79’);
INSERT INTO score VALUE(‘108’,‘6-166’,‘81’);

– 创建教师表
CREATE TABLE teacher (Tno VARCHAR(20),Tname VARCHAR(20),Tsex VARCHAR(20),Tbirthday DATETIME,Prof VARCHAR(20),Depart VARCHAR(20));
– 添加教师数据
INSERT INTO teacher VALUE (‘804’,‘李诚’,‘男’,‘1958-12-02’,‘副教授’,‘计算机系’);
INSERT INTO teacher VALUE (‘856’,‘张旭’,‘男’,‘1969-03-12’,‘讲师’,‘电子工程系’);
INSERT INTO teacher VALUE (‘825’,‘王萍’,‘女’,‘1972-05-05’,‘助教’,‘计算机系’);
INSERT INTO teacher VALUE (‘831’,‘刘冰’,‘女’,‘1977-08-14’,‘助教’,‘电子工程系’);
/*
Sno 学号,Sname 学生姓名,Ssex 学生性别
Sbirthday 学生出生日期,Class 学生所在班级
Cno 课程号,Cname 课程名称,Tno 教工编号
Degree 成绩,Tno 教工编号,Tname 教工姓名
Tsex 教工性别,Tbirthday 教工出生日期,Prof 昵称
Depart 教工所在部门
*/

– 查询语句
– 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 BETWEEN 60 AND 80
– 5、查询Score表中成绩为85,86或88的记录。
SELECT * FROM score WHERE Degree IN (85,86,88);
– 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 Class 班级,COUNT() 人数 FROM student WHERE Class=‘95031’
– 10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
SELECT Sno,Cno,MAX(Degree) FROM score GROUP BY Cno
– 11、查询每门课的平均成绩。
SELECT Cno,AVG(Degree) FROM score GROUP BY Cno
– 12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
SELECT Cno,AVG(Degree) FROM score GROUP BY Cno HAVING COUNT(Cno)>5 AND Cno LIKE ‘3%’
– 13、查询分数大于70,小于90的Sno列。
SELECT Sno FROM score WHERE Degree BETWEEN 70 AND 90;
– 14、查询所有学生的Sname、Cno和Degree列。
SELECT Sname,Cno,Degree FROM student t1,score t2 WHERE t1.Sno=t2.Sno
– 15、查询所有学生的Sno、Cname和Degree列。
SELECT Sno,Cname,Degree FROM score t1,course t2 WHERE t1.Cno=t2.Cno
– 16、查询所有学生的Sname、Cname和Degree列。
SELECT Sname,Cname,Degree FROM student t1,score t2,course t3 WHERE t1.Sno=t2.Sno AND t2.Cno=t3.Cno
– 17、 查询“95033”班学生的平均分。
SELECT AVG(Degree) FROM score WHERE Sno IN(SELECT Sno FROM student WHERE Class=‘95033’)
– 18、假设使用如下命令建立了一个grade表:
CREATE TABLE grade(low INT(3),upp INT(3),rank VARCHAR(20));
INSERT INTO grade VALUES(90,100,‘A’);
INSERT INTO grade VALUES(80,89,‘B’);
INSERT INTO grade VALUES(70,79,‘C’);
INSERT INTO grade VALUES(60,69,‘D’);
INSERT INTO grade VALUES(0,59,‘E’);
– 现查询所有同学的Sno、Cno和rank列。
/
存储函数的使用
delimiter $
create procedure dengji(in degree int,out rank varchar(20))
begin
if degree >=90 and degree<=100 then
set rank=‘A’;
elseif degree >=80 AND degree<=89 THEN
SET rank=‘B’;
ELSEIF degree >=70 AND degree<=79 THEN
SET rank=‘C’;
ELSEIF degree >=60 AND degree<=69 THEN
SET rank=‘D’;
ELSE
SET rank=‘E’;
END IF;
end $
delimiter ;
call dengji(80,@rank);
select @rank;
*/

SELECT t1.sno,t1.cno,t2.rank FROM score t1,grade t2 WHERE t1.degree BETWEEN t2.low AND t2.upp

– 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
SELECT Degree FROM score WHERE Sno=‘109’ AND Cno=‘3-105’

SELECT t1.* FROM student t1,score t2 WHERE t1.Sno=t2.Sno AND t2.Cno=‘3-105’ AND t2.Degree>(SELECT Degree FROM score WHERE Sno=‘109’ AND Cno=‘3-105’)
– 20、查询score中选学多门课程的同学中分数为非最高分成绩的记录。
SELECT cno,MAX(Degree) FROM score GROUP BY Cno
SELECT Sno FROM score GROUP BY Sno HAVING COUNT(sno)>1

SELECT * FROM score WHERE sno IN (SELECT sno FROM score GROUP BY sno HAVING COUNT(sno)>1)
– 方式1 更加好理解
SELECT b.sno,b.cno,b.degree FROM (SELECT cno,MAX(Degree) deg FROM score GROUP BY Cno) a,
(SELECT * FROM score WHERE sno IN (SELECT sno FROM score GROUP BY sno HAVING COUNT(sno)>1)) b
WHERE a.cno=b.cno AND b.degree<a.deg

– 方式二
SELECT * FROM score a WHERE sno IN (SELECT sno FROM score GROUP BY sno HAVING COUNT(sno)>1) AND degree<(SELECT MAX(degree) FROM score b WHERE b.cno=a.cno)

– 21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
SELECT Degree FROM score WHERE Sno=‘109’ AND Cno=‘3-105’

SELECT t1.,t2. FROM student t1,score t2 WHERE t1.Sno=t2.Sno AND t2.Degree>(SELECT Degree FROM score WHERE Sno=‘109’ AND Cno=‘3-105’)

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

SELECT sno,sname,sbirthday FROM student WHERE sbirthday=(SELECT sbirthday FROM student WHERE sno=‘108’) AND sname != ‘曾华’
– 23、查询“张旭“教师任课的学生成绩。
– ***
SELECT Degree FROM score WHERE cno=( SELECT cno FROM course WHERE tno=(SELECT tno FROM teacher WHERE tname=‘张旭’))
– 较繁琐
SELECT t4.tname,t3.Sname,t2.Degree FROM course t1,score t2,student t3,teacher t4 WHERE t4.tno=t1.tno AND t1.cno=t2.Cno AND t2.Sno=t3.sno AND t4.tname=‘张旭’
– 24、查询选修某课程的同学人数多于5人的教师姓名。
SELECT cno FROM score GROUP BY cno HAVING COUNT(cno)>5;

SELECT * FROM teacher t1,course t2 WHERE t1.tno=t2.tno
AND t2.Cno IN (SELECT cno FROM score GROUP BY cno HAVING COUNT(cno)>5)
– 25、查询95033班和95031班全体学生的记录。
SELECT * FROM student WHERE Class=‘95033’ OR Class=‘95031’
/课程,分数,任课老师/
SELECT
t1.*,t2.Cname,t3.degree,t4.tname
FROM
student t1,
course t2,
score t3,
teacher t4

WHERE
t1.sno=t3.sno AND t2.Cno=t3.cno AND t2.tno=t4.tno

ORDER BY sno
– 26、 查询存在有85分以上成绩的课程Cno
SELECT DISTINCT t1.cname FROM course t1,score t2 WHERE t1.cno=t2.cno AND t2.degree>85
– 27、查询出“计算机系“教师所教课程的成绩表。
SELECT * FROM teacher t1,course t2,score t3 WHERE t1.tno=t2.Tno AND t2.cno=t3.cno AND t1.depart=‘计算机系’
– 28、查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。--------------------------------
SELECT prof FROM teacher WHERE depart = ‘计算机系’
SELECT prof FROM teacher WHERE depart =‘电子工程系’
– 分别查出两个系的职称,然后查出两个系相同的职称,再筛选,两个系中不含有这个职称的职称
SELECT Tname,Prof FROM teacher WHERE prof NOT IN (SELECT prof FROM teacher WHERE depart = '计算机系’AND prof IN (SELECT prof FROM teacher WHERE depart =‘电子工程系’))
AND (depart=‘计算机系’ OR depart =‘电子工程系’)

– 先查出相同职称的名称,在筛选
SELECT tname,prof FROM teacher WHERE prof NOT IN (SELECT prof FROM teacher GROUP BY prof HAVING COUNT(prof)>1) AND (depart=‘计算机系’ OR depart=‘电子工程系’)

– 29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
SELECT * FROM score WHERE cno=‘3-245’
SELECT * FROM score WHERE cno=‘3-105’ AND degree>(SELECT MAX(degree) FROM score WHERE cno=‘3-245’)
– 33、 查询成绩比该课程平均成绩低的同学的成绩表。
SELECT cno,AVG(degree) FROM score GROUP BY cno
SELECT * FROM score t1,(SELECT cno,AVG(degree) a FROM score GROUP BY cno) t2 WHERE t1.cno=t2.Cno AND t1.degree<t2.a
– 34、查询所有任课教师的Tname和Depart.
SELECT DISTINCT t3.tname,t3.depart FROM score t1,course t2,teacher t3 WHERE t1.cno=t2.Cno AND t2.Tno=t3.tno
– 35 、查询所有未讲课的教师的Tname和Depart.
SELECT tname,depart FROM teacher WHERE tname NOT IN (SELECT DISTINCT t3.tname FROM score t1,course t2,teacher t3 WHERE t1.cno=t2.Cno AND t2.Tno=t3.tno)
– 36、查询至少有2名男生的班号.
SELECT class,COUNT(ssex) a FROM student WHERE ssex=‘男’ GROUP BY class HAVING a>=2
– 37、查询Student表中不姓“王”的同学记录。
SELECT * FROM student WHERE Sname NOT LIKE ‘王%’
– 38、查询Student表中每个学生的姓名和年龄。
SELECT sname,YEAR(NOW())-YEAR(sbirthday) AS’年龄’ FROM student
SELECT NOW()
– 39、查询Student表中最大和最小的Sbirthday日期值。
SELECT MIN(sbirthday),MAX(sbirthday) FROM student
– 40、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT * FROM student ORDER BY class DESC,Sbirthday ASC
– 41、查询“男”教师及其所上的课程。
SELECT t1.*,t2.Cname FROM teacher t1,course t2 WHERE t1.Tno=t2.Tno AND t1.Tsex=‘男’
– 42、查询最高分同学的Sno、Cno和Degree列。

SELECT * FROM score WHERE degree IN (SELECT MAX(degree) FROM score)
– 43、查询和“李军”同性别的所有同学的Sname.

SELECT sname,class FROM student WHERE ssex IN (SELECT ssex FROM student WHERE sname=‘李军’) AND sname !=‘李军’
– 44、查询和“李军”同性别并同班的同学Sname.
SELECT class FROM student WHERE sname=‘李军’

SELECT
t1.sname
FROM
(SELECT sname,class FROM student WHERE ssex IN (SELECT ssex FROM student WHERE sname=‘李军’) AND sname !=‘李军’) t1

WHERE t1.class IN (SELECT class FROM student WHERE sname=‘李军’)

– 45、查询所有选修“计算机导论”课程的“男”同学的成绩表。
SELECT
*
FROM
course t1,
student t2,
score t3
WHERE
t1.cno=t3.cno AND t2.sno=t3.sno AND t1.cname=‘计算机导论’ AND t2.ssex=‘男’

  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值