SQL Server中EXISTS結構

來源:互聯網
上載者:User

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

  )

   你可以使用EXISTS操作來決定,是否對某一個單獨的記錄使用UPDATE或者INSERT語句,就像下面的例子一樣:

  IF EXISTS

  (

   SELECT * FROM SalesHistory

   WHERE SaleDate = '1/1/2001' AND

   Product = 'Computer' AND

   SalePrice = 1000

  )

   UPDATE TOP(1) SalesHistory

   SET SalePrice = 1100

   WHERE SaleDate = '1/1/2001' AND

   Product = 'Computer' AND

   SalePrice = 1000

  ELSE

   INSERT INTO SalesHistory

   (Product, SaleDate, SalePrice)

   VALUES

   ('Computer', '1/1/2001', 1100)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.