SQL Server的EXISTS結構學習_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:SQL Server 2005代理服務應用軟件組成
      代理服務是一種復雜的技術,具有很多可配置的移動組件。詳細信息如下: 信息 信息是指在服務代理應用程序中調用的基本信息單元。對于服務代理來說,信息的接收總是按照其被發送的順序進行,并且保證僅發送和接收一次。同時保證信息不丟失。有時發送的信息不

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

      EXISTS結構

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

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

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

      Listing C與上面的腳本類似,但是它的返回值是0,因為在這個條件下,EXISTS條件不滿足。

      由于EXISTS結構的工作原理,所以下面的語句所實現的功能是一樣的。


      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在數據庫中是一個值(它是一個未知的值),在出現NULL值的地方EXISTS結構都將返回真。

      開發者很少使用EXISTS對子查詢進行操作。下面的查詢將返回同樣的結果集,雖然它們的結構不同。第一個查詢使用了EXISTS的相關子查詢,第二查詢在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
      )

      分享:四個關于SQL Server 2005數據庫鏡像的問題
      一:什么是數據庫鏡像? Robidoux:數據庫鏡像是將數據庫事務處理從一個SQL Server數據庫移動到不同SQL Server環境中的另一個SQL Server數據庫中。鏡像的拷貝是一個備用的拷貝,不能直接訪問;它只用在錯誤恢復的情況下。 因為是在SQL Server 2005中新引入的特

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2009-03-02
      相關Mssql數據庫教程