Mysql查询语句/课堂作业/期末题目

简单查询

(1) 查询所有学生的基本信息、所有课程的基本信息和所有学生的成绩信息(用三条SQL语句)。

SELECT * FROM student;

SELECT * FROM sc;

SELECT * FROM course;

(2) 查询所有学生的学号、姓名、性别和出生日期。

SELECT sno 学号,sname 姓名,ssex 性别,sbirthday 出生日期

FROM student;

(3) 查询所有课程的课程名称。

SELECT  DISTINCT  cname 

FROM  course;

(4) 查询前10门课程的课号及课程名称。

SELECT cno 课号,cname 课程名称

FROM course LIMIT 10;

(5) 查询所有学生的姓名及年龄。

SELECT sname 姓名,YEAR(CURDATE())-YEAR(sbirthday) 年龄

FROM student;

(6) 查询所有年龄大于18岁的女生的学号和姓名。

SELECT sname 姓名,sno 学号

FROM student

WHERE YEAR(CURDATE())-YEAR(sbirthday)>18 AND ssex='女';

(7) 查询所有男生的信息。

SELECT *

FROM student

WHERE ssex='男';

(8) 查询所有任课教师的姓名和所在系别。

SELECT tname,tdept

FROM teacher;

(9) 查询“电子商务”专业的学生姓名、性别和出生日期。

SELECT sname 姓名,ssex 性别,sbirthday 出生日期

FROM student

WHERE speciality='电子商务';

(10) 查询Student表中的所有系名。

SELECT DISTINCT sdept

FROM student;

(11) 查询“C01”课程的开课学期。

SELECT cterm

FROM teaching

WHERE cno='C01';

(12) 查询成绩在80~90分之间的学生学号及课号。

SELECT sno,cno

FROM sc

WHERE degree BETWEEN 80 AND 90;

(13) 查询在1970年1月1日之前出生的男教师信息。

SELECT *

 FROM teacher

 WHERE Tsex='男'

 AND Tbirthday < '1970-01-01';

(14) 输出有成绩的学生学号。

SELECT sno

FROM sc

WHERE degree IS NOT NULL;

(15) 查询所有姓“刘”的学生信息。

SELECT *

FROM student

WHERE sname LIKE '%刘%';

(16) 查询生源地不是山东省的学生信息。

SELECT *

FROM student

WHERE saddress NOT LIKE '%山东省%';

(17) 查询成绩为79分、89分或99分的记录。

SELECT *

FROM sc

WHERE degree = 79 OR degree=89 OR degree=99;

(18) 查询名字中第二个字是“小”字的男生的学生姓名和地址。

SELECT sname,saddress

FROM student

WHERE sname LIKE '_小%';

(19) 查询名称以“计算机”开头的课程名称。

SELECT cname

FROM course

WHERE cname LIKE '^计算机';

(20) 查询计算机工程系和软件工程系的学生信息。

SELECT *

FROM student

WHERE sdept='计算机工程系' OR sdept='软件工程系';

分组与排序

1、统计有学生选修的课程的门数

SELECT COUNT(DISTINCT cno)

#from course;

FROM sc;

2、计算"C01"课程的平均成绩

SELECT AVG(degree)

FROM sc

WHERE cno='C01';

3、查询选修了"C03"课程的学生的学号及其成绩,查询结果按分数降序排列

SELECT sno,degree

FROM sc

WHERE cno='C03'

ORDER BY degree DESC;

4、查询各个课程号及相应的选课人数

SELECT cno,COUNT(*) 选课人数

FROM sc

GROUP BY cno;

5、统计每门课程的选课人数和最高分

SELECT cno 课程号,COUNT(*) 选课人数,MAX(degree) AS 最高分

FROM sc

GROUP BY cno;

6、统计每个学生的选课门数和考试总成绩,并按选课门数降序排列

SELECT sno,COUNT(*) 选课门数,SUM(degree) 总成绩

FROM sc

GROUP BY sno

ORDER BY COUNT(*) DESC;

7、查询选修了3门以上课程的学生学号

SELECT sno

FROM sc

GROUP BY sno

HAVING COUNT(*)>3;

8、查询成绩不及格的学生学号及课程号,并按成绩降序排列

SELECT sno,cno

FROM sc

WHERE degree<60

GROUP BY sno

ORDER BY degree DESC;

9、查询至少选修一门课程的学生学号

SELECT sno

FROM sc

GROUP BY sno

HAVING COUNT(*)>=1;

10、统计输出各系学生的人数

SELECT sdept,COUNT(*)

FROM student

GROUP BY sdept;

11、统计各系的男、女生人数

SELECT sdept,ssex,COUNT(*)

