1 回答

TA貢獻377條經(jīng)驗 獲得超508個贊
你好:
exists : 強調(diào)的是是否返回結(jié)果集,不要求知道返回什么, 比如:
?select?name?from?student?where?sex?=?'m'?and?mark?exists(select?1?from?grade?where?...)
只要exists引導的子句有結(jié)果集返回,那么exists這個條件就算成立了,大家注意返回的字段始終為1,如果改成“select?2 from grade where ...”,那么返回的字段就是2,這個數(shù)字沒有意義。所以exists子句不在乎返回什么,而是在乎是不是有結(jié)果集返回。
而 exists 與 in 最大的區(qū)別在于 in引導的子句只能返回一個字段,比如:
?select?name?from?student?where?sex?=?'m'?and?mark?in?(select?1,2,3?from?grade?where?...)
,in子句返回了三個字段,這是不正確的,exists子句是允許的,但in只允許有一個字段返回,在1,2,3中隨便去了兩個字段即可。
而not exists 和not in 分別是exists 和 in 的 對立面。
exists (sql 返回結(jié)果集為真)??
not exists (sql 不返回結(jié)果集為真)
下面詳細描述not exists的過程:
如下:
表A
ID NAME??
1?? A1
2?? A2
3?? A3
表B
ID AID NAME
1?? 1???? B1
2?? 2???? B2??
3?? 2???? B3
表A和表B是1對多的關(guān)系 A.ID => B.AID
SELECT?ID,NAME?FROM?A?WHERE?EXISTS?(SELECT?*?FROM?B?WHERE?A.ID=B.AID)
執(zhí)行結(jié)果為
1 A1
2 A2
望采納!
- 1 回答
- 5 關(guān)注
- 1460 瀏覽
添加回答
舉報