MySQL中的運算子
資料庫中的表結構確立後,表中的資料代表的意義就已經確定。而透過MySQL運算子進行運算,就可以獲取到表結構以外的另一種資料。例如,學生表中存在一個birth欄位,這個欄位表示學生的出生年份。而運用MySQL的算術運算子用當前的年份減學生出生的年份,那麼得到的就是這個學生的實際年齡資料。這就是MySQL的運算子,所以熟悉並掌握運算子的應用,對於操作MySQL資料庫中的資料是非常有用的。下面就來熟悉一下MySQL支援的4種運算子都具備哪些功能。
算術運算子:執行算術運算,例如:加、減、乘、除等。
比較運算子:包括大於、小於、等於或者不等於,等等。主要用於數值的比較、字串的匹配等方面。例如:LIKE、IN、BETWEEN AND和IS NULL等都是比較運算子,還包括正規表示式的REGEXP也是比較運算子。
邏輯運算子:包括與、或、非和異或等邏輯運算子。其返回值為布林型,真值(1或true)和假值(0或false)。
位運算子:包括按位與、按位或、按位取反、按位異或、按位左移和按位右移等位運算子。位運算必須先將資料轉換為二進位制,然後在二進位制格式下進行操作,運算完成後,將二進位制的值轉換為原來的型別,返回給使用者。
算術運算子
算術運算子是MySQL中最常用的一類運算子。MySQL支援的算術運算子包括:加、減、乘、除、求餘。
加(+)、減(-)和乘(*)可以同時計算多個運算元。除號(/)和求餘運算子(%)也可以同時計算多個運算元,但是這兩個符號計算多個運算元不太好。DIV和MOD這兩個運算子只有兩個引數。進行除法和求餘的運算時,如果x2引數是0或者null,計算結果將是空值(NULL)。
比較運算子
比較運算子是查詢資料時最常用的一類運算子。SELECT語句中的條件語句經常要使用比較運算子。透過這些比較運算子,可以判斷表中的哪些記錄是符合條件的。
下面對幾種較常用的比較運算子進行詳解。
1.運算子“=”,“=”用來判斷數字、字串和表示式等是否相等。如果相等,返回1,否則返回0。
說明:在運用“=”運算子判斷兩個字元是否相同時,資料庫系統都是根據字元的ASCII碼進行判斷的。如果ASCII碼相等,則表示這兩個字元相同。如果ASCII碼不相等,則表示這兩個字元不相同。注意,空值(NULL)不能使用“=”來判斷。
2.運算子“<>”和“!=”,“<>”和“!=”用來判斷數字、字串、表示式等是否不相等。如果不相等,則返回1;否則,返回0。這兩個符號也不能用來判斷空值(NULL)。
3.運算子“>”,“>”用來判斷左邊的運算元是否大於右邊的運算元。如果大於,返回1;否則,返回0。同樣,空值(NULL)不能使用“>”來判斷。
4.運算子“IS NULL”,“IS NULL”用來判斷運算元是否為空值(NULL)。運算元為NULL時,結果返回1;否則,返回0。IS NOT NULL剛好與IS NULL相反。
說明:“=”、“<>”、“!=”、“>”、“>=”、“<”、“<=”等運算子都不能用來判斷空值(NULL)。一旦使用,結果將返回NULL。如果要判斷一個值是否為空值,可以使用IS NULL和IS NOT NULL來判斷。注意:NULL和'NULL'是不同的,前者表示為空值,後者表示一個由4個字母組成的字串。
5.運算子“BETWEEN AND”,“BETWEEN AND”用於判斷資料是否在某個取值範圍內。
其表示式如下:
x1 BETWEEN m AND n
如果x1大於等於m,且小於等於n,結果將返回1,否則將返回0。
6.運算子“IN”,“IN”用於判斷資料是否存在於某個集合中。
其表示式如下:
x1 IN(值1,值2,……,值n)
如果x1等於值1到值n中的任何一個值,結果將返回1。如果不是,結果將返回0。
7.運算子“LIKE”,“LIKE”用來匹配字串。
其表示式如下:
x1 LIKE s1
如果x1與字串s1匹配,結果將返回1。否則返回0。
8.運算子“REGEXP” ,REGEXP”同樣用於匹配字串,但其使用的是正規表示式進行匹配。
其表示式格式如下:
x1 REGEXP'匹配方式'
如果x1滿足匹配方式,結果將返回1;否則將返回0。
說明:使用REGEXP運算子匹配字串,其使用方法非常簡單。REGEXP運算子經常與“^”、“$”和“.”一起使用。“^”用來匹配字串的開始部分;“$”用來匹配字串的結尾部分;“.”用來代表字串中的一個字元。
邏輯運算子
邏輯運算子用來判斷表示式的真假。如果表示式是真,結果返回1。如果表示式是假,結果返回0。邏輯運算子又稱為布林運算子。MySQL中支援4種邏輯運算子,分別是與、或、非和異或。
1.“與”運算
“&&”或者“AND”是“與”運算的兩種表達方式。如果所有資料不為0且不為空值(NULL),則結果返回1;如果存在任何一個資料為0,則結果返回0;如果存在一個資料為NULL且沒有資料為0,則結果返回NULL。“與”運算子支援多個資料同時進行運算。
2.“或”運算
“||”或者“OR”表示“或”運算。所有資料中存在任何一個資料為非0的數字時,結果返回1;如果資料中不包含非0的數字,但包含NULL時,結果返回NULL;如果運算元中只有0時,結果返回0。“或”運算子“||”可以同時操作多個資料。
3.“非”運算
“!”或者NOT表示“非”運算。透過“非”運算,將返回與運算元據相反的結果。如果運算元據是非0的數字,結果返回0;如果運算元據是0,結果返回1;如果運算元據是NULL,結果返回NULL。
4.“異或”運算
XOR表示“異或”運算。當其中一個表示式是真而另外一個表示式是假時,該表示式返回的結果才是真;當兩個表示式的計算結果都是真或者都是假時,則返回的結果為假。
位運算子
位運算子是在二進位制數上進行計算的運算子。位運算會先將運算元變成二進位制數,進行位運算。然後再將計算結果從二進位制數變回十進位制數。MySQL中支援6種位運算子,分別是:按位與、按位或、按位取反、按位異或、按位左移和按位右移。
運算子的優先順序
我一貫秉承著一點:透過自己的雙手真實的操作一遍之後的資訊是最可靠的,所以在您參考這個小文兒的時候請不要只是“看”,單純的瞧一瞧是得不到真知滴~~~
座右銘:紙上得來終覺淺,絕知此事要躬行!
1.算數運算子
加
mysql> select 1+2;
減
mysql> select 2-1;
乘
mysql> select 2*3;
除
mysql> select 5/3;
商
mysql> SELECT 5 DIV 2;
模
mysql> select 5%2,mod(5,2);
2.比較運算子
等於
mysql> select 1=0,1=1,null=null;
不等於
mysql> select 1<>0,1<>1,null<>null;
安全等於
mysql> select 1<=>1,2<=>0,0<=>0,null<=>null;
小於
mysql> select 'a'<'b','a'<'a','a'<'c',1<2;
小於等於
mysql> select 'bdf'<='b','b'<='b',0<1;
大於
mysql> select 'a'>'b','abc'>'a',1>0;
大於等於
mysql> select 'a'>='b','abc'>='a',1>=0,1>=1;
BETWEEN
mysql> select 10 between 10 and 20, 9 between 10 and 20;
IN
mysql> select 1 in (1,2,3), 't' in ('t','a','b','l','e'), 0 in (1,2);
IS NULL
mysql> select 0 is null,null is null;
IS NOT NULL
mysql> select 0 is not null, null is not null;
LIKE
mysql> select 123456 like '123%', 123456 like '%123%', 123456 like '%321%';
REGEXP
mysql> select 'abcdef' regexp 'ab', 'abcdefg' regexp 'k';
3.邏輯運算子
非
mysql> select not 0, not 1, not null;
mysql> select ! 0, ! 1, ! null;
與
mysql> select (1 and 1), (0 and 1), (3 and 1), (1 and null);
mysql> select (1 && 1), (0 && 1), (3 && 1), (1 && null);
或
mysql> select (1 or 0), (0 or 0), (1 or null), (1 or 1), (null or null);
mysql> select (1 || 0), (0 || 0), (1 || null), (1 || 1), (null || null);
異或
mysql> select (1 xor 1), (0 xor 0), (1 xor 0), (0 xor 1), (null xor 1);
mysql> select (1 ^ 1), (0 ^ 0), (1 ^ 0), (0 ^ 1), (null ^ 1);
4.位運算子
位與
mysql> select 2&3;
mysql> select 2&3&4;
位或
mysql> select 2|3;
位異或
mysql> select 2^3;
位取反
mysql> select ~1,~18446744073709551614;
位右移
mysql> select 100>>3;
位左移
mysql> select 100<<3;
5.運算子優先順序順序
最高優先順序 :=
1 ||, OR, XOR
2 &&, AND
3 BETWEEN, CASE, WHEN, THEN, ELSE
4 =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
5 |
6 &
7 <<, >>
8 -, +
9 *, /, DIV, %, MOD
10 ^
11 - (unary minus), ~ (unary bit inversion)
12 !, NOT
最低優先順序 BINARY, COLLATE
MySQL常見運算子
運算子連線表示式中各個運算元,其作用是用來指明對運算元所進行的運算。常見的運算有數學計算、比較運算、位運算以及邏輯運算。運用運算子可以更加靈活地使用表中的資料,常見的運算子型別有:算術運算子,比較運算子,邏輯運算子,位運算子等。
1.1 運算子概述
運算子是告訴執行特殊算術或邏輯操作的符號。MySQL的內部運算子很豐富,主要有四大類:算術運算子、比較運算子、邏輯運算子、位操作運算子。
1.1.1 算術運算子
用於各類數值運算。包括加(+)、減(-)、乘(*)、除(/)、求於(或稱模運算,%)。
1.1.2 比較運算子
用於比較運算。包括大於(>)、小於(<)、等於(=)、大於等於(>=)、小於等於(<=)、不等於(!=)、以及IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP等。
1.1.3 邏輯元素符
邏輯運算子的求值所得結果均為1(TRUE)、0(FALSE),這類運算子有邏輯非(NOT或者!)、邏輯與(AND或者&&)、邏輯或(OR或者||)、邏輯異或(XOR)。
1.1.4 位操作運算子
參與運算子的運算元,按二進位制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)6種。
1.2.1 算術運算子
運算子 | 作用 |
---|---|
+ | 加法運算 |
- | 減法運算 |
* | 乘法運算 |
/ | 除法運算,返回商 |
% | 求餘運算,返回餘數 |
1.2.0 比較運算子
一個比較運算子的結果總是1、0或者是NULL,比較運算子經常在SELECT的查詢條件字句中使用,用來查詢滿足指定條件的記錄。MySQL中比較運算子如表所示:
運算子 | 作用 |
---|---|
== | 等於 |
<=> | 安全的等於 |
<>(!=) | 不等於 |
<= | 小於等於 |
>= | 大於等於 |
> | 大於 |
IS NULL | 判斷一個值是否為NULL |
IS NOT NULL | 判斷一個值是否不為NULL |
LEAST | 在有兩個或多個引數時,返回最小值 |
GREATEST | 當有2或多個引數時,返回最大值 |
BETWEEN AND | 判斷一個值是否落在兩個值之間 |
ISNULL | 與IS NULL作用相同 |
IN | 判斷一個值是否落在兩個值之間 |
NOT IN | 判斷一個值不是IN列表中的任意一個值 |
LIKE | 萬用字元匹配 |
REGEXP | 正規表示式匹配 |
1.2.1 等於運算子 =
等號”=”用來判斷數字、字串和表示式是否相等。如果相等,返回值為1,否則返回值為0。
- 1
- 1
1.2.2 安全等於運算子 <=>
這個運算子合=運算子執行相同的比較操作,不過<=>可以用來判斷NULL值,在兩個運算元均為NULL時,其返回值為1而不為NULL,而當一個運算元為NULL時,其返回值為0而不為NULL。
- 1
- 1
1.2.3 不等於運算子<>或者!=
‘<>’或者’!=’用於判斷數字、字串、表示式不相等的判斷。如果不相等,返回值為1;否則返回值為0。這兩個運算子不能用於判斷空值NULL。
- 1
- 1
1.2.4 小於或等於元素符
‘<=’用來判斷左邊的運算元是否小於或者等於右邊的運算元。如果小於或者等於,返回值為1,否則返回值為0,’<=’不能用於判斷空值NULL。
- 1
- 1
1.2.5 小於運算子<
‘<’運算子用來判斷左邊的運算元是否小於右邊的運算元,如果小於,返回值為1,否則返回值為0.’<’不能用於判斷空值NULL。
- 1
- 1
1.2.6 大於或等於運算子>=
‘>=’運算子用來判斷左邊的運算元是否大於或者等於右邊的運算元,如果大於或者等於,返回值為1;否則返回值為0。’>=’不能用於判斷空值NULL。
- 1
- 1
1.2.7 大於運算子>
‘>’運算子用來判斷左邊的運算元是否大於右邊的運算元,如果大於,返回值1;否則返回值為0。’>’進行比較判斷,該運算子不能用於空值判斷。
- 1
- 1
1.2.8 IS NULL(ISNULL),IS NOT NULL運算子
IS NULL和ISNULL檢驗一個值是否為NULL,如果為NULL,返回值為1。否則返回值為0;IS NOT NULL檢驗一個值是否為非NULL,如果非NULL,返回值為1;否則返回值為0。
- 1
- 1
1.2.9 BETWEEN AND運算子
語法格式為:expr BETWEEN min AND max。假如expr大於或等於min且小於或等於max,則BETWEEN的返回值為1,否則返回值為0。
- 1
- 1
1.2.10 LEAST運算子
語法格式為:LEAST(值1,值2,…值n),其中值n表示引數列表中有n個值。在有兩個或多個引數的情況下,返回最小值。假如任意一個自變數為NULL,則LEAST()的返回值為NULL。
- 1
- 1
1.2.11 GREATEST(value1,value2,…)
語法格式為:GREATEST(值1,值2,…值n),其中n表示引數列表中有n個值。當有2個或多個引數時,返回值為最大值,假如任意一個自然變數為NULL,則GREATEST()的返回值為NULL。
- 1
- 1
1.2.12 IN、NOT IN運算子
IN運算子用來判斷運算元是否為IN列表中的其中一個值,如果是,返回值為1;否則返回值為0。
- 1
- 1
1.2.13 LIKE
LIKE運算子用來匹配字串,語法格式為:expr LIKE 匹配條件,如果expr滿足匹配條件,則返回值為1(TRUE);如果不匹配,則返回值為0(FALSE)。若expr或匹配條件中任何一個為NULL,則結果為NULL。
LIKE運算子在進行匹配時,可以使用下面兩種萬用字元:
1. ‘%’,匹配任何數目的字元,甚至包括0字元。
2. ‘_’,只能匹配一個字元。
- 1
- 1
1.2.14 REGEXP
REGEXP運算子用來匹配字串,語法格式為:expr REGEXP 匹配條件,如果expr滿足匹配條件,返回1;如果不滿足,則返回0;若expr或匹配條件任意一個為NULL,則結果為NULL。
REGEXP運算子在進行匹配時,常用的有下面幾種萬用字元:
(1) ‘^’匹配以該字元後面的字元開頭的字串。
(2) ‘$’匹配以該字元後面的字元結尾的字串。
(3) ‘.’匹配任何一個單字元。
(4) ‘[…]’匹配在方括號內的任何字元。例如,”[abc]”匹配”a”、”b”或”c”。為了命名字串的範圍,使用一個’-‘。”[a-z]”匹配任何字母,而”[0-9]”匹配任何數字。
(5) ‘*’匹配0個或多個在它前面的字元。
- 1
- 1
1.3 邏輯運算子
在SQL中,所有邏輯運算子的求值所得結果均為TRUE、FALSE或NULL。在MySQL中,它們體現為1(TRUE)、0(FALSE)和NULL。其大多數都與不同的資料庫SQL通用,MySQL中的邏輯運算子如表所示:
運算子 | 作用 |
---|---|
NOT或者! | 邏輯非 |
AND或者&& | 邏輯與 |
OR或者|| | 邏輯或 |
XOR | 邏輯異或 |
1.3.1 NOT或者!
邏輯非運算子NOT或者!表示當運算元為0時,所得值為1;當運算元為非零值時,所得值為0,當運算元為NULL時,所得的返回值為NULL。
- 1
- 1
1.3.2 AND或者&&
邏輯與運算子AND或者&&表示當所有運算元均為非零值、並且不為NULL時,計算所得結果為1;當一個或多個運算元為0時,所得結果為0,其餘情況返回值為NULL。
- 1
- 1
1.3.3 OR或者||
邏輯與運算子OR或者||表示當兩個運算元均為非NULL值,且任意一個運算元為非零值時,結果為1,否則結果為0;當有一個運算元為NULL,且另一個運算元為非零值時,則結果為1,否則結果為NULL;當兩個運算元均為NULL時,則所得結果為NULL。
- 1
- 1
1.3.4 XOR
邏輯異或運算子XOR。當任意一個運算元為NULL時,返回值為NULL;對於非NULL的運算元,如果兩個運算元都是非0值或者都是0值,則返回結果為0;如果一個為0值,另一個為非0值,返回結果為1。
- 1
- 1
1.4 位運算子
位運算子是用來對二進位制位元組中的位進行測試、位移或者測試處理,MySQL中提供的位運算子有按位或(|)、按位與(&)、按位異或(^)、按位左移(<<)、按位右移(>>)、按位取反(~),如下表所示:
運算子 | 作用 |
---|---|
& | 位與 |
^ | 位異或 |
<< | 位左移 |
>> | 位右移 |
~ | 位取反,反轉所有位元 |
1.4.1 位或運算子 |
位或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯或運算。對應的二進位制有一個或兩個為1則該位的運算結果為1,否則為0。
- 1
- 1
10的二進位制數值為1010,15的二進位制數值為1111,按位或運算之後,結果為1111,即整數15;9的二進位制位1001,4的二進位制為0010,按位或運算之後,結果為1111,即整數15。其結果為一個64位無符號整數。
1.4.2 位與運算子 &
位與運算的實質是將參與運算的兩個運算元,按對應的二進位制數逐位進行邏輯與運算。對應的二進位制都為1,則該位的運算結果為1,否則為0。
- 1
- 1
10的二進位制位1010,15的二進位制位1111,按位與運算結果為1010,即整數10;9的二進位制為1001,4的二進位制位0100,2的二進位制為0010,按位與運算之後,結果為0000,即整數0,。其結果為一個64位無符號整數。
1.4.3 位異或運算 ^
位異或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯異或運算。對應的二進位制數不同時,對應的結果才為1。如果兩個對應位數都為0或者都為1,則對應位的結果為0。
- 1
- 1
1.4.4 位左移運算子 <<
位左移運算子<<使指定的二進位制值的所有位都左移指定的位數。左移指定位數之後,左邊高位的數值被移出並丟棄,右邊低位空出的位置用0補齊。語法格式為:expr<
- 1
- 1
1的二進位制位0000 0001,左移兩位之後0000 0100,即十進位制整數4;十進位制4左移兩位之後變成0001 0000,即變成十進位制的16。
1.4.5 位右移運算子 >>
位右移運算子>>使指定的二進位制的所有位都右移指定的位數。右移指定位數之後,右邊低位的數值將被丟棄移除,左邊高位空出的位置用0補齊。語法格式為:expr>>n。這裡n指定值expr要移除的位數。
- 1
- 1
1的二進位制位0000 0001右移1位之後變成0000 0000,即十進位制整數0,16的二進位制數值為0001 0000右移兩位之後變成十進位制的4.
1.4.6 位取反運算 ~
位取反運算的實質是將參與運算的資料,按對應的二進位制數逐位反轉,即1取反後變成0,0取反變成1。
- 1
- 1
1.5 運算子的優先順序
優先順序 | 運算子 |
---|---|
最低 | =(賦值運算),:= |
XOR | |
&&,AND | |
NOT | |
BETWEEN、CASE、WHEN、THEN、ELSE | |
=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN | |
& | |
<<,>> | |
-,+ | |
*,/,%, | |
^ | |
-,~ | |
最高 | ! |
About Me
.............................................................................................................................................
● 本文整理自網路,若有侵權請聯絡小麥苗刪除
● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● DBA寶典今日頭條號地址:
.............................................................................................................................................
● QQ群號:230161599(滿)、618766405
● 微信群:可加我微信,我拉大家進群,非誠勿擾
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2017-09-01 09:00 ~ 2017-09-30 22:00 在魔都完成
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:
● 小麥苗出版的資料庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/
.............................................................................................................................................
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。
小麥苗的微信公眾號 小麥苗的DBA寶典QQ群1 小麥苗的DBA寶典QQ群2 小麥苗的微店
.............................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2144415/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (3)mysql 中的運算子MySql
- 【實驗】【MySQL】MySQL中的運算子展示MySql
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- mysql運算子MySql
- javascript中&&運算子和||運算子的使用JavaScript
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- MySQL where 運算子MySql
- js中的運算子JS
- 6mysql運算子MySql
- # JavaScript中的 || 與 && 運算子JavaScript
- python中的運算子Python
- 運算子 運算子
- Python 中的特殊運算子Python
- JS 中的邏輯運算子JS
- PHP中的比較運算子PHP
- 【linux】Shell中的運算子Linux
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 算術運算子裡的特殊運算子
- 運算子-賦值運算子賦值
- 位運算子在JS中的妙用JS
- C++中運算子的過載C++
- js中的|與 && 運算子詳解JS
- Python3中的運算子Python
- vue中的三元運算子Vue
- Java中的三種位移運算子Java
- SQLite中的運算子表示式SQLite
- PHP中“==”運算子的安全問題PHP
- Java中包含哪些運算子Java
- Swift中自定義運算子Swift
- java中insteanceof運算子Java
- MySQL筆記 —SQL運算子打椰MySql筆記
- javascript運算子——邏輯運算子JavaScript
- javascript基礎(賦值運算子,關係運算子,相等運算子,三元運算子,運算子的優先順序,程式碼塊)(十)JavaScript賦值
- C++中的運算子和表示式C++
- C#中的?.和!.運算子(連結)C#
- Java中按位取反運算子Java
- java中運算子與表示式Java