FROM student

GROUP BY sdept,ssex;

12、统计各班级的学生人数

SELECT bno,COUNT(*)

FROM student

GROUP BY bno;

13、统计各班的男、女生人数

SELECT bno,ssex,COUNT(*)

FROM student

GROUP BY bno,ssex;

14、统计各系的老师人数,并按人数降序排列

SELECT tdept,COUNT(*)

FROM teacher

GROUP BY tdept

ORDER BY COUNT(*) DESC;

15、统计不及格人数超过10的课程号

SELECT cno 课程号,COUNT(*) 选修人数

FROM sc

GROUP BY cno

HAVING COUNT(*)>10;

16、查询软件工程系的男生信息,查询结果按出生日期升序排序,出生日期相同的按地址降序排序

SELECT *

FROM student

WHERE sdept='软件系' AND ssex='男'

ORDER BY sbirthday ASC, saddress DESC;

多表查询

#(1)查询计算机工程系女生的学生学号、姓名及考试成绩:SELECT A.sno 学号,sname 姓名,degree 成绩

SELECT A.sno 学号,A.sname 姓名,B.degree 考试成绩

FROM student A,sc B

WHERE A.sno=B.sno AND ssex='女' AND sdept='计算机工程系';

#(2)查询“自己”所选课程的名称、成绩。

SELECT sname 姓名,cno 课程,degree 成绩

FROM student A,sc B

WHERE A.sno=B.sno AND sname='吴兵';

#(3)查询“李新”教师所授课程的课程名称。

SELECT tname 姓名,cname 课程

FROM teacher A,course B,teaching C

WHERE A.tno=C.tno AND B.cno=C.cno AND tname='李新';

#(4)查询女教师所授课程的课程号及课程名称:

SELECT tname 姓名,cname 课程,B.cno 课程号

FROM teacher A,course B,teaching C

WHERE A.tno=C.tno AND B.cno=C.cno AND tsex='女';

#(5)查询至少选修了一门课程的女生姓名,

SELECT sname

FROM student A,sc B

WHERE A.sno=B.sno AND ssex='女'

GROUP BY A.sno

HAVING COUNT(cno)>=1;

#(6)查询姓“王”的学生所学的课称名称。

SELECT sname 姓名,cname 课程

FROM student A,course B,sc C

WHERE A.sno=C.sno AND B.cno=C.cno AND sname LIKE '%王%';

#(7)查询选修“数据库”课程且成绩在80-90分的学生学号及成绩

SELECT sno 学号,degree 成绩

FROM sc A,course B

WHERE  A.cno=B.cno AND B.cname LIKE '%数据库%'

HAVING degree BETWEEN 80 AND 90;

#(8)查询课程成绩及格的男生的学生信息、课程号与成绩。

SELECT A.*,cno 课程号,degree 成绩

FROM student A,sc B

WHERE A.sno=B.sno AND degree>60 AND ssex='男';

#(9)查询选修“C04”课程的学生的平均年龄。

SELECT AVG(YEAR(CURDATE())-YEAR(sbirthday)) 平均年龄

FROM student a,sc b

WHERE a.sno=b.sno AND cno='c04';

#(10)查询选修课程名为“数学”的学生学号和姓名。

SELECT A.sno 学号,sname 姓名

FROM student A,sc B,course C

WHERE A.sno=B.sno AND B.cno=C.cno AND cname LIKE '%数学';

#(11)查询“钱军”教师任课的课程号、选修其课程的学生的学号和和成绩。

SELECT B.cno 课程号,cname 课程名,sno 学号,degree 成绩

FROM sc A,course B,teacher C,teaching D

WHERE A.cno=B.cno AND B.cno=D.cno AND C.tno=D.tno

AND tname='钱军';

#(12)查询在第3学期所开课程的课程名称及学生的成绩。

SELECT degree,cname

FROM teaching a,sc b,course c

WHERE a.cno=b.cno AND b.cno=c.cno

AND cterm='3'

GROUP BY sno;

#(13)查询“C02”课程不及格的学生信息。

SELECT *

FROM sc a,student b

WHERE a.sno=b.sno AND cno='C02'

HAVING degree<60;

#(14)查询信息工程系成绩在90分以上的学生姓名、性别和课程名称。

SELECT sname 姓名,ssex 性别,cname 课程名称

FROM sc a,student b,course c

WHERE a.sno=b.sno AND a.cno=c.cno

AND sdept='信息工程系'

AND degree>90;

#(15)查询同时选修了“C04”和“C02”课程的学生姓名和成绩。

SELECT sname 姓名,b.degree 成绩,c.degree 成绩

FROM student a,sc b,sc c

