两个表
sc(sno,cno,grade)
course(cno,cname)
找出选修计算机网络这门课成绩大于90的学生,
请问这样写为什么结果正确?
select sno
from sc
where cno in(
select cno from course 
where cname='网络' and grade>90)
究竟grade>90应该写在内层查询还是外层查询呢?

解决方案 »

  1.   

    显然错误course没有grade字段.select * from sc where grade >90 and cno in(select cno from where cname ='网络')或者
    select * from sc a,course b where grade>90 and a.cno=b.cno and b.cname='网络' 
      

  2.   


    select * from sc a,course b where grade>90 and a.cno=b.cno and b.cname='网络' 
      

  3.   

    这个语句可以执行的。
    就是我不明白,为什么grade写在内层也可以呢?
    这个查询的执行过程是怎么样的呢?
      

  4.   

    SELECT SNO FROM SC T 
    WHERE EXISTS(SELECT * FROM COURSE T1 WHERE T.CNO=T1.CNO AND T1.CNAME='网络'AND T.GRADE>90)
      

  5.   

    grade>90应该写在外层查询.因为表course没有grade字段。
    如下:
    create table sc(sno int,cno varchar(20),grade int)
    create table course(cno int,cname varchar(20))
    insert into sc select 2,'网络',95
    insert into course select 2,'网络'select sno 
    from sc 
    where cno in( 
    select cno from course 
    where cname='网络' ) 
    and grade>90
      

  6.   

    grade的条件加在内层和外层在这里没有区别,这里的查询都相当于
    select * from sc a,course b where grade>90 and a.cno=b.cno and b.cname='网络' 
    这样的查询语句,因为在course 表中确实没有存在grade的字段,如果存在,那么就会提示你grade不明确,如果是外层条件的话需要加在外边