前言
在前面的MySQL學習中,我們學習了MySQL的安裝,管理以及配置,還有是它的DDL。今天給大家分享一下,MySQL的操作符。
千里之行始於足下,做什么事情都要腳踏實地的去做才能做好它。fighting!
一、MySQL操作符
運算符連接表達式中各個操作數,其作用是用來指明對操作數所進行的運算。常見的運算有數學計算、比較運算、位運算以及邏輯運算。
運用運算符可以更加靈活地使用表中的數據,常見的運算符類型有:算術運算符,比較運算符,邏輯運算符,位運算符等。
二、算術運算符
用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求於(或稱模運算,%)

三、比較運算符
3.1、概述
用於比較運算。包括大於(>)、小於(<)、等於(=)、大於等於(>=)、小於等於(<=)、不等於(!=)、以及IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP等
一個比較運算符的結果總是1、0或者是NULL,比較運算符經常在SELECT的查詢條件字句中使用,用來查詢滿足指定條件的記錄。

3.2、實例
1)等號”=”用來判斷數字、字符串和表達式是否相等。如果相等,返回值為1,否則返回值為0。
select 1=0,'2'=2,2=2,NULL=NULL; 返回值=0,1,1,null
2)安全等於號。這個操作符合=操作符執行相同的比較操作,不過<=>可以用來判斷NULL值,在兩個操作數均為NULL時,其返回值為1而不為NULL,而當一個操作數為NULL時,其返回值為0而不為NULL。
select 1<=>0,'2'<=>2,NULL<=>NULL; 返回值=0,1,1
3)‘<>’或者’!=’用於判斷數字、字符串、表達式不相等的判斷。如果不相等,返回值為1;否則返回值為0。這兩個運算符不能用於判斷空值NULL。
select 'good'<>'good',1<>2,4!=5,5.5!=5,(1+3)!=(2+1),NULL<>NULL; 返回值=0,1,1,1,0,null
4)IS NULL和ISNULL檢驗一個值是否為NULL,如果為NULL,返回值為1。否則返回值為0;IS NOT NULL檢驗一個值是否為非NULL,如果非NULL,返回值為1;否則返回值為0。
select NULL IS NULL,ISNULL(NULL),ISNULL(10),10 IS NOT NULL; 返回值=1,1,0,1
5)BETWEEN AND運算符。語法格式為:expr BETWEEN min AND max。假如expr大於或等於min且小於或等於max,則BETWEEN的返回值為1,否則返回值為0。
select 4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10; 返回值=1,0
6)LEAST運算符。語法格式為:LEAST(值1,值2,…值n),其中值n表示參數列表中有n個值。在有兩個或多個參數的情況下,返回最小值。假如任意一個自變量為NULL,則LEAST()的返回值為NULL。
select least(2,0),least(20.0,3.0,100.5),least(10,NULL); 返回值=0,3.0,null
7)GREATEST(value1,value2,…)。語法格式為:GREATEST(值1,值2,…值n),其中n表示參數列表中有n個值。當有2個或多個參數時,返回值為最大值,假如任意一個自然變量為NULL,則GREATEST()的返回值為NULL。
select greatest(2,0),greatest(20.0,3.0,100.5),greatest(10,NULL); 返回值=2,100.5,null
8)IN、NOT IN運算符。IN運算符用來判斷操作數是否為IN列表中的其中一個值,如果是,返回值為1;否則返回值為0。
select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks'); 返回值=0,1
9)LIKE運算符用來匹配字符串,語法格式為:expr LIKE 匹配條件,如果expr滿足匹配條件,則返回值為1(TRUE);如果不匹配,則返回值為0(FALSE)。若expr或匹配條件中任何一個為NULL,則結果為NULL。
LIKE運算符在進行匹配時,可以使用下面兩種通配符:
9.1) ‘%’,匹配任何數目的字符,甚至包括0字符。
9.2.)‘_’,只能匹配一個字符。
select 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't___','s' LIKE NULL; 返回值=1,1,1,1,0
10)REGEXP運算符用來匹配字符串,語法格式為:expr REGEXP 匹配條件,如果expr滿足匹配條件,返回1;如果不滿足,則返回0;若expr或匹配條件任意一個為NULL,則結果為NULL。
REGEXP運算符在進行匹配時,常用的有下面幾種通配符:
(1) ‘^’匹配以該字符后面的字符開頭的字符串。
(2) ‘$’匹配以該字符后面的字符結尾的字符串。
(3) ‘.’匹配任何一個單字符。
(4) ‘[…]’匹配在方括號內的任何字符。例如,”[abc]”匹配”a”、”b”或”c”。為了命名字符串的范圍,使用一個’-‘。”[a-z]”匹配任何字母,而”[0-9]”匹配任何數字。
(5) ‘*’匹配0個或多個在它前面的字符。
select 'ssky' REGEXP '^s','ssky' REGEXP 'y$','ssky' REGEXP '.sky','ssky' REGEXP '[ab]';
三、邏輯運算符
3.1、概述
在SQL中,所有邏輯運算符的求值所得結果均為TRUE、FALSE或NULL。在MySQL中,它們體現為1(TRUE)、0(FALSE)和NULL。

