官术网_书友最值得收藏!

4.5 運算符和表達式

運算符是一些符號,它們能夠用于執行算術運算、字符串連接、賦值以及在字段、常量和變量之間進行比較。在SQL Server 2016中,運算符主要有以下5大類:算術運算符、比較運算符、邏輯運算符、連接運算符以及按位運算符。表達式在SQL Server 2016中也有非常重要的作用,SQL語言中的許多重要操作也都需要使用表達式來完成,本節將介紹各類運算符的用法和有關表達式的詳細信息。

4.5.1 算術運算符

算術運算符可以在兩個表達式上執行數學運算,這兩個表達式可以是任何數值數據類型。Transact-SQL中的算術運算符如表4-3所示。

表4-3 Transact-SQL中的算術運算符

加法和減法運算符也可以對datetime和smalldatetime類型的數據執行算術運算。求余運算即返回一個除法運算的整數余數,例如表達式14%3的結果等于2。

4.5.2 比較運算符

比較運算符用來比較兩個表達式的大小,表達式可以是字符、數字或日期數據,其比較結果是布爾值。

比較運算符測試兩個表達式是否相同。除了text、ntext或image數據類型的表達式外,比較運算符可以用于所有的表達式。表4-4列出了Transact-SQL中的比較運算符。

表4-4 Transact-SQL中的比較運算符

4.5.3 邏輯運算符

邏輯運算符可以把多個邏輯表達式連接起來測試,以獲得其真實情況。返回帶有TRUE、FALSE或UNKNOWN值的Boolean數據類型。Transact-SQL中包含如下一些邏輯運算符:

  • ALL:如果一組的比較都為TRUE,那么就為TRUE。
  • AND:如果兩個布爾表達式都為TRUE,那么就為TRUE。
  • ANY:如果一組的比較中任何一個為TRUE,那么就為TRUE。
  • BETWEEN:如果操作數在某個范圍之內,那么就為TRUE。
  • EXISTS:如果子查詢包含一些行,那么就為TRUE。
  • IN:如果操作數等于表達式列表中的一個,那么就為TRUE。
  • LIKE:如果操作數與一種模式相匹配,那么就為TRUE。
  • NOT:對任何其他布爾運算符的值取反。
  • OR:如果兩個布爾表達式中的一個為TRUE,那么就為TRUE。
  • SOME:如果在一組比較中,有些為TRUE,那么就為TRUE。

4.5.4 連接運算符

加號(+)是字符串串聯運算符,可以將兩個或兩個以上字符串合并成一個字符串。其他所有字符串操作都使用字符串函數(如SUBSTRING)進行處理。

默認情況下,對于varchar數據類型的數據,在INSERT或賦值語句中,空的字符串將被解釋為空字符串。在串聯varchar、char或text數據類型的數據時,空的字符串被解釋為空字符串。例如,'abc' + '' + 'def'被存儲為'abcdef'。

4.5.5 按位運算符

按位運算符在兩個表達式之間執行位操作,這兩個表達式可以為整數數據類型類別中的任何數據類型。Transact-SQL中的按位運算符如表4-5所示。

表4-5 按位運算符

4.5.6 運算符的優先級

當一個復雜的表達式有多個運算符時,運算符優先級決定執行運算的先后次序。執行的順序可能嚴重地影響所得到的值。

運算符的優先級如表4-6所示。在較低級別的運算符之前先對較高級別的運算符進行求值,表4-6按運算符從高到低的順序列出了SQL Server中的運算符優先級別。

表4-6 SQL Server運算符的優先級

當一個表達式中的兩個運算符有相同的運算符優先級別時,將按照它們在表達式中的位置對其從左到右進行求值。當然,在無法確定優先級的情況下,可以使用圓括號()來改變優先級,并且這樣會使計算過程更加清晰。

4.5.7 什么是表達式

表達式是指用運算符和圓括號把變量、常量和函數等運算成分連接起來的有意義的式子,即使單個的常量、變量和函數也可以看成是一個表達式。表達式有多方面的用途,如執行計算、提供查詢記錄條件等。

4.5.8 Transact-SQL表達式的分類

根據連接表達式的運算符進行分類,可以將表達式分為算術表達式、比較表達式、邏輯表達式、按位表達式和混合表達式等;根據表達式的作用進行分類,可以將表達式分為字段名表達式、目標表達式和條件表達式。

1.字段名表達式

字段名表達式可以是單一的字段名或幾個字段的組合,還可以是由字段、作用于字段的集合函數和常量的任意算術運算(+、-、*、/)組成的運算表達式。主要包括數值表達式、字符表達式、邏輯表達式和日期表達式4種。

2.目標表達式

目標表達式有4種構成方式。

(1)*:表示選擇相應基表和視圖的所有字段。

(2)<表名>.*:表示選擇指定的基表和視圖的所有字段。

(3)集函數():表示在相應的表中按集函數操作和運算。

(4)[<表名>.]字段名表達式[,[<表名>.]<字段名表達式>]……:表示按字段名表達式在多個指定的表中選擇。

3.條件表達式

常用的條件表達式有以下6種。

(1)比較大小:應用比較運算符構成表達式,主要的比較運算符有“=”“>”“>=”“<”“<=”“!=”“<>”“!>”(不大于)“!<”(不小于)NOT(與比較運算符相同,對條件求非)。

(2)指定范圍:(NOT)BETWEEN…AND…運算符查找字段值在或者不在指定范圍內的記錄。BETWEEN后面指定范圍的最小值,AND后面指定范圍的最大值。

(3)集合(NOT)IN:查詢字段值屬于或者不屬于指定集合內的記錄。

(4)字符匹配:(NOT)LIKE ‘<匹配字符串>’[ESCAPE ‘<換碼字符>’]查找字段值滿足或不滿足<匹配字符串>中指定的匹配條件的記錄。<匹配字符串>可以是一個完整的字符串,也可以包含通配符“_”和“%”,“_”代表任意單個字符,“%”代表任意長度的字符串。

(5)空值IS(NOT)NULL:查找字段值為空(不為空)的記錄。NULL不能用來表示無形值、默認值、不可用值、以及取最低值或取最高值。SQL規定,在含有運算符“+”“-”“*”“/”的算術表達式中,若有一個值是空值,則該算術表達式的值也是空值;任何一個含有NULL比較操作結果的取值都為FALSE。

(6)多重條件AND和OR:AND表達式用來查找字段值同時滿足AND相連接的查詢條件的記錄。OR表達式用來查詢字段值滿足OR連接的查詢條件中任意一個的記錄。AND運算符的優先級高于OR運算符。

主站蜘蛛池模板: 金塔县| 长乐市| 吴旗县| 元江| 盐源县| 丰都县| 江达县| 潼南县| 庆云县| 西宁市| 龙口市| 交口县| 临武县| 云梦县| 阿巴嘎旗| 玉树县| 当涂县| 大埔县| 阿拉尔市| 宿州市| 彭阳县| 扎赉特旗| 湖南省| 木里| 新竹市| 新巴尔虎左旗| 原平市| 江山市| 腾冲县| 库尔勒市| 郓城县| 三亚市| 株洲市| 顺昌县| 上犹县| 邵阳市| 和田市| 高雄县| 邯郸市| 太和县| 新巴尔虎左旗|