自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何巧妙利用SQL Server的EXISTS結(jié)構(gòu)

數(shù)據(jù)庫(kù) SQL Server
很少有開發(fā)者會(huì)去使用SQL Server中的一個(gè)非常有用的東西——EXISTS結(jié)構(gòu)。你可以在各種情況中用到EXISTS結(jié)構(gòu),在這篇文章中我會(huì)向大家介紹其中的一些。

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

EXISTS結(jié)構(gòu)是一個(gè)TSQL函數(shù),這個(gè)函數(shù)會(huì)就圓括號(hào)中的子查詢返回一個(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)就不會(huì)繼續(xù)查找,并馬上返回1。使用EXISTS結(jié)構(gòu)額外的好處就是,一旦它找到滿足條件的記錄,就會(huì)立即返回。

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)

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

SELECT * FROM SalesHistory

WHERE EXISTS(SELECT NULL)
 

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

開發(fā)者很少使用EXISTS對(duì)子查詢進(jìn)行操作。下面的查詢將返回同樣的結(jié)果集,雖然它們的結(jié)構(gòu)不同。第一個(gè)查詢使用了EXISTS的相關(guān)子查詢,第二查詢?cè)赟alesHistory表中,將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
)

你可以使用EXISTS操作來決定,是否對(duì)某一個(gè)單獨(dú)的記錄使用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)
 

雖然在實(shí)際的環(huán)境中,你可能不會(huì)用到這里所介紹的例子,但是它們給你演示了如何利用EXISTS結(jié)構(gòu)來決定使用哪種DML類型。

相信通過上文的學(xué)習(xí),現(xiàn)在大家對(duì)EXISTS結(jié)構(gòu)也已經(jīng)有了大體的了解,EXISTS結(jié)構(gòu)的很多好處大家也是都能夠看的見的,下次,當(dāng)你寫查詢語句的時(shí)候,請(qǐng)記住要使用EXISTS結(jié)構(gòu)。它很容易掌握,使用也很方便,并且能在程序中給你提供很多便利。

【編輯推薦】

  1. SQL Server數(shù)據(jù)庫(kù)服務(wù)器高性能設(shè)置
  2. 測(cè)試SQL Server業(yè)務(wù)規(guī)則鏈接方法
  3. 對(duì)SQL Server聚集索引的指示綜合描述

 

責(zé)任編輯:迎迎 來源: 賽迪網(wǎng)
相關(guān)推薦

2010-07-12 13:57:55

SQL Server

2011-03-31 10:52:13

2011-05-12 13:07:28

SQL Server復(fù)制漏洞

2010-09-24 18:52:53

SQL中NOT EXI

2012-08-20 09:45:18

SQL Server

2016-03-30 09:58:16

2024-10-17 16:08:36

SQL 查詢SQL

2018-12-25 14:40:04

SQL ServerSQL語句數(shù)據(jù)庫(kù)

2010-07-08 16:44:21

SQL Server索

2010-07-06 10:19:15

SQL Server層

2010-10-21 14:43:46

SQL Server查

2018-11-02 10:46:08

硬盤SQL ServerIO

2011-04-02 11:28:10

SQL Server數(shù)報(bào)表數(shù)據(jù)庫(kù)快照

2009-10-22 09:52:41

域名郵箱安全

2011-08-31 15:21:07

windows7庫(kù)文件夾

2010-10-20 11:18:38

sql server復(fù)

2010-02-06 09:43:52

SQL Server

2010-07-15 16:42:32

數(shù)據(jù)庫(kù)引擎

2009-04-16 17:30:00

可伸縮管理集成

2011-03-18 14:54:52

SQL Server索引結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)