一个练习题,不知道怎么弄哦依据以下给出的关系,写出相应的SQL语句,并给出查询结果。
(1) 列出平均成绩80分以上的学生姓名及学号,并给出查询结果;
(2) 既学过“课程设计”又学过“高等数学”课程的所有学生的姓名及学号,并给出计算机查询结果。
注意:各表中除学分、成绩字段为数值型,其余字段均为字符型
表名:学生
学号 姓名 年级 专业
890237 陈立 89 软件
902783 李玉刚 90 应用
903829 王磊 90 软件
918327 张力 91 应用
928034 张帆 92 软件
表名:课程
课号 课名 开课教师 学分
1 课程设计 王立 4
2 高等数学 刘鸣 4
3 计算机基础 王惠 3
4 人工智能 张山 3表名:选课
学号 课号 成绩
890237 2 85
890237 3 90
890237 4 77
902783 1 67
902783 3 78
903829 1 84
903829 2 74
918327 1 68
928034 2 82
928034 1 93
(1) 列出平均成绩80分以上的学生姓名及学号,并给出查询结果;
(2) 既学过“课程设计”又学过“高等数学”课程的所有学生的姓名及学号,并给出计算机查询结果。
注意:各表中除学分、成绩字段为数值型,其余字段均为字符型
表名:学生
学号 姓名 年级 专业
890237 陈立 89 软件
902783 李玉刚 90 应用
903829 王磊 90 软件
918327 张力 91 应用
928034 张帆 92 软件
表名:课程
课号 课名 开课教师 学分
1 课程设计 王立 4
2 高等数学 刘鸣 4
3 计算机基础 王惠 3
4 人工智能 张山 3表名:选课
学号 课号 成绩
890237 2 85
890237 3 90
890237 4 77
902783 1 67
902783 3 78
903829 1 84
903829 2 74
918327 1 68
928034 2 82
928034 1 93
SELECT 学生.姓名,学生.学号
FROM 学生,选课
WHERE 学生.学号=选课.学号 AND AVG(成绩)>80(2)、
SELECT 学生.姓名,学生.学号
FROM 学生,选课
WHERE 学生.学号=选课.学号 AND 课号='1' AND 课号='2'
---------------------------------------------------------------
-- DESIGNER :happycell188(喜喜)
-- QQ :584738179
-- Development Tool :Microsoft Visual C++ 6.0 C Language
-- FUNCTION :CONVERT DATA TO T-SQL
---------------------------------------------------------------
-- Microsoft SQL Server 2005
-- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
---------------------------------------------------------------
---------------------------------------------------------------use test
go
if object_id('test.dbo.学生') is not null drop table 学生
-- 创建数据表
create table 学生
(
学号 char(8),
姓名 varchar(7),
年级 int,
专业 char(5)
)
go
--插入测试数据
insert into 学生 select '890237','陈立',89,'软件'
union all select '902783','李玉刚',90,'应用'
union all select '903829','王磊',90,'软件'
union all select '918327','张力',91,'应用'
union all select '928034','张帆',92,'软件'
go
if object_id('test.dbo.课程') is not null drop table 课程
-- 创建数据表
create table 课程
(
课号 char(3),
课名 varchar(15),
开课教师 varchar(7),
学分 int
)
go
--插入测试数据
insert into 课程 select '1','课程设计','王立',4
union all select '2','高等数学','刘鸣',4
union all select '3','计算机基础','王惠',3
union all select '4','人工智能','张山',3
go
if object_id('test.dbo.选课') is not null drop table 选课
-- 创建数据表
create table 选课
(
学号 char(8),
课号 char(3),
成绩 int
)
go
--插入测试数据
insert into 选课 select '890237','2',85
union all select '890237','3',90
union all select '890237','4',77
union all select '902783','1',67
union all select '902783','3',78
union all select '903829','1',84
union all select '903829','2',74
union all select '918327','1',68
union all select '928034','2',82
union all select '928034','1',93
go
--代码实现select 学号,姓名 from 学生
where 学号 in(
select 学号
from 选课
group by 学号
having avg(成绩)>80)/*测试结果学号 姓名
---------------------
890237 陈立
928034 张帆(2 行受影响)
*/
select 学号,姓名 from 学生
where 学号 in(
select 学号
from 选课 a,课程 b
where a.课号=b.课号
and (b.课名='课程设计'
or b.课名='高等数学')
group by 学号
having count(b.课号)=2 )/*测试结果学号 姓名
---------------------
903829 王磊
928034 张帆(2 行受影响)
*/
SELECT 学生.姓名,学生.学号
FROM 学生,选课
WHERE 学生.学号=选课.学号
GROUP BY 学生.姓名,学生.学号
HAVING AVG(成绩)>80--不包括80SELECT 学生.姓名,学生.学号
FROM 学生,选课
WHERE 学生.学号=选课.学号 AND 课号 IN ('1' ,'2')
GROUP BY
学生.姓名,学生.学号
HAVING COUNT(1)=2