SQL> select * from usertable; 
USERID           USERNAME 
-----------      ---------------- 
     1          user1 
     2          user2 
     3          user3 
     4          user4 
     5          user5 
      
SQL> select * from usergrade_2; 
USERNAME               GRADE 
----------------       ---------- 
user9                  90 
user8                  80 
user7                  80 
user2                  90 
user1                  100 
user1                  80 执行 Select count(*) from usertable t1 where exists 
  (select 'x' from usergrade_2 t2 where t1.username=t2.username and rownum <=1); 
给出你们的答案和解释(关键是你们怎么样理解)      谢谢!!!

解决方案 »

  1.   

    SELECT COUNT(*) FROM USERTABLE T1 
    WHERE T1.USERNAME IN (SELECT DISTINCT USERNAME FROM usergrade_2)
    选出表USERTABLE的USERNAME 在表usergrade_2存在的数量
      

  2.   

    筛选出usertable中这样的记录:存在usergrade_2中的一条记录,这条记录的username等于usergrade表中对于记录的user_name。
    统计usertable中符合这种条件的记录的数量
      

  3.   

    Select count(*) 
    from usertable t1 
    where exists (select 'x' from usergrade_2 t2 where t1.username=t2.username and rownum <=1); 
    ---------------
    查询有成绩的学生数量;问题1,
        exists的执行方式已经决定了,一旦发现一条就会退出,而不会完成对usergrade_2的完整查询,所以这里的rownum<=1应该是多余的;问题2,
        我看成绩表usergrade_2中使用了username存储学生信息,这是存在问题的,比如存在两个学生都叫user1的话就会导致本查询数据不准确。就算其中有一个没成绩,也会计算两个
      

  4.   

    Select count(*) from usertable t1 where exists (select 'x' from usergrade_2 t2 where t1.username=t2.username and rownum <=1); 统计usertable表中,按照username相等的条件,存在于usergrade_2表中的usertable表的数据量,rownum <=1为无用条件。这个结果应该是:2
      

  5.   


    支持这个.........rownum <=1可以去掉..多余的...........