站長平臺有哪些交換友情鏈接的方法
目錄
帶有EXISTS謂詞的子查詢
exists謂詞
例子
not exists謂詞
例子
不同形式的查詢間的替換
用EXISTS/NOT EXISTS實(shí)現(xiàn)全稱量詞
用EXISTS/NOT EXISTS:實(shí)現(xiàn)邏輯蘊(yùn)涵
集合查詢
并操作UNION
交操作INTERSECT
差操作EXCEPT
基于派生表的查詢
select語句的基本格式
帶有EXISTS謂詞的子查詢
exists謂詞
EXISTS謂詞代表存在量詞,帶有EXISTS謂詞的子查詢只返回邏輯真值“true”或邏輯假值“false'”
例子
【例】查詢所有選修了1號課程的學(xué)生姓名。
SELECT Sname FROM Student ?WHERE EXISTS(SELECT FROM SC WHERE Sno=Student.Sno AND Cno=1')
將student表里的數(shù)據(jù)一條一條帶入到子查詢中,看是不是選修了課程號1的。
使用存在量詞EX1STS后,若內(nèi)層查詢結(jié)果非空,)則外層的WHERE子句返回真值;否則返回假值。
not exists謂詞
若內(nèi)層查詢結(jié)果非空,則外層的WHERE子句返回假值,若內(nèi)層查詢結(jié)果空則外層的WHERE子句返回真值
例子
查詢沒有選修1號課程的學(xué)生姓名。
SELECT Sname FROM Student WHERE NOT EXISTS(SELECT FROM SC WHERE Sno Student.Sno AND Cno =1')
不同形式的查詢間的替換
一些帶EXISTS或NOT EXISTS謂詞的子查詢不能被其他形式的子查詢等價替換;
所有帶IN謂詞、比較運(yùn)算符、 ANY和ALL謂詞的子查詢都能完成對EXISTS謂詞的子查詢等價替換。
用EXISTS/NOT EXISTS實(shí)現(xiàn)全稱量詞
SQL語言中沒有全稱量詞(For all)??梢园褞в腥Q量詞的謂詞轉(zhuǎn)換為等價的帶有存在量詞的謂詞
用EXISTS/NOT EXISTS:實(shí)現(xiàn)邏輯蘊(yùn)涵
SQL語言中沒有蘊(yùn)涵(Implication)邏輯運(yùn)算,可以利用謂詞演算將邏輯蘊(yùn)涵謂詞等價轉(zhuǎn)換
p推出q,q推不出p。
集合查詢
并操作UNION
SELECT *?FROM Student WHERE Sdept='CS UNION SELECT FROM Student WHERE Sage≤=19
UNION:將多個查詢結(jié)果合并起來,系統(tǒng)自動去掉重復(fù)元組
UNION ALL:將多個查詢結(jié)果合并起來時,保留重復(fù)元組。
交操作INTERSECT
查詢計(jì)算機(jī)科學(xué)系的學(xué)生氖年齡不大于19歲的學(xué)生的交集。
SELECT FROM Student WHERE Sdept='CS' INTERSECT SELECT FROM Student WHERE Sage<=19
差操作EXCEPT
【例】查詢計(jì)算機(jī)科學(xué)系的學(xué)生與年齡不大于19歲的學(xué)生的差集。
SELECT FROM Student WHERE Sdept='CS'; EXCEPT SELECT FROM Student WHERE Sage<=19;
查詢的結(jié)果在前面的集合里但不在后面的集合里。
基于派生表的查詢
????????子查詢不僅可以出現(xiàn)在WHERE子句中,還可以出現(xiàn)在FROM子句中,這時子查詢生成的臨時派生表(derived table)成為主查詢的查詢對象。
????????如果子查詢中沒有聚集函數(shù),派生表可以不指定屬性列,子查詢SELECT子句后面的列名為其默認(rèn)屬性。
select語句的基本格式
SELECT [ALL / DISTINCTI<目標(biāo)列表達(dá)式>[別名][<目標(biāo)列表達(dá)式>[別名]
FROM<表名或視圖名>[別名] <表名或視圖名>[別名
WHERE<條件表達(dá)式>
[GROUP BY<列名>
[HAVING<條件表達(dá)式>
[ORDER BY<列名2>[ASC / DESC]