一个练习题,不知道怎么弄哦依据以下给出的关系,写出相应的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.   

    本帖最后由 roy_88 于 2010-05-06 12:32:35 编辑
      

  2.   

    首先谢谢  roy_88(中国风)  第一个问题的方法是对的,但是第二个问题的执行结果不对哦
      

  3.   

    现在  roy_88(中国风) 的改过之后对了,但是参考答案是这样的,不解啊……(1)、
    SELECT 学生.姓名,学生.学号
    FROM 学生,选课
    WHERE 学生.学号=选课.学号 AND AVG(成绩)>80(2)、
    SELECT 学生.姓名,学生.学号
    FROM 学生,选课
    WHERE 学生.学号=选课.学号 AND 课号='1' AND 课号='2'
      

  4.   

    --------------------SQL Server数据格式化工具-------------------
    ---------------------------------------------------------------
    -- 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 行受影响)
    */
      

  5.   

    可改為
    SELECT 学生.姓名,学生.学号
    FROM 学生,选课
    WHERE 学生.学号=选课.学号 
    GROUP BY 学生.姓名,学生.学号
    HAVING AVG(成绩)>80--不包括80SELECT 学生.姓名,学生.学号
    FROM 学生,选课
    WHERE 学生.学号=选课.学号 AND 课号 IN ('1' ,'2')
    GROUP BY 
    学生.姓名,学生.学号
    HAVING COUNT(1)=2