一步一步學MySQL---17 MySQL運算子
17.1 算術運算子
MySQL中,算術運算子包含加、減、乘、除、求模。
運算子 | 描述 | 表示式形式 |
---|---|---|
+ | 加法 | x1+x2+x3+…+xn |
- | 減法 | x1-x2-x3…-xn |
* | 乘法 | x1*x2*x3…*xn |
/(DIV) | 除法 | x1/x2/x3…/xn 或 x1 DIV x2 DIV x3…DIVxn |
%(MOD) | 求餘 | x1%x2%x3…%xn 或 x1 MOD x2 MOD x3…MOD xn |
例1:執行SQL語句select,獲取各種算術運算後的結果
mysql> select 6+4 加法運算,
-> 6-4 減法運算,
-> 6*4 乘法運算,
-> 6/4 除法運算,
-> 6 div 4 除法運算,
-> 6%4 求餘運算,
-> 6 mod 4 求餘運算;
或者:
mysql> select 6+4 加法運算, 6-4 減法運算, 6*4 乘法運算, 6/4 除法運算, 6 div 4 除法運算, 6%4 求餘運算, 6 mod 4 求餘運算;
例2:查詢員工的月工資、年薪
mysql> select ename 員工, salary 月薪, salary*12 年薪 from employee;
注意:在做除法運算或者求餘操作時,如果除數為0,將是非法操作,返回結果為NULL,如下所示:
mysql> select 6/0 除法運算, 6 div 0 除法運算, 6%0 求餘運算, 6 mod 0 求餘運算;
17.2 比較運算子
MySQL所支援的比較運算子有:
運算子 | 描述 | 表示式形式 |
---|---|---|
> | 大於 | x1>x2 |
< | 小於 | x1 |
= 或者 <=> | 等於 | x1=x2 或者 x1<=>x2 |
!= 或者 <> | 不等於 | x1!=x2 或者 x1<>x2 |
> | 大於等於 | x1>=x2 |
<= | 小於等於 | x1<=x2 |
between and | 存在於指定範圍 | x1 between and x2 |
is null | 為空 | x1 is null |
in | 存在於指定範圍 | X1 in(value1,value2,value3,…valuen) |
like | 萬用字元匹配 | x1 like expression |
regexp | 正則表示式匹配 | x1 regexp regularexpression |
例1:執行帶有“=”和“<=>”比較運算子的SQL語句select
mysql> #等號的使用
mysql> select 1=1 數值比較,
-> ‘ShangHai’=’ShangHai’,
-> 1+2=3+1 表示式比較,
-> 1<=>1 數值比較,
-> ‘ShangHai’<=>’ShangHai’ 字串比較,
-> 1+2<=>3+3 表示式比較;
也可以寫成:
mysql> select 1=1 數值比較, “ShangHai”=”ShangHai”, 1+2=3+1 表示式比較, 1<=>1 數值比較, “ShangHai”<=>”ShangHai” 字串比較, 1+2<=>3+3 表示式比較;
說明:“=”和“<=>”比較運算子可以判斷數值、字串和表示式是否相等。如果相等,則返回1;如果不相等,則返回0。
注意:“=”和“<=>”比較運算子在比較字串是否相等時,依據字元的ASC||碼來進行判斷。前者不能操作NULL(空值),後者可以。如:
mysql> select NULL=NULL “=符號效果”, NULL<=>NULL “<=>符號效果”;
例2:執行帶有“!=”和“<>”比較運算子的SQL語句select
mysql> #不等號的使用#
mysql> select 1!=1 數值比較, “Shanghai”!=”ShangHai” 字串比較, 1+2!=3+3 表示式比較, 1<>1 數值比較, “ShangHai”<>”ShangHai” 字串比較, 1+2<>3+3 表示式比較;
說明:符號“!=”和“<>”用來判斷數值、字串和表示式是否不相等。如果不相等則返回1,;如果相等則返回0。
注意:從上面的結果可以看出,字串比較時,MySQL是不區分大小寫的,ShangHai與Shanghai是一樣的。
例3:執行帶有“>”、“>=”、“<”和“<=”比較運算子的SQL語句select。
mysql> select 1>=1 數值比較,
-> ‘abcdefg’>=’abcdfhg’ 字串比較,
-> 1+2>=3+4 表示式比較,
-> 1>1 ‘>符號使用’,
-> ‘abcdefg’<=’abcdeeg’ as ‘<=符號使用’,
-> 1+2<3+4 ‘<符號使用’;
或者
mysql> select 1>=1 數值比較, ‘abcdefg’>=’abcdfhg’ 字串比較, 1+2>=3+4 表示式比較, 1>1 ‘>符號使用’, ‘abcdefg’<=’abcdeeg’ as ‘<=符號使用’, 1+2<3+4 ‘<符號使用’;
說明:符號“>”、“>=”、“<”和“<=”主要用來判斷數值、字串和表示式的相關比較,如果表示式成立則返回1,否則返回0。
注意:“>”、“>=”、“<”和“<=”比較運算子也不能操作NULL(空值)
17.3 正則表示式運算子
所謂正則表示式,就是通過模式去匹配一類字串。
MySQL支援的模式字元如下:
模式字元 | 含義 |
---|---|
^ | 匹配字串的開始部分 |
$ | 匹配字串的結束部分 |
. | 匹配字串中的任意一個字元 |
[字元集合] | 匹配字元集合中的任意一個字元 |
[^字元集合] | 匹配字元集合外的任意一個字元 |
匹配str1、str2和str3中任意一個字串 | |
* | 匹配字元,包含0個和多個 |
+ | 匹配字元,至少包含1個 |
字串{N} | 字串出現N次 |
字串(M,N) | 字串出現至少M次,至多N次 |
例1:執行帶有“^”模式字元的SQL語句select,實現比較是否以特定字元或字串開頭。
mysql> select “ShangHaiPuDong” regexp “^s” 特定字元開頭,
-> “ShangHaiPuDong” regexp “^Shang” 特定字串開頭,
-> “ShangHaiPuDong” regexp “^P” 特定字元開頭,
-> “ShangHaiPuDong” regexp “^SHANG” 特定字串開頭,
-> “ShangHaiPuDong” regexp “^Hai” 特定字串開頭;
說明:通過模式字元“^”可以比較是否以特定字元或特定字串開頭。如果相符,則返回1;如果不符,則返回0。
$
例2:執行帶有“$”模式字元的SQL語句select,實現比較是否以特定字元或字串結尾。
mysql> select “Shanghai” regexp 特定字元結尾, “Shanghai” regexp 特定字串結尾, “ShangHai” regexp 特定字元結尾, “Shanghai” regexp 特定字串結尾;
或者
mysql> select “Shanghai” regexp “” 特定字元結尾,
-> “Shanghai” regexp 特定字串結尾,
-> “ShangHai” regexp 特定字元結尾,
-> “Shanghai” regexp 特定字串結尾;
說明:通過模式字元“$”可以比較是否以特定字元或特定字串結尾。如果相符,則返回1;如果不符,則返回0。
例3:執行帶有“.”模式字元的SQL語句select,實現比較是否包含固定數目的任意字元。
mysql> select “shanghaipudong” regexp “^s…” 匹配以字元s開頭的3個任意字元;
例4:執行帶有“[]”和“[^]”模式字元的SQL語句select,可以實現比較是否包含指定字元中的任意一個和指定字元外任意一個。
mysql> select “shanghaipudong” regexp “[aefgh]” 指定字元集合中任一字元,
-> “shanghaipudong” regexp “[a-zA-Z]” 指定字元中的集合區間,
-> “shanghaipudong” regexp “[^aefgh]” 指定字元集合外的任一字元,
-> “shanghaipudong” regexp “[^a-zA-Z0-9]” 指定字元外集合區間;
說明:通過模式字元“[]”和“[^]”可以匹配指定的字元中合字元外的任意一個字元。如果相符,則返回1;如果不符,則返回0。
例5:執行帶有“*”和“+”模式字元的SQL語句select,可以實現比較是否包含多個指定字元。
mysql> select “shanghai” regexp “b*g”,”shanghai” regexp “b+n”;
說明:通過模式字元“*”和“+”可以匹配字元g之前是否有多個字元a,前者可以表示有0個或任意個字元,後者至少表示一個字元。因此結果是1和0。
例6:執行帶有“|”模式字元的SQL語句select,可以實現比較是否包含指定字串中任意一個字串。
mysql> select “mysqljavapython” regexp “java” 指定單個字串,
-> “mysqljavapython” regexp “mysql|java” 指定多個字串,
-> “mysqljavapython” regexp “mysql|java|python” 指定多個字串,
-> “mysqljavapython” regexp “spark|python” 指定多個字串,
-> “mysqljavapython” regexp “spark|html” 指定多個字串;
或者:
mysql> select “mysqljavapython” regexp “java” 指定單個字串, “mysqljavapython” regexp “mysql|java” 指定多個字串, “mysqljavapython” regexp “mysql|java|python” 指定多個字串, “mysqljavapython” regexp “spark|python” 指定多個字串, “mysqljavapython” regexp “spark|html” 指定多個字串;
說明:通過模式字元“|”可以匹配指定的任意一個字串,如果只有一個字串,則不需要模式字元“|”。如果相符,則返回1,否則返回0。
例7:執行帶有“{M}”和“{M,N}”模式字元的SQL語句select,可以實現比較是否包含多個指定字串。
mysql> select “cccjgong” regexp “c{3}” 匹配3個c,
-> “cccjgongg” regexp “g{2}” 匹配2個g,
-> “cgong” regexp “cj{1,2}” 至少1個最多2個,
-> “cjcjgong” regexp “cj{1,2}” 至少1個最多2個;
說明:c{3}表示字元c連續出現3次,cj{1,2}表示字串cj至少出現1次,最多出現2次。
mysql> select “cccjgong” regexp “c{3}” 匹配3個c,
-> “chccjgong” regexp “c{3}” 匹配3個c,
-> “chccjggong” regexp “g{3}” 匹配3個g,
-> “chccjggong” regexp “g{2}” 匹配2個g,
-> “chccjggong” regexp “cj{1,2}” 至少1個最多2個cj,
-> “cjccjggong” regexp “cj{1,2}” 至少1個最多2個cj,
-> “cjccjcjgng” regexp “cj{1,2}” 至少1個最多2個cj,
-> “cjcjcjcjgng” regexp “cj{1,2}” 至少1個最多2個cj;
17.4 邏輯運算子
在MySQL中,邏輯運算子包含與、或、非、異或運算。
運算子 | 描述 | 表示式形式 |
---|---|---|
and(&&) | 與 | x1 and x2 或者 x1 && x2 |
or() | 或 | x1 or x2 或者 x1 |
not(!) | 非 | not x1 或者 !x1 |
xor | 異或 | x1 xor x2 |
例1:執行帶有“and”或者“&&”邏輯運算子的SQL語句select
mysql> select 3 and 4, 3 && 4,
-> 0 and 4, 0 && 4,
-> 0 and NULL, 0 && null,
-> 3 and NULL, 3 && NULL;
說明:與運算子“and”和“&&”作用一樣,所有運算元不為0且不為NUL(空值)時,結果返回1;存在一個運算元為0時,結果返回0;存在任意一個運算元為NULL且沒有運算元為0時,結果返回NULL。
例2:執行帶有“or”或者“||”邏輯運算子的SQL語句select
mysql> select 3 or 4,
-> 3 || 4,
-> 0 or 4,
-> 0 || 4,
-> 3 or NULL,
-> 3 || NULL,
-> 0 or NULL,
-> 0 || NULL,
-> 0 or 0,
-> 0 || 0;
說明:或運算子“or”和“||”作用一樣,所有運算元中存在任何一個運算元不為0,結果返回1;所有運算元中不包含非0的數字,但包含NULL(空值),結果返回NULL;所有運算元都為0,結果返回0。
例3:執行帶有“not”或者“!”邏輯運算子的SQL語句select
mysql> select not 3,
-> !3,
-> not 0,
-> !0,
-> not NULL,
-> !NULL;
說明:非運算子“not”和“!”作用一樣,如果運算元為非0數字,結果返回0;如果運算元為0,結果返回1;如果運算元為NULL(空值),結果返回NULL。
例4:執行帶有“xor”邏輯運算子的SQL語句select
mysql> select 3 xor 4,
-> 0 xor 0,
-> NULL xor NULL,
-> 0 xor 4,
-> 0 xor NULL,
-> 3 xor NULL,
->3 xor 4 xor 5;
說明:對於異或xor運算子,如果運算元中包含NULL(空值),結果返回NULL;如果運算元同為0或者同為非0,結果返回0;如果一個運算元為0,另一個不為0,結果返回1。
17.5 位運算
MySQL支援的位運算子如下:
運算子 | 描述 | 表示式形式 |
---|---|---|
& | 按位與 | x1 & x2 |
按位或 | x1 x2 | |
~ | 按位取反 | ~x1 |
^ | 按位異或 | x1 ^ x2 |
<< | 按位左移 | x1 << x2 |
按位右移 | x1 >> x2 |
例1:執行帶有“&”位運算子的SQL語句select
mysql> select bin(1 & 1), bin(1 & 0), bin(0 & 0);
mysql> select 5 & 6, bin(5 & 6) 二進位制表示,
-> 4 & 5 & 6, bin(4 & 5 & 6) 二進位制表示;
說明:按位與運算(&)時,首先將十進位制數轉換成二進位制數,然後按位與操作,即兩個數都為1時,結果才為1,其他都為0,最後將與後的結果轉換成十進位制數。
例2:執行帶有“|”位運算子的SQL語句select
mysql> select bin(1 | 1), bin(1 | 0), bin(0 | 0);
mysql> select 5 | 6, bin(5 | 6) 二進位制表示,
-> 4 | 5 | 6, bin(4 | 5 | 6) 二進位制表示;
說明:按位或運算(|)時,首先將十進位制數轉換成二進位制數,然後按位或操作,即只要有一個運算元為1,按位或的結果就為1,0與0按位或的結果為0。
例3:執行帶有“~”位運算子的SQL語句select
mysql> select bin(~1), bin(~0);
mysql> select ~4, bin(~4) 二進位制表示;
說明:按位取反運算(~)時,1取反的結果為0,0取反的結果為1。
例4:執行帶有“^”位運算子的SQL語句select
mysql> select bin(1 ^ 1), bin(1 ^ 0), bin(0 ^ 1), bin(0 ^ 0);
mysql> select 4 ^ 5, bin(4 ^ 5);
說明:按位異或(^)運算時,相同的數異或的結果為0,不同的數異或的結果為1。
例5:執行帶有“<<”和“>>”位運算子的SQL語句select
mysql> select bin(5) 二進位制表示,
-> 5<<2, bin(5<<2) 二進位制表示,
-> 5>>3, bin(5>>3) 二進位制表示;
說明:左移右邊補0,右移左邊補0。