Sql Server中的謂詞和運算符

  

   謂詞和運算符配合使用是咱們獲得理想數據的最佳途徑。sql

 

1、淺談謂詞app

  謂詞的概念:一個運算結果爲True、False或Unknown的邏輯表達式。它的運用範圍有:where子句、Having子句、Check約束、聯接查詢的聯接條件等。less

示例1,用於實施數據完整性爲數據表添加約束:在員工表中,僅容許工資大於0的員工存儲在表中。其中的謂詞是「工資大於0」(SQL表達式:工資>0)。ide

示例2,用於查詢篩選數據的條件:查詢員工表要求只返回銷售部的員工。其中謂詞是「部門等於銷售部」(SQL表達式:部門='銷售部')。spa

  

  謂詞和運算符的相互使用:server

    1.經過邏輯運算符鏈接多個謂詞(邏輯表達式),如使用AND和OR。blog

    2.謂詞中使用比較運算符,如某個屬性值大於或小於某指定個值。ip

  

  SQL Server中有一些關鍵字能夠替代謂詞語義的含義,也能夠稱爲SQL Server中的謂詞。ci

  其中經常使用的包括:element

    1.IN,在...以內,檢查一個值是否存在於指定的集合內。     

    2.BETWEEN,檢查一個值是否在指定的區間範圍內,範圍包括兩個邊界值。

    3.LIKE,判斷字符串是否知足指定的格式,例如,查詢名字姓氏爲黃的員工(where name like '黃%')。

 

 

2、運算符

    比較運算符:

=(等於) 等於
>(大於) 大於
<(小於) 小於
>=(大於或等於) 大於或等於
<=(小於或等於) 小於或等於
<>(不等於) 不等於
!=(不等於) 不等於(非 ISO 標準)
!<(不小於) 不小於(非 ISO 標準)
!>(不大於) 不大於(非 ISO 標準)

   算術運算符:

+(加)
-(減)
*(乘)
/ (Divide)
%(取模) 返回一個除法運算的整數餘數。 例如,12 % 5 = 2,這是由於 12 除以 5,餘數爲 2。

    

    邏輯運算符:

ALL 若是一組的比較都爲 TRUE,那麼就爲 TRUE。
AND 若是兩個布爾表達式都爲 TRUE,那麼就爲 TRUE。
ANY 若是一組的比較中任何一個爲 TRUE,那麼就爲 TRUE。
BETWEEN 若是操做數在某個範圍以內,那麼就爲 TRUE。
EXISTS 若是子查詢包含一些行,那麼就爲 TRUE。
IN 若是操做數等於表達式列表中的一個,那麼就爲 TRUE。
LIKE 若是操做數與一種模式相匹配,那麼就爲 TRUE。
NOT 對任何其餘布爾運算符的值取反。
OR 若是兩個布爾表達式中的一個爲 TRUE,那麼就爲 TRUE。
SOME 若是在一組比較中,有些爲 TRUE,那麼就爲 TRUE。

 

     在SQL Server中運算符分爲標準和非標準,如 「!=」 可用 "<>" 替代,建議使用標準的運算符。

 

 

3、關於表達式中涉及兩個操做數的運算(重點)

  當表達式涉及兩個操做數使用算術運算符運算時,其運算結果的數據類型,根據兩方面斷定。

 

    1.兩個數據類型相同的數值進行運算,其結果數值的數據類型和兩個操做數的數據類型同樣:

    例如,兩個整數(int)相除生成一個整數,4/2返回整數類型2。

    根據這樣的一個定論,存在着一個隱患,例如用5/2的時候正常結果由於2.5,而後sql Server返回整數類型2。固然在建立表的時候能夠對此類型的列設爲小數類型,那就是5.0/2.0=2.5,

    但就此狀況非要運算,還要獲得正確的結果時。能夠像兩個操做數進行數據類型轉換,即:CAST(5 as Numeric(2,1)) / CAST(2 as Numeric(2,1))。

    Numeric(2,1)數據類型的含義:數值一共佔2位,其中小數佔一位

    

  2.數值數據的精度和小數位:

    精度的意思是數值中有多少位數,小數位指小數點精確到幾位,小數位的位數包含在精度裏,故指定數據類型的小數位必須小於小於指定的精度。

    

    3.兩個數據類不一樣的數值進行運算,其結果的數據類型爲兩操做數中數據類型優先級較高的數據類型:

      例如,5/2.0中,5的數據類型爲INT,2.0的數據類型爲NUMERIC。根據SQL Server的數據類型優先級的規則。斷定NUMERIC優先於INT,

      則,在運算以前會把操做數5隱式地轉換爲5.0,獲得結果就爲2.5(符合其定論)。

    

    4.SQL Server數據類型優先級順序:

      能夠查閱MSDN最新的「數據類型優先級順序」:https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017

      在查閱後能夠發現一個規律,就是在同一特定的範圍內,數據容量大的數據類型優先級大於數據容量小的數據類型。例如int和decimal後者的精度長度大於int,

      那麼在運算時能夠判斷decimal優先級較高與int,運算結果爲decimal數據類型。

 

 

 

4、運算符優先級

  SQL中出現複雜的表達式,那麼相應就會在表達式中出現多個運算符。那麼這個時候,就要依靠SQL Server中的運算符優先級規則,按順序計算。   

    運算符的優先級別以下表中所示。 在較低級別的運算符以前先對較高級別的運算符進行求值。

級別 運算符
1 ()圓括號
2 *(乘)、/(除)、%(取模)
3 +(正)、-(負)、+(加)、+(串聯)、-(減)、&(位與)、^(位異或)、|(位或)
4 =、>、<、>=、<=、<>、!=、!>、!<(比較運算符)
5 NOT
6 AND
7 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
8 =(賦值)

   因爲運算符數量不小,死記硬背下來要花點功夫。分析規律咱們能夠以類型來制定順序,記住個大概:(圓括號)>算術運算符>比較運算符>邏輯運算符。

相關文章
相關標籤/搜索