国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server的EXISTS結(jié)構(gòu)學(xué)習(xí)

2024-08-31 00:46:06
字體:
供稿:網(wǎng)友

有件東西我觀察了很多年,那就是很少有開發(fā)者會去使用SQL Server中的一個(gè)非常有用的東西——EXISTS結(jié)構(gòu)。你可以在各種情況中用到EXISTS結(jié)構(gòu),在這篇文章中我會向大家介紹其中的一些。

EXISTS結(jié)構(gòu)

EXISTS結(jié)構(gòu)是一個(gè)TSQL函數(shù),這個(gè)函數(shù)會就圓括號中的子查詢返回一個(gè)布爾變量。如果子查詢返回了任意行的話,這個(gè)結(jié)構(gòu)就返回真;否則,它就返回假。這個(gè)結(jié)構(gòu)特別適用于查詢表中是否存在某些記錄。它也非常適合來決定是否在表中運(yùn)行更新或者插入語句(在這篇文章中,隨后我將向大家介紹)。

Listing A中創(chuàng)建了一個(gè)表并插入了一些數(shù)據(jù),這樣你就可以利用這張表來看看EXISTS結(jié)構(gòu)是如何工作的了。Listing B中的腳本使用EXISTS結(jié)構(gòu)在SalesHistory表中檢查每一行,并根據(jù)已存在的行得到一個(gè)變量。這個(gè)腳本將返回1(真),這意味著SalesHistory表包含你所要查詢的行。

在這種情況下,一旦在SalesHistory表中找到了一條記錄,EXISTS結(jié)構(gòu)就不會繼續(xù)查找,并馬上返回1。使用EXISTS結(jié)構(gòu)額外的好處就是,一旦它找到滿足條件的記錄,就會立即返回。

Listing C與上面的腳本類似,但是它的返回值是0,因?yàn)樵谶@個(gè)條件下,EXISTS條件不滿足。

由于EXISTS結(jié)構(gòu)的工作原理,所以下面的語句所實(shí)現(xiàn)的功能是一樣的。


SELECT * FROM SalesHistory

WHERE EXISTS(SELECT NULL)

SELECT * FROM SalesHistory

WHERE 1 = 1

SELECT * FROM SalesHistory

WHERE EXISTS(SELECT 1)

在剛才的腳本中,你可能會對下面的語句感到迷惑:

SELECT * FROM SalesHistory

WHERE EXISTS(SELECT NULL)

因?yàn)镹ULL在數(shù)據(jù)庫中是一個(gè)值(它是一個(gè)未知的值),在出現(xiàn)NULL值的地方EXISTS結(jié)構(gòu)都將返回真。

開發(fā)者很少使用EXISTS對子查詢進(jìn)行操作。下面的查詢將返回同樣的結(jié)果集,雖然它們的結(jié)構(gòu)不同。第一個(gè)查詢使用了EXISTS的相關(guān)子查詢,第二查詢在SalesHistory表中,將SalePrice字段與該字段的總平均值進(jìn)行比較。


SELECT * FROM SalesHistory sh

WHERE EXISTS

(
SELECT AVG(SalePrice)

FROM SalesHistory shi

HAVING AVG(SalePrice) > sh.SalePrice
)
SELECT * FROM SalesHistory sh

WHERE SalePrice <

(
SELECT AVG(SalePrice)

FROM SalesHistory shi
)

共2頁上一頁12下一頁
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊川县| 宝兴县| 莱西市| 河西区| 山东省| 望谟县| 连山| 上栗县| 保康县| 温州市| 黄山市| 连云港市| 泰宁县| 四平市| 凤翔县| 浠水县| 竹北市| 都安| 新绛县| 隆昌县| 丰台区| 怀仁县| 绥芬河市| 德庆县| 湄潭县| 西宁市| 乐山市| 锦州市| 杭锦旗| 襄汾县| 麻阳| 吉安县| 延边| 佛冈县| 汪清县| 遵义市| 亚东县| 镇坪县| 青海省| 蓬安县| 永定县|