关系数据库语言SQL课后练习题(二)


前言

本文在上篇文章的基础上难度有所上升,该习题包含select语句的完整语法。

一、题目

试用SQL查询语句表达下列对第3.2题中4个基本表T、C、S、SC的查询。
①统计有学生选修的课程门数。
②求选修C4课程的女学生的平均年龄。
③求LIU老师所授的每门课程的平均成绩。
④统计选修每门课程的学生人数(超过l0人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,则按课程号升序排列。
⑤检索学号比WANG同学大,而年龄比他小的学生姓名。
⑥在表SC中检索成绩为空值的学生的学号和课程号。
⑦检索姓名以L开头的所有学生的姓名和年龄。
⑧求年龄大于女同学平均年龄的男学生的姓名和年龄。
⑨求年龄大于所有女同学年龄的男学生的姓名和年龄。

二、解题步骤

2.1 统计有学生选修的课程门数。

代码如下:

SELECT COUNT(DISTINCT C#) FROM SC;

2.2 求选修C4课程的女学生的平均年龄。

代码如下:

SELECT AVG(AGE)
FROM S,SC
WHERE S.S#=SC.S# AND C#=’C4’AND SEX=’F’;

2.3 求LIU老师所授的每门课程的平均成绩。

代码如下:

SELECT C.C#.AVG(SCORE)
FROM SC,C,T
WHERE SC.C#=C.C# AND C.T#=T.T# AND TNAME=’LIU’
GROUP BY C.C#;

2.4 统计选修每门课程的学生人数(超过l0人的课程才统计)。要求显示课程号和人数,查询结果按人数降序排列,若人数相同,则按课程号升序排列。

代码如下:

SELECT C#.COUNT(S#)
FROM SC
GROUPBY C#
HAVING COUNT(*)>10
ORDER BY 2 DESC,1;

2.5 检索学号比WANG同学大,而年龄比他小的学生姓名。

代码如下:

SELECT SNAME
FROM S
WHERE S#>ALL(SELECT S# FROM S
WHERE SNAME=’WANG’)
AND AGE
FROM S
WHERE SNAME=’WANG);

2.6 在表SC中检索成绩为空值的学生的学号和课程号。

代码如下:

SELECT S#.C#
FROM SC
WHERE SCORE IS NULL

2.7 检索姓名以L开头的所有学生的姓名和年龄。

代码如下:

SELECT SNAME.AGE
FROM S
WHERE SNAME LIKE’L%’;

2.8 求年龄大于女同学平均年龄的男学生的姓名和年龄。

代码如下:


SELECT SNAME.AGE
FROM S
WHERE SEX=’M’
AND AGE>(SELECT AVG(AGE)
FROM S
WHERE SEX=’F’);

2.9 求年龄大于所有女同学年龄的男学生的姓名和年龄。

代码如下:

SELECT SNAME,AGE
FROM S
WHERE SEX=-‘M’
AND AGE>ALL(SELECT AGE
FROM S
WHERE SEX=’F’);

总结

总体来讲本题难度不大,只需读者熟练对select完整语句的使用。

猜你喜欢

转载自blog.csdn.net/Skylar_tramp/article/details/114749428