问题一、用一条SQL语句 查询出每门课都大于80分的学生姓名  
name   course  score 
张三     语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90
问题二、学生表 如下:
自动编号   学号   姓名 课程编号 课程名称 分数
1        2005001  张三  0001      数学    69
2        2005002  李四  0001      数学    89
3        2005001  张三  0001      数学    69
删除除了自动编号不同,其他都相同的学生冗余信息

解决方案 »

  1.   

    select 
      *
    from
      tb t
    where 
      not exists(select 1 from tb where name=t.name and score<80)
      

  2.   

    select name 
    from tb
    group by name
    having min(score)>80
    delete from tb 
    where 自动编号
    not in
    select 自动编号
    from
    (
    select 学号,姓名,课程编号,程名称,分数,min(自动编号) as 自动编号
    from tb
    group by 学号,姓名,课程编号,程名称,分数 
    )T
      

  3.   

    1.
    select 
      name 
    from 
      tb 
    group by 
      name 
    having 
      min(score)>802.delete from tb 
    where 自动编号 
    not in 
    (select 自动编号 
    from 

    select 学号,姓名,课程编号,程名称,分数,min(自动编号) as 自动编号 
    from tb 
    group by 学号,姓名,课程编号,程名称,分数 
    )t) 
      

  4.   

    问题1:
    SELECT distinct t.name FROM 成绩表 t where t.name not in 
    (select distinct name from 成绩表 where score <=80)问题2:
    SELECT min(自动编号) as 自动编号,学号,姓名,课程编号,课程名称,分数 
    FROM 学生表 
    group by 学号,姓名,课程编号,课程名称,分数 
      

  5.   

    --2.
    delete from tb
    where
      exists(select 1 from tb t where t.学号=tb.学号 and t.姓名=tb.姓名 and t.课程编号=tb.课程编号 and t.课程名称=tb.课程名称 and t.分数=tb.分数 and t.自动编号>tb.自动编号)
      

  6.   

    select name 
    from tb 
    group by name 
    having min(score)>80