SQL Server的EXISTS結(jié)構(gòu)學(xué)習(xí)_Mssql數(shù)據(jù)庫教程
推薦:SQL Server 2005代理服務(wù)應(yīng)用軟件組成代理服務(wù)是一種復(fù)雜的技術(shù),具有很多可配置的移動組件。詳細信息如下: 信息 信息是指在服務(wù)代理應(yīng)用程序中調(diào)用的基本信息單元。對于服務(wù)代理來說,信息的接收總是按照其被發(fā)送的順序進行,并且保證僅發(fā)送和接收一次。同時保證信息不丟失。有時發(fā)送的信息不
有件東西我觀察了很多年,那就是很少有開發(fā)者會去使用SQL Server中的一個非常有用的東西——EXISTS結(jié)構(gòu)。你可以在各種情況中用到EXISTS結(jié)構(gòu),在這篇文章中我會向大家介紹其中的一些。
EXISTS結(jié)構(gòu)
EXISTS結(jié)構(gòu)是一個TSQL函數(shù),這個函數(shù)會就圓括號中的子查詢返回一個布爾變量。如果子查詢返回了任意行的話,這個結(jié)構(gòu)就返回真;否則,它就返回假。這個結(jié)構(gòu)特別適用于查詢表中是否存在某些記錄。它也非常適合來決定是否在表中運行更新或者插入語句(在這篇文章中,隨后我將向大家介紹)。
Listing A中創(chuàng)建了一個表并插入了一些數(shù)據(jù),這樣你就可以利用這張表來看看EXISTS結(jié)構(gòu)是如何工作的了。Listing B中的腳本使用EXISTS結(jié)構(gòu)在SalesHistory表中檢查每一行,并根據(jù)已存在的行得到一個變量。這個腳本將返回1(真),這意味著SalesHistory表包含你所要查詢的行。
在這種情況下,一旦在SalesHistory表中找到了一條記錄,EXISTS結(jié)構(gòu)就不會繼續(xù)查找,并馬上返回1。使用EXISTS結(jié)構(gòu)額外的好處就是,一旦它找到滿足條件的記錄,就會立即返回。
Listing C與上面的腳本類似,但是它的返回值是0,因為在這個條件下,EXISTS條件不滿足。
由于EXISTS結(jié)構(gòu)的工作原理,所以下面的語句所實現(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)
因為NULL在數(shù)據(jù)庫中是一個值(它是一個未知的值),在出現(xiàn)NULL值的地方EXISTS結(jié)構(gòu)都將返回真。
開發(fā)者很少使用EXISTS對子查詢進行操作。下面的查詢將返回同樣的結(jié)果集,雖然它們的結(jié)構(gòu)不同。第一個查詢使用了EXISTS的相關(guān)子查詢,第二查詢在SalesHistory表中,將SalePrice字段與該字段的總平均值進行比較。
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
)
分享:四個關(guān)于SQL Server 2005數(shù)據(jù)庫鏡像的問題一:什么是數(shù)據(jù)庫鏡像? Robidoux:數(shù)據(jù)庫鏡像是將數(shù)據(jù)庫事務(wù)處理從一個SQL Server數(shù)據(jù)庫移動到不同SQL Server環(huán)境中的另一個SQL Server數(shù)據(jù)庫中。鏡像的拷貝是一個備用的拷貝,不能直接訪問;它只用在錯誤恢復(fù)的情況下。 因為是在SQL Server 2005中新引入的特
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 解析Oracle到SQL Server主鍵遷移
- Sql Server安裝出錯,安裝程序配置服務(wù)器失敗的解決方法小結(jié)
- 解讀史上最簡單的方法復(fù)制或遷移Oracle數(shù)據(jù)庫
- 3個步驟結(jié)束網(wǎng)站惡夢-SQL注入隱患!
- SQL Server的Inner Join及Outer Join
- 解決sql server查詢速度慢11個方法
- SQL Server 2005深層工具和運行時間集
- 解讀數(shù)據(jù)庫設(shè)計正規(guī)化的五大范式
- 在sqlserver2005中安裝sql server 2000的示例數(shù)據(jù)庫northwind的方法
- SQL Server 2008中的代碼安全(六) 對稱密鑰加密
猜你也喜歡看這些
- 從mysql中導(dǎo)出單個表結(jié)構(gòu)和數(shù)據(jù)
- MySQL筆記之基本查詢的應(yīng)用詳解
- 解析csv數(shù)據(jù)導(dǎo)入mysql的方法
- 解析MYSQL 數(shù)據(jù)庫導(dǎo)入SQL 文件出現(xiàn)亂碼的問題
- mysql手動刪除BINLOG的方法
- Mysql高性能備份方案解決數(shù)據(jù)不間斷訪問
- MySQL筆記之?dāng)?shù)據(jù)類型詳解
- SQL字符型字段按數(shù)字型字段排序?qū)崿F(xiàn)方法
- mysql 將列值轉(zhuǎn)變?yōu)榱械姆椒?/a>
- mysql常用監(jiān)控腳本命令整理
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-SQL Server的EXISTS結(jié)構(gòu)學(xué)習(xí)
。