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