天天看點

第04章 MySQL運算符詳解

算術運算符主要用于數學運算,其可以連接配接運算符前後的兩個數值或表達式,對數值或表達式進行加(+)、減(-)、乘(*)、除(/)和取模(%)運算。

第04章 MySQL運算符詳解

1.加法與減法運算符

由運算結果可以得出如下結論:

一個整數類型的值對整數進行加法和減法操作,結果還是一個整數; 一個整數類型的值對浮點數進行加法和減法操作,結果是一個浮點數; 加法和減法的優先級相同,進行先加後減操作與進行先減後加操作的結果是一樣的; 在Java中,+的左右兩邊如果有字元串,那麼表示字元串的拼接。但是在MySQL中+隻表示數值相加。如果遇到非數值類型,先嘗試轉成數值,如果轉失敗,就按0計算。(補充:MySQL中字元串拼接要使用字元串函數CONCAT()實作)

2.乘法與除法運算符

一個數乘以整數1和除以整數1後仍得原數; 一個數乘以浮點數1和除以浮點數1後變成浮點數,數值與原數相等; 一個數除以整數後,不管是否能除盡,結果都為一個浮點數; 一個數除以另一個數,除不盡時,結果為一個浮點數,并保留到小數點後4位; 乘法和除法的優先級相同,進行先乘後除操作與先除後乘操作,得出的結果相同。 在數學運算中,0不能用作除數,在MySQL中,一個數除以0為NULL。

3.求模(求餘)運算符

将t22表中的字段i對3和5進行求模(求餘)運算。

可以看到,100對3求模後的結果為3,對5求模後的結果為0。

比較運算符用來對表達式左邊的操作數和右邊的操作數進行比較,比較的結果為真則傳回1,比較的結果為假則傳回0,其他情況則傳回NULL。

比較運算符經常被用來作為SELECT查詢語句的條件來使用,傳回符合條件的結果記錄。

第04章 MySQL運算符詳解
第04章 MySQL運算符詳解

1.等号運算符

等号運算符(=)判斷等号兩邊的值、字元串或表達式是否相等,如果相等則傳回1,不相等則傳回0。

在使用等号運算符時,遵循如下規則:

如果等号兩邊的值、字元串或表達式都為字元串,則MySQL會按照字元串進行比較,其比較的是每個字元串中字元的ANSI編碼是否相等。

如果等号兩邊的值都是整數,則MySQL會按照整數來比較兩個值的大小。

如果等号兩邊的值一個是整數,另一個是字元串,則MySQL會将字元串轉化為數字進行比較。

如果等号兩邊的值、字元串或表達式中有一個為NULL,則比較結果為NULL。

對比:SQL中指派符号使用 :=

2.安全等于運算符

安全等于運算符(&lt;=&gt;)與等于運算符(=)的作用是相似的,<code>唯一的差別</code>是‘&lt;=&gt;’可以用來對NULL進行判斷。在兩個操作數均為NULL時,其傳回值為1,而不為NULL;當一個操作數為NULL時,其傳回值為0,而不為NULL。

可以看到,使用安全等于運算符時,兩邊的操作數的值都為NULL時,傳回的結果為1而不是NULL,其他傳回結果與等于運算符相同。

3.不等于運算符

不等于運算符(&lt;&gt;和!=)用于判斷兩邊的數字、字元串或者表達式的值是否不相等,如果不相等則傳回1,相等則傳回0。不等于運算符不能判斷NULL值。如果兩邊的值有任意一個為NULL,或兩邊都為NULL,則結果為NULL。

SQL語句示例如下:

此外,還有非符号類型的運算符:

第04章 MySQL運算符詳解
第04章 MySQL運算符詳解
第04章 MySQL運算符詳解

4. 空運算符

空運算符(IS NULL或者ISNULL)判斷一個值是否為NULL,如果為NULL則傳回1,否則傳回0。

5. 非空運算符

非空運算符(IS NOT NULL)判斷一個值是否不為NULL,如果不為NULL則傳回1,否則傳回0。

6. 最小值運算符

文法格式為:LEAST(值1,值2,...,值n)。其中,“值n”表示參數清單中有n個值。在有兩個或多個參數的情況下,傳回最小值。

由結果可以看到,當參數是整數或者浮點數時,LEAST将傳回其中最小的值;當參數為字元串時,傳回字母表中順序最靠前的字元;當比較值清單中有NULL時,不能判斷大小,傳回值為NULL。

7. 最大值運算符

文法格式為:GREATEST(值1,值2,...,值n)。其中,n表示參數清單中有n個值。當有兩個或多個參數時,傳回值為最大值。假如任意一個自變量為NULL,則GREATEST()的傳回值為NULL。

由結果可以看到,當參數中是整數或者浮點數時,GREATEST将傳回其中最大的值;當參數為字元串時,傳回字母表中順序最靠後的字元;當比較值清單中有NULL時,不能判斷大小,傳回值為NULL。

