謂詞和運算符配合使用是咱們獲得理想數據的最佳途徑。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 | =(賦值) |
因爲運算符數量不小,死記硬背下來要花點功夫。分析規律咱們能夠以類型來制定順序,記住個大概:(圓括號)>算術運算符>比較運算符>邏輯運算符。