1.用sql语句在“商学院教学管理”数据库中建立学生表、课程表、成绩表、教师表、授课表、班级表。实现下列要求:
1)按课本第99-100页表结构要求建立以上六张表。
2)在学生表中插入一个学生记录:(”99082901”,”程丽”,”女”,1981-2-10,”群众”, 200704”)。
insert into 学生 ( 学号, 姓名, 性别, 出生日期, 政治面貌, 班级编号 )
values ("99082901", 程丽", 女", ##, "群众", 200704");
3)使选修cz004号课的同学的成绩为null值。
update 成绩 set 分数 = null where 课程编号="cz004";
4)为课程表加一”教师”列。
alter table 课程 add 教师 text
5)修改课程表,使“肖贵”老师教cj001号课。
update 课程 set 教师 = 肖贵" where 课程编号="cj001";
6)列出“王勇”老师所授课程的课号和课名。
select 课程。课程编号, 课程。课程名称 from 课程, 授课, 教师。
where 课程。课程编号=授课。课程编号 and 授课。教师编号=教师。教师编号 and 教师。姓名="王勇";
或。select 课程。课程编号, 课程。课程名称。
from 课程 inner join (授课 inner join 教师 on 授课。教师编号=教师。教师编号) on 课程。课程编号=授课。课程编号。
where 教师。姓名="王勇";
7)列出年龄不小于20的男生的学号和姓名。
select 学号, 姓名 from 学生。
where 性别="男" and year(date())year(出生日期)>=20;
8)统计学生所选课程的门数。
select 学生。姓名, count(*)as 选课门数 from 学生, 成绩
where 学生。学号=成绩。学号 group by 学生。姓名;
9)列出选修cj001号课的学生的平均年龄。
select **g(year(date())year(学生。出生日期)) as 平均年龄 from 学生, 成绩。
where 学生。学号=成绩。学号 and 成绩。课程编号="cj001";
10)列出选修“计算机基础”课的学生的平均成绩、最高分和最低分。
select **g(成绩。分数) as 平均分, max(成绩。分数) as 最高分, min(成绩。分数) as 最低分。
from 成绩 inner join 课程 on 成绩。课程编号=课程。课程编号。
where 课程名称="计算机基础";
11)列出所有姓“李”的同学的姓名、年龄和性别。
select 姓名, year(date())year(出生日期) as 年龄, 性别 from 学生。
where 姓名 like "李*";
12)列出成绩表中成绩为空值的学生的姓名、课号。
select 学生。姓名, 成绩。课程编号
from 学生 inner join 成绩 on 学生。学号=成绩。学号 where 成绩。分数 is null;
13)列出年龄大于女生平均年龄的男生的姓名和年龄。
select 学生。姓名, year(date())year(出生日期) as 年龄 from 学生。
where ((学生。性别)="男") and ((year(date())year([出生日期]))select **g(year(date())year(出生日期)) from 学生 where 性别="女"))
14)删除成绩表中无成绩的记录。
delete * from 成绩 where 分数 is null;
15)把低于cj001号课平均成绩的所有同学的所有课程的成绩提高5分。
update 成绩 set 分数 = 分数+5
where 分数<(select **g(分数) from 成绩 where 课程编号="cj001");
16)按学号升序,成绩降序列出每个同学的选课情况(包括姓名、课名、成绩)。
select 学生。姓名, 课程。课程名称, 成绩。分数。
from 学生 inner join (成绩 inner join 课程 on 课程。课程编号=成绩。课程编号) on 学生。学号=成绩。学号。
order by 学生。学号, 成绩。分数 desc;
17)按课号和成绩降序列出每门课的选课情况包括课名、姓名、成绩。
select 课程。课程名称, 学生。姓名, 成绩。分数 from 课程, 学生, 成绩。
where 课程。课程编号=成绩。课程编号 and 学生。学号=成绩。学号。
order by 课程。课程编号 desc , 成绩。分数 desc;
18)按成绩降序列出每个同学的姓名、总成绩。
select 学生。姓名, sum(成绩。分数) as 总分。
from 学生, 成绩。
where ((学生。学号)=成绩。学号))
group by 学生。姓名, 学生。学号。
order by 2 desc;
19)求出学习全部课程的所有同学的名单。
select 学生。姓名。
from 学生, 成绩。
where 学生。学号=成绩。学号。
group by 成绩。学号, 学生。姓名。
h**ing (count(*)select count(*)from 课程));
20)列出平均成绩大与80分同学的学号和平均成绩,按平均成绩降序排列。
select 成绩。学号, **g(成绩。分数) as 平均分。
from 成绩。
group by 成绩。学号。
h**ing (**g(成绩。分数)>80)
order by 2 desc;
课后习题答案。
select 学号,姓名,性别,出生日期,政治面貌,**。
from 学生。
select 姓名,**g(分数) as 平均分。
from 学生,成绩。
where 学生。学号=成绩。学号。
group by 学生。学号,姓名。
select * from 教师 where 姓名=(select 姓名 from 教师 group by 姓名 h**ing count(*)2)
select * from 教师 where 教师编号 not in(select distinct 教师编号 from 授课)
或。select 教师。教师编号, 教师。姓名, 教师。性别。
from 教师 left join 授课 on 教师。教师编号 = 授课。教师编号。
where ((授课。教师编号) is null));
select * from 教师。
select 姓名,课程名称,分数 from 学生 inner join(成绩 inner join 课程 on 成绩。课程编号=课程。课程编号) on 学生。
学号=成绩。学号。
where 分数<60
order by 3
select * from 教师。
where (year(date())year(参加工作时间))>8
select 专业,count(*)as 党员人数 from 班级 inner join 学生 on 班级。班级编号=学生。班级编号。
where 政治面貌="中**员"
group by 专业。
或。select 班级。专业, count(学生。学号) as 党员人数。
from 班级 inner join 学生 on 班级。班级编号 = 学生。班级编号。
group by 班级。专业, 学生。政治面貌。
h**ing ((学生。政治面貌)="中**员"))
select 课程名称,**g(分数) as 平均成绩 from 课程,成绩
where 课程。课程编号=成绩。课程编号
group by 课程名称 order by 2 desc
select 学生。学号,姓名,sum(学分) as 总学分。
from 学生,课程,成绩。
where 学生。学号=成绩。学号 and 课程。课程编号=成绩。课程编号。
group by 学生。学号,姓名。
select 学生。学号,姓名,**g(分数) as 平均分。
from 学生,成绩。
where 学生。学号=成绩。学号
group by 学生。学号,姓名。
h**ing count(*)3
select 课程。课程编号,课程名称,**g(分数) as 平均分。
from 课程,成绩。
where 课程。课程编号=成绩。课程编号。
group by 课程。课程编号,课程名称。
h**ing count(*)3
SQL语句练习部分题目答案
1 6分 3分 分别用关系代数和sql语言查询至少选修了一门其直接先行课为5号课程的学生姓名。sname cpno 5 course sc student 或 sname cpno 5 course sc sno,sname student 或 sname sno cpno 5 course sc ...
SQL语句 无答案
一。sql语句。1 c226 下列关于sql语言特点的描述中,错误的是 a 语言非常简洁b 是一种一体化语言 c 是一种高度过程化的语 d 可以直接以命令方式交互使用,也可以程序方式使用。2 1103 7 负责数据库中查询操作的数据库语言是。a 数据定义语言 b 数据管理语言 c 数据操作语言 d ...
SQL查询语句练习
1 查询student表中的所有记录的sname ssex和class列。语句 select sname,ssex,class from student 查询结果 2 查询教师所有的单位即不重复的depart列。语句 select distinct depart from teacher 查询结果 ...