8. BETWEEN AND運算符

BETWEEN運算符使用的格式通常為SELECT D FROM TABLE WHERE C BETWEEN A AND B,此時,當C大于或等于A,并且C小于或等于B時,結果為1,否則結果為0。

9. IN運算符

IN運算符用于判斷給定的值是否是IN清單中的一個值,如果是則傳回1,否則傳回0。如果給定的值為NULL,或者IN清單中存在NULL,則結果為NULL。

10. NOT IN運算符

NOT IN運算符用于判斷給定的值是否不是IN清單中的一個值,如果不是IN清單中的一個值,則傳回1,否則傳回0。

11. LIKE運算符

LIKE運算符主要用來比對字元串,通常用于模糊比對,如果滿足條件則傳回1,否則傳回0。如果給定的值或者比對條件為NULL,則傳回結果為NULL。

LIKE運算符通常使用如下通配符:

ESCAPE

回避特殊符号的:使用轉義符。例如:将[%]轉為[$%]、[]轉為[$],然後再加上[ESCAPE‘$’]即可。

如果使用\表示轉義,要省略ESCAPE。如果不是\,則要加上ESCAPE。

12. REGEXP運算符

REGEXP運算符用來比對字元串,文法格式為:<code>expr REGEXP 比對條件</code>。如果expr滿足比對條件,傳回1;如果不滿足,則傳回0。若expr或比對條件任意一個為NULL,則結果為NULL。

REGEXP運算符在進行比對時,常用的有下面幾種通配符:

邏輯運算符主要用來判斷表達式的真假,在MySQL中,邏輯運算符的傳回結果為1、0或者NULL。

MySQL中支援4種邏輯運算符如下:

第04章 MySQL運算符詳解

1.邏輯非運算符

邏輯非(NOT或!)運算符表示當給定的值為0時傳回1;當給定的值為非0值時傳回0;當給定的值為NULL時,傳回NULL。

2.邏輯與運算符

邏輯與(AND或&amp;&amp;)運算符是當給定的所有值均為非0值,并且都不為NULL時,傳回1;當給定的一個值或者多個值為0時則傳回0;否則傳回NULL。

3.邏輯或運算符

邏輯或(OR或||)運算符是當給定的值都不為NULL,并且任何一個值為非0值時,則傳回1,否則傳回0;當一個值為NULL,并且另一個值為非0值時,傳回1,否則傳回NULL;當兩個值都為NULL時,傳回NULL。

注意: OR可以和AND一起使用,但是在使用時要注意兩者的優先級,由于AND的優先級高于OR,是以先對AND兩邊的操作數進行操作,再與OR中的操作數結合。

4.邏輯異或運算符

邏輯異或(XOR)運算符是當給定的值中任意一個值為NULL時,則傳回NULL;如果兩個非NULL的值都是0或者都不等于0時,則傳回0;如果一個值為0,另一個值不為0時,則傳回1。

位運算符是在二進制數上進行計算的運算符。位運算符會先将操作數變成二進制數,然後進行位運算,最後将計算結果從二進制變回十進制數。

MySQL支援的位運算符如下:

第04章 MySQL運算符詳解

1.按位與運算符

按位與(&amp;)運算符将給定值對應的二進制數逐位進行邏輯與運算。當給定值對應的二進制位的數值都為1時,則該位傳回1,否則傳回0。

1的二進制數為0001,10的二進制數為1010,是以1 &amp; 10的結果為0000,對應的十進制數為0。20的二進制數為10100,30的二進制數為11110,是以20 &amp; 30的結果為10100,對應的十進制數為20。

2. 按位或運算符

按位或(|)運算符将給定的值對應的二進制數逐位進行邏輯或運算。當給定值對應的二進制位的數值有一個或兩個為1時,則該位傳回1,否則傳回0。

1的二進制數為0001,10的二進制數為1010,是以1 | 10的結果為1011,對應的十進制數為11。20的二進制數為10100,30的二進制數為11110,是以20 | 30的結果為11110,對應的十進制數為30。

3. 按位異或運算符

按位異或(^)運算符将給定的值對應的二進制數逐位進行邏輯異或運算。當給定值對應的二進制位的數值不同時,則該位傳回1,否則傳回0。

1的二進制數為0001,10的二進制數為1010,是以1 ^ 10的結果為1011,對應的十進制數為11。20的二進制數為10100,30的二進制數為11110,是以20 ^ 30的結果為01010,對應的十進制數為10。

再舉例:

第04章 MySQL運算符詳解

4. 按位取反運算符

按位取反(~)運算符将給定的值的二進制數逐位進行取反操作,即将1變為0,将0變為1。

由于按位取反(~)運算符的優先級高于按位與(&amp;)運算符的優先級,是以10 &amp; ~1,首先,對數字1進行按位取反操作,結果除了最低位為0,其他位都為1,然後與10進行按位與操作,結果為10。

