Sql Server中的謂詞和運算符


  

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

 

一、淺談謂詞

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

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

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

  

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

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

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

  

  SQL Server中有一些關鍵字可以替代謂詞語義的含義,也可以稱為SQL Server中的謂詞。

  其中常用的包括:

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

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

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

 

 

二、運算符

    比較運算符:

=(等於) 等於
>(大於) 大於
<(小於) 小於
>=(大於或等於) 大於或等於
<=(小於或等於) 小於或等於
<>(不等於) 不等於
!=(不等於) 不等於(非 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中運算符分為標准和非標准,如 “!=” 可用 "<>" 替代,建議使用標准的運算符。

 

 

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

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

 

    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數據類型。

 

 

 

四、運算符優先級

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

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

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

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

   

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM