鍍金池/ 問答/Java  數(shù)據(jù)庫/ 子查詢中最后的sc_2=2,為什么不能換成sc=2呢?

子查詢中最后的sc_2=2,為什么不能換成sc=2呢?

查詢學(xué)過“001”并且也學(xué)過編號“002”課程的同學(xué)的學(xué)號、姓名;

select student.sid,student.sname from student,sc
where student.sid=sc.sid and sc.cid=1 and exists
(select * from sc as sc_2 where sc.sid=sc_2.sid and sc_2.cid=2)

為什么子查詢部分的最后必須是sc_2.cid=2,而用sc.cid=2會(huì)查到空的呢?
thanks for your anser.

回答
編輯回答
赱丅呿

sc.cid已經(jīng)被限定為1了。sc_2你可以當(dāng)做一張完全和sc一樣的表,但是不是sc。exists子查詢select * from table1 where [exist]subquery對表table1進(jìn)行遍歷,查看是否能通過子查詢,如果通過則當(dāng)前行滿足條件。
假設(shè)sc表保存了選了奇數(shù)編號課程(001,003...)的學(xué)生選擇情況,sc_2表保存了選了偶數(shù)編號課程(002,004...)的學(xué)生選擇情況,

select student.sid,student.sname from student,sc
where student.sid=sc.sid and sc.cid=1 and exists (select * from sc_2 where sc.sid=sc_2.sid and sc_2.cid=2)

這樣就比較清楚了。

看下exists子查詢的用法,中文翻譯。

2018年3月11日 16:24