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); 给出你们的答案和解释(关键是你们怎么样理解) 谢谢!!!
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); 给出你们的答案和解释(关键是你们怎么样理解) 谢谢!!!
WHERE T1.USERNAME IN (SELECT DISTINCT USERNAME FROM usergrade_2)
选出表USERTABLE的USERNAME 在表usergrade_2存在的数量
统计usertable中符合这种条件的记录的数量
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的话就会导致本查询数据不准确。就算其中有一个没成绩,也会计算两个
支持这个.........rownum <=1可以去掉..多余的...........