WHERE a.sno=b.sno AND b.sno=c.sno

AND b.cno='C04' AND c.cno='C02'

GROUP BY sname;

嵌套:

#(1)查询“李勇”同学所选课程的成绩。

SELECT degree

FROM sc

WHERE EXISTS(SELECT cno

FROM student

WHERE student.sno=sc.sno AND sname='李勇');

#(2)查询“李新”教师所授课程的课程名称。

SELECT cname

FROM course a

WHERE EXISTS(

                  SELECT b.cno

                  FROM teaching b,teacher c

                  WHERE b.tno=c.tno AND b.cno=a.cno

                  AND tname='李新'

);

#(3)查询女教师所授课程的课程号及课程名称。

SELECT a.cno,cname

FROM course a

WHERE EXISTS(

                  SELECT cno

                  FROM teacher b,teaching c

                  WHERE b.tno=c.tno AND c. cno=a.cno

                  AND tsex='女'

);

#(4)查询姓“王”的学生所学的课程名称。

SELECT cname

FROM course a

WHERE EXISTS(

                  SELECT c.cno

                  FROM student b,sc c

                  WHERE a.cno=c.cno AND b.sno=c.sno

                  AND sname LIKE '王%'

);

#(5)查询“C02”课程不及格的学生信息。

SELECT *

FROM student

WHERE sno IN(

         SELECT sno

         FROM sc

         WHERE cno='c02'

         AND degree<60);

#(6)查询选修“数据库”课程且成绩在80-90分的学生学号及成绩。

SELECT sno,degree

FROM sc a

WHERE EXISTS(

                  SELECT cno

                  FROM course b

                  WHERE a.cno=b.cno

                  AND cname='数据库' AND degree BETWEEN 80 AND 90

);

#(7)查询选修“C04”课程的的学生平均年龄,

SELECT AVG(YEAR(CURDATE())-YEAR(sbirthday)) 平均年龄

FROM student a

WHERE EXISTS(

         SELECT a.sno

         FROM sc b

         WHERE a.sno=b.sno AND cno='c04'

);

#(8)查询选修课程名为“数学”的学生学号和姓名。

SELECT sno,sname

FROM student a

WHERE EXISTS(

         SELECT b.cno

         FROM sc b,course c

         WHERE b.cno=c.cno AND a.sno=b.sno

         AND cname LIKE '%数学%'

);

#(9)查询“钱军”教师任课的课程号、选修其课程的学生的学号和成绩。

SELECT sno,degree

FROM sc

WHERE cno=(

         SELECT cno

         FROM teaching

         WHERE tno=(

                  SELECT tno

                  FROM teacher

                  WHERE tname='钱军'

         )

);

#(10)查询在第3学期所开课程的课程名称及学生的成绩。

SELECT cno,degree

FROM sc

WHERE cno=ANY(

         SELECT cno

         FROM teaching

         WHERE cterm='3'

);

#(11)查询与“自己”同一个系的学生姓名。

SELECT sname

FROM student

WHERE sdept=(

         SELECT sdept

         FROM student

         WHERE sname='吴兵'

)AND sname<>'吴兵';

#(12)查询学号比“刘晨”学生的大,而出生日期比她的小的学生姓名。

SELECT sname

FROM student

WHERE (sno>(

         SELECT sno

         FROM student

         WHERE sname='刘晨'

         ))AND(sbirthday>(

         SELECT sbirthday

         FROM student

         WHERE sname='刘晨'

)               

);

#(13查询出生日期大于所有女生出生日期的男生的姓名及系别。

SELECT sname,sdept

FROM student

WHERE (sbirthday>ALL(

         SELECT sbirthday

         FROM student

         WHERE ssex='女'

))AND ssex='男';

#(14)查询成绩比该课程平均成绩高的学生的学号及成绩。

SELECT sno,degree

FROM sc

WHERE degree>=

(SELECT AVG(degree)

         FROM sc

         WHERE sc.cno=sc.cno

);

#(15)查询不讲授“C01"课的教师姓名。

SELECT tname

FROM teacher

WHERE  EXISTS(

         SELECT tno

         FROM teaching

         WHERE cno<>'c01'

);

#(16)查询没有选修“C02”课程的学生学号及姓名。

SELECT sno,sname

FROM student

WHERE sno IN(

         SELECT sno

         FROM sc

         WHERE cno<>'c02'

);

#(17)查询选修了“数据库”课程的学生学号、姓名及系别。

SELECT sno,sname,sdept

FROM student

WHERE sno IN(

         SELECT sno

         FROM sc

         WHERE cno=(

                  SELECT cno

                  FROM course

                  WHERE cname='数据库'

));

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值