3.2、實例
1)NOT或!
邏輯非運算符NOT或者!表示當操作數為0時,所得值為1;當操作數為非零值時,所得值為0,當操作數為NULL時,所得的返回值為NULL。
select NOT 10,NOT(1-1),NOT -5,NOT NULL,NOT 1+1; 返回值= 0,1,0,0
2)AND或&&
邏輯與運算符AND或者&&表示當所有操作數均為非零值、並且不為NULL時,計算所得結果為1;當一個或多個操作數為0時,所得結果為0,其余情況返回值為NULL。
select 1 AND -1,1 AND 0,1 AND NULL,0 AND NULL;
3)OR或||
邏輯與運算符OR或者||表示當兩個操作數均為非NULL值,且任意一個操作數為非零值時,結果為1,否則結果為0;
當有一個操作數為NULL,且另一個操作數為非零值時,則結果為1,否則結果為NULL;當兩個操作數均為NULL時,則所得結果為NULL。
select 1 OR-1,1 OR 0,1 OR NULL,0 OR NULL;
4)XOR
邏輯異或運算符XOR。當任意一個操作數為NULL時,返回值為NULL;對於非NULL的操作數,如果兩個操作數都是非0值或者都是0值,則返回結果為0;如果一個為0值,另一個為非0值,返回結果為1。
select 1 XOR 1,0 XOR 0,1 XOR 0,0 XOR 0,1 XOR NULL,1 XOR 1;
四、位運算符
4.1、概述
位運算符是用來對二進制字節中的位進行測試、位移或者測試處理,MySQL中提供的位運算符有按位或(|)、按位與(&)、按位異或(^)、按位左移(<<)、按位右移(>>)、按位取反(~)

4.2、實例
1)位或運算符 |
位或運算的實質是將參與運算的兩個數據,按對應的二進制數逐位進行邏輯或運算。對應的二進制有一個或兩個為1則該位的運算結果為1,否則為0。
select 10|15,9|4|2; 返回值=15,15
分析:10的二進制數值為1010,15的二進制數值為1111,按位或運算之后,結果為1111,即整數15;9的二進制位1001,4的二進制為0010,按位或運算之后,結果為1111,即整數15。其結果為一個64位無符號整數
2)位與運算符 &
位與運算的實質是將參與運算的兩個操作數,按對應的二進制數逐位進行邏輯與運算。對應的二進制都為1,則該位的運算結果為1,否則為0。
select 10&15,9&4&2; 返回值=10,9
分析:10的二進制位1010,15的二進制位1111,按位與運算結果為1010,即整數10;9的二進制為1001,4的二進制位0100,2的二進制為0010,按位與運算之后,結果為0000,即整數0,。其結果為一個64位無符號整數。
3)位異或運算 ^
位異或運算的實質是將參與運算的兩個數據,按對應的二進制數逐位進行邏輯異或運算。對應的二進制數不同時,對應的結果才為1。如果兩個對應位數都為0或者都為1,則對應位的結果為0。
select 10^15,1^0,1^1; 返回值=5,1,0
4)位左移運算符 <<
位左移運算符<<使指定的二進制值的所有位都左移指定的位數。左移指定位數之后,左邊高位的數值被移出並丟棄,右邊低位空出的位置用0補齊。語法格式為:expr<
select 1<<2,4<<2; 返回值=4,16
分析:1的二進制位0000 0001,左移兩位之后0000 0100,即十進制整數4;十進制4左移兩位之后變成0001 0000,即變成十進制的16。
5)位右移運算符 >>
位右移運算符>>使指定的二進制的所有位都右移指定的位數。右移指定位數之后,右邊低位的數值將被丟棄移除,左邊高位空出的位置用0補齊。語法格式為:expr>>n。這里n指定值expr要移除的位數。
select 1>>1,16>>2; 返回值=0,16
分析:1的二進制位0000 0001右移1位之后變成0000 0000,即十進制整數0,16的二進制數值為0001 0000右移兩位之后變成十進制的4.
6)位取反運算 ~
位取反運算的實質是將參與運算的數據,按對應的二進制數逐位反轉,即1取反后變成0,0取反變成1。
select 5&~1; 返回值=4
五、運算符優先級

