--练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。
select 姓名,性别,班主任 from 学生,班级 where 学生.班级编号=班级.班级编号 and 已修学分<20--练习题02:查找出学生“王林”的班主任。
select 班主任 from 班级 where 班级编号 in(select 班级编号 from 学生 where 姓名='王林')--练习题03:查找出班主任“刘成河”班的全部男生的信息。
select 学生.* from 学生,班级 where 性别='男' and 班主任='刘成河' and 学生.班级编号=班级.班级编号--练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。
Select 学生.学号,姓名,班级名称,分数 from 学生,成绩,课程,班级 where 课程名称='中国历史'and 课程.课程编号=成绩.课程编号 and 学生.学号=成绩.学号 and 学生.班级编号=班级.班级编号 and 分数>=60--练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:Select 姓名,课程名称,分数 from 学生,课程,成绩 where 课程.课程编号=成绩.课程编号and 学生.学号=成绩.学号--练习题01:查找出班主任“刘成河”班的全部男生的信息。
Select*from 学生 where 性别='男' and 班级编号 in(select 班级编号 from 班级 where 班主任='刘成河')--练习题02:查找出考试全及格的课程名称。
Select 课程名称 from 课程 where 课程编号 not in (select 课程编号 from 成绩 where 分数<60)select 课程名称from 课程where not exists(select *from 成绩where 成绩.课程编号=课程.课程编号 and 分数<60)--练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。
select 班级名称from 班级where 总人数>0 and 班级编号 not in(select 班级编号from 学生where 学号 in(select 学号from 成绩where 分数<60))--练习题04:使用多表查询实现例1。
Select 学生.学号,姓名 from 学生,成绩 where 学生.学号=成绩.学号 and 分数>=95--练习题05:使用多表查询实现例2。
Select 学生.学号,姓名 from 学生,成绩,课程 where 学生.学号=成绩.学号and 成绩.课程编号=课程.课程编号 and 分数>=95 and 课程名称='计算机应用'--练习题06:查找出“数学专业”班全体同学的姓名和“数学”课程考试分数。
SELECT 姓名,分数from 学生,成绩where 学生.学号=成绩.学号and 班级编号in(select 班级编号 from班级 where 班级名称='数学专业' ) and 课程编号 in(select 课程编号 from 课程 where 课程名称='数学')--例1:查找出那些还没有学生的班级名称。
SELECT 班级名称 FROM 班级 WHERE NOT EXISTS (SELECT * FROM 学生 WHERE 学生.班级编号=班级.班级编号)--例2:检索出每个学生都选修了的课程(并且考试都及格)。
SELECT 课程编号,课程名称 FROM 课程 WHERE NOT EXISTS(SELECT 学号 FROM 学生 WHERE NOT EXISTS(SELECT * FROM 成绩WHERE 课程.课程编号=成绩.课程编号 AND 学生.学号=成绩.学号 AND 分数>=60))--练习题01:写出可实现例1要求的其他命令。
Select 班级名称 from 班级 where 班级编号 not in(select 班级编号 from 学生)--练习题02:写出可实现例2要求的其他命令。
SELECT 课程编号,课程名称 FROM 课程 WHERE 课程编号 NOT in(SELECT 课程编号 FROM 成绩WHERE 分数>=60)UPDATE 学生 SET 已修学分=(SELECT SUM(学分) FROM 成绩,课程WHERE 学生.学号=成绩.学号 AND 分数>=60 AND 成绩.课程编号=课程.课程编号)--练习题03:查找出已修学分在15和20之间的学生的信息。
Select*from 学生 where 已修学分 between 15 and 20--练习题04:查找出1983年6月1日至1984年6月1日之间出生的少数民族学生的信息。
UPDATE 学生 SET 民族=(SELECT 民族 FROM 学生B WHERE 学生.学号=学生B.学号)Select*from 学生 where 出生日期 between '1983-6-1' and '1984-6-1' and 民族<> '汉族'--练习题05:查找出已修学分在15和20之间、且“自然辨证法”课程的考试分数达到80分的学生的姓名、性别、所在班级。
select 姓名,性别,班级名称 from 学生,班级 where 班级.班级编号=学生.班级编号 and已修学分 between 15 and 20 and 学号 in (select 学号 from 成绩 where 分数>80 and 课程编号 in(select 课程编号 from 课程 where 课程名称='自然辨证法'))--练习题06:查找出姓名中包含有“林”的学生的信息。
select *from 学生where 姓名 like '%林%'--练习题07:查找出姓名中第二个字是“林”的学生的信息。
select *from 学生where 姓名 like '_林%'--练习题08:查找出班主任“郭大壮”的班中出生地是武汉的学生的姓名、班级。
Select 姓名,班级名称 from 学生,班级 where 班主任='郭大壮' and出生地 like '%武汉%' and 学生.班级编号=班级.班级编号--练习题09:查找出至少参加了辛有余老师所任课程中一门课程考试的男生的姓名。
至少写出两条不同的命令。
select distinct 姓名 from 学生,课程 where 性别='男' and 任课老师='辛有余' and exists (select*from 成绩 where 学生.学号=成绩.学号 and 成绩.课程编号=课程.课程编号)select distinct 姓名 from 学生 where 性别='男' and 学号 in (select 学号 from 成绩where 课程编号 in (select 课程编号 from 课程 where 任课老师='辛有余'))--练习题01:计算出“软件工程”和“计算机应用”两个班全体同学的平均已修学分。
--注意:当子查询的结果只有一个数据时,可以用等号;为多个数据时,需用 IN。
SELECT AVG(已修学分) FROM 学生 WHERE 班级编号 IN(SELECT 班级编号 FROM 班级WHERE 班级名称='软件工程' or 班级名称='计算机专业')--练习题02:计算出李建同学各门课程考试总分。
Select sum(分数) from 成绩 where 学号 in (select 学号 from 学生 where 姓名='李建')--练习题04:计算出各门课程考试的平均分数。
select 课程编号,avg(分数)as 均分 from 成绩 group by 课程编号--练习题05:计算出各位学生的考试总分。
Select 学号,sum(分数) as 考试总分 from 成绩 group by 学号--练习题06:计算出辛有余老师所任课程中每门课程的课程编号和学生平均考试分数。
Select 课程.课程编号,avg(分数) as 平均考试分数 from 课程,成绩 where 课程.课程编号=成绩.课程编号 and任课老师='辛有余' group by 课程.课程编号--练习题07:查找和计算出各门课程的名称及其考试的平均分数。
select 课程名称,均分from 课程,( select 课程编号,avg(分数)as 均分from 成绩group by 课程编号)as jfwhere 课程.课程编号=jf.课程编号--练习题08:查找和计算出各门课程的名称及其考试达到90分的人数。
select 课程名称,count(*) as 人数from 课程,成绩where 课程.课程编号=成绩.课程编号 and 分数>=90group by 课程名称--练习题10:查找出考试成绩优秀人数多于3人的课程编号及其学生人数(假定考试分数达到90分为优秀)。
Select 课程编号,count(*) as 优秀学生人数 from 成绩 where 分数>=90group by 课程编号 having count(*)>3--练习题11:查找出考试成绩优秀人数多于3人的课程名称及其学生人数(假定考试分数达到90分为优秀)。
Select 课程名称,count(*) as 优秀学生人数 from 成绩,课程 where 分数>=90 and成绩.课程编号=课程.课程编号 group by 课程名称 having count(*)>3--练习题12:查找出考试成绩优秀人次多于5人次的班级名称及其人次(假定考试分数达到90分为优秀)。
Select 班级名称,count(*) as 优秀学生人数 from 成绩,班级,学生 where 分数>=90and 班级.班级编号=学生.班级编号 and 学生.学号=成绩.学号group by 班级名称 having count(*)>5--练习题13:查找出考试分数标准差小于10、且最高分与最低分之差小于20的各班(班级名称)各门课程(课程名称)的考试人数,考试分数的最高分、最低分、平均分、标准差、方差。