5. 按位右移運算符

按位右移(&gt;&gt;)運算符将給定的值的二進制數的所有位右移指定的位數。右移指定的位數後,右邊低位的數值被移出并丢棄,左邊高位空出的位置用0補齊。

1的二進制數為0000 0001,右移2位為0000 0000,對應的十進制數為0。4的二進制數為0000 0100,右移2位為0000 0001,對應的十進制數為1。

6. 按位左移運算符

按位左移(&lt;&lt;)運算符将給定的值的二進制數的所有位左移指定的位數。左移指定的位數後,左邊高位的數值被移出并丢棄,右邊低位空出的位置用0補齊。

1的二進制數為0000 0001,左移兩位為0000 0100,對應的十進制數為4。4的二進制數為0000 0100,左移兩位為0001 0000,對應的十進制數為16。

第04章 MySQL運算符詳解
第04章 MySQL運算符詳解

數字編号越大,優先級越高,優先級高的運算符先進行計算。可以看到,指派運算符的優先級最低,使用“()”括起來的表達式的優先級最高。

正規表達式通常被用來檢索或替換那些符合某個模式的文本内容,根據指定的比對模式比對文本中符合要求的特殊字元串。例如,從一個文本檔案中提取電話号碼,查找一篇文章中重複的單詞或者替換使用者輸入的某些敏感詞語等,這些地方都可以使用正規表達式。正規表達式強大而且靈活,可以應用于非常複雜的查詢。

MySQL中使用REGEXP關鍵字指定正規表達式的字元比對模式。下表列出了REGEXP操作符中常用字元比對清單。

第04章 MySQL運算符詳解

1. 查詢以特定字元或字元串開頭的記錄

字元‘^’比對以特定字元或者字元串開頭的文本。

在fruits表中,查詢f_name字段以字母‘b’開頭的記錄,SQL語句如下:

2. 查詢以特定字元或字元串結尾的記錄

字元‘$’比對以特定字元或者字元串結尾的文本。

在fruits表中,查詢f_name字段以字母‘y’結尾的記錄,SQL語句如下:

3. 用符号"."來替代字元串中的任意一個字元

字元‘.’比對任意一個字元。

在fruits表中,查詢f_name字段值包含字母‘a’與‘g’且兩個字母之間隻有一個字母的記錄,SQL語句如下:

4. 使用"*"和"+"來比對多個字元

星号‘*’比對前面的字元任意多次,包括0次。加号‘+’比對前面的字元至少一次。

在fruits表中,查詢f_name字段值以字母‘b’開頭且‘b’後面出現字母‘a’的記錄,SQL語句如下:

在fruits表中,查詢f_name字段值以字母‘b’開頭且‘b’後面出現字母‘a’至少一次的記錄,SQL語句如下:

5. 比對指定字元串

正規表達式可以比對指定字元串,隻要這個字元串在查詢文本中即可,如要比對多個字元串,多個字元串之間使用分隔符‘|’隔開。

在fruits表中,查詢f_name字段值包含字元串“on”的記錄,SQL語句如下:

在fruits表中,查詢f_name字段值包含字元串“on”或者“ap”的記錄,SQL語句如下:

之前介紹過,LIKE運算符也可以比對指定的字元串,但與REGEXP不同,LIKE比對的字元串如果在文本中間出現,則找不到它,相應的行也不會傳回。REGEXP在文本内進行比對,如果被比對的字元串在文本中出現,REGEXP将會找到它,相應的行也會被傳回。對比結果如下所示。

在fruits表中,使用LIKE運算符查詢f_name字段值為“on”的記錄,SQL語句如下:

6. 比對指定字元中的任意一個

方括号“[]”指定一個字元集合,隻比對其中任何一個字元,即為所查找的文本。

在fruits表中,查找f_name字段中包含字母‘o’或者‘t’的記錄,SQL語句如下:

在fruits表中,查詢s_id字段中包含4、5或者6的記錄,SQL語句如下:

7. 比對指定字元以外的字元

<code>“[^字元集合]”</code>比對不在指定集合中的任何字元。

在fruits表中,查詢f_id字段中包含字母ae和數字12以外字元的記錄,SQL語句如下:

8. 使用{n,}或者{n,m}來指定字元串連續出現的次數

“字元串{n,}”表示至少比對n次前面的字元;“字元串{n,m}”表示比對前面的字元串不少于n次,不多于m次。例如,a{2,}表示字母a連續出現至少2次,也可以大于2次;a{2,4}表示字母a連續出現最少2次,最多不能超過4次。

在fruits表中,查詢f_name字段值出現字母‘x’至少2次的記錄,SQL語句如下:

在fruits表中,查詢f_name字段值出現字元串“ba”最少1次、最多3次的記錄,SQL語句如下:

本文來自部落格園,作者:微笑帶你去,轉載請注明原文連結:https://www.cnblogs.com/wxdnq/p/15593629.html

繼續閱讀