用一条SQL语句 查询出每门课都大于80分的学生姓名
设表为A
name   kecheng   fenshu 
张三     语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90
要求:用exists实现

解决方案 »

  1.   

    SELECT DISTINCT name FROM TTT A WHERE NOT EXISTS(SELECT 1 FROM TTT WHERE A.name=name AND VAL( fenshu)<80 )
      

  2.   

    用 exists 还真的不会……
    mysql> select * from A;
    +------+---------+--------+
    | name | kecheng | fenshu |
    +------+---------+--------+
    | 张三 | 语文    |     81 |
    | 张三 | 数学    |     75 |
    | 李四 | 语文    |     76 |
    | 李四 | 数学    |     90 |
    | 王五 | 语文    |     81 |
    | 王五 | 数学    |    100 |
    | 王五 | 英语    |     90 |
    +------+---------+--------+
    7 rows in set (0.00 sec)mysql> select * from A where exists(select * from A as B where A.name = B.name g
    roup by name having min(fenshu) >= 80);
    +------+---------+--------+
    | name | kecheng | fenshu |
    +------+---------+--------+
    | 王五 | 语文    |     81 |
    | 王五 | 数学    |    100 |
    | 王五 | 英语    |     90 |
    +------+---------+--------+
    3 rows in set (0.00 sec)mysql> select name from A group by name having min(fenshu) >= 80;
    +------+
    | name |
    +------+
    | 王五 |
    +------+
    1 row in set (0.00 sec)
      

  3.   

    SELECT DISTINCT name FROM TTT A WHERE NOT EXISTS(SELECT 1 FROM TTT WHERE A.name=name AND fenshu<80 )
      

  4.   

    select * from A 
    where exists(select * from A as B where A.name = B.name g roup by name having fenshu >= 80); 
      

  5.   

    提供的答案太不好啦,
    select t.name
    from STUDENT t
    group by t.name
    having min(t.fenshu)>80