MySQL中的運算子

lhrbest發表於2017-09-01
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執行特殊算術或邏輯操作的符號。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。

select 1=0,'2'=2,2=2,NULL=NULL; 
  • 1
  • 1

1.2.2 安全等於運算子 <=>

這個操作符合=操作符執行相同的比較操作,不過<=>可以用來判斷NULL值,在兩個運算元均為NULL時,其返回值為1而不為NULL,而當一個運算元為NULL時,其返回值為0而不為NULL。

select 1<=>0,'2'<=>2,NULL<=>NULL; 
  • 1
  • 1

1.2.3 不等於運算子<>或者!=

‘<>’或者’!=’用於判斷數字、字串、表示式不相等的判斷。如果不相等,返回值為1;否則返回值為0。這兩個運算子不能用於判斷空值NULL。

select 'good'<>'good',1<>2,4!=5,5.5!=5,(1+3)!=(2+1),NULL<>NULL; 
  • 1
  • 1

1.2.4 小於或等於元素符

‘<=’用來判斷左邊的運算元是否小於或者等於右邊的運算元。如果小於或者等於,返回值為1,否則返回值為0,’<=’不能用於判斷空值NULL。

select 'good'<>'good',1<=2,NULL<=NULL; 
  • 1
  • 1

1.2.5 小於運算子<

‘<’運算子用來判斷左邊的運算元是否小於右邊的運算元,如果小於,返回值為1,否則返回值為0.’<’不能用於判斷空值NULL。

select 'good'<>'good',1<2,NULL<NULL; 
  • 1
  • 1

1.2.6 大於或等於運算子>=

‘>=’運算子用來判斷左邊的運算元是否大於或者等於右邊的運算元,如果大於或者等於,返回值為1;否則返回值為0。’>=’不能用於判斷空值NULL。

select 'good'>='good',100>=2,NULL>=NULL; 
  • 1
  • 1

1.2.7 大於運算子>

‘>’運算子用來判斷左邊的運算元是否大於右邊的運算元,如果大於,返回值1;否則返回值為0。’>’進行比較判斷,該運算子不能用於空值判斷。

select 'good'>'good',100>2,NULL>NULL; 
  • 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。

select NULL IS NULL,ISNULL(NULL),ISNULL(10),10 IS NOT NULL; 
  • 1
  • 1

1.2.9 BETWEEN AND運算子

語法格式為:expr BETWEEN min AND max。假如expr大於或等於min且小於或等於max,則BETWEEN的返回值為1,否則返回值為0。

select 4 BETWEEN 4 AND 6,4 AND 6,12 BETWEEN 9 AND 10; 
  • 1
  • 1

1.2.10 LEAST運算子

語法格式為:LEAST(值1,值2,…值n),其中值n表示引數列表中有n個值。在有兩個或多個引數的情況下,返回最小值。假如任意一個自變數為NULL,則LEAST()的返回值為NULL。

select least(2,0),least(20.0,3.0,100.5),least(10,NULL); 
  • 1
  • 1

1.2.11 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); 
  • 1
  • 1

1.2.12 IN、NOT IN運算子

IN運算子用來判斷運算元是否為IN列表中的其中一個值,如果是,返回值為1;否則返回值為0。

select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks'); 
  • 1
  • 1

1.2.13 LIKE

LIKE運算子用來匹配字串,語法格式為:expr LIKE 匹配條件,如果expr滿足匹配條件,則返回值為1(TRUE);如果不匹配,則返回值為0(FALSE)。若expr或匹配條件中任何一個為NULL,則結果為NULL。 
LIKE運算子在進行匹配時,可以使用下面兩種萬用字元: 
1. ‘%’,匹配任何數目的字元,甚至包括0字元。 
2. ‘_’,只能匹配一個字元。

select 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't___','s' LIKE NULL; 
  • 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個或多個在它前面的字元。

select 'ssky' REGEXP '^s','ssky' REGEXP 'y$','ssky' REGEXP '.sky','ssky' REGEXP '[ab]'; 
  • 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。

select NOT 10,NOT(1-1),NOT -5,NOT NULL,NOT 1+1; 
  • 1
  • 1

1.3.2 AND或者&&

邏輯與運算子AND或者&&表示當所有運算元均為非零值、並且不為NULL時,計算所得結果為1;當一個或多個運算元為0時,所得結果為0,其餘情況返回值為NULL。

select 1 AND -1,1 AND 0,1 AND NULL,0 AND NULL; 
  • 1
  • 1

1.3.3 OR或者||

邏輯與運算子OR或者||表示當兩個運算元均為非NULL值,且任意一個運算元為非零值時,結果為1,否則結果為0;當有一個運算元為NULL,且另一個運算元為非零值時,則結果為1,否則結果為NULL;當兩個運算元均為NULL時,則所得結果為NULL。

select 1 OR-1,1 OR 0,1 OR NULL,0 OR NULL; 
  • 1
  • 1

1.3.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; 
  • 1
  • 1

1.4 位運算子

位運算子是用來對二進位制位元組中的位進行測試、位移或者測試處理,MySQL中提供的位運算子有按位或(|)、按位與(&)、按位異或(^)、按位左移(<<)、按位右移(>>)、按位取反(~),如下表所示:

運算子 作用
& 位與
^ 位異或
<< 位左移
>> 位右移
~ 位取反,反轉所有位元

1.4.1 位或運算子 |

位或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯或運算。對應的二進位制有一個或兩個為1則該位的運算結果為1,否則為0。

select 10|15,9|4|2; 
  • 1
  • 1

10的二進位制數值為1010,15的二進位制數值為1111,按位或運算之後,結果為1111,即整數15;9的二進位制位1001,4的二進位制為0010,按位或運算之後,結果為1111,即整數15。其結果為一個64位無符號整數。

1.4.2 位與運算子 &

位與運算的實質是將參與運算的兩個運算元,按對應的二進位制數逐位進行邏輯與運算。對應的二進位制都為1,則該位的運算結果為1,否則為0。

select 10&15,9&4&2; 
  • 1
  • 1

10的二進位制位1010,15的二進位制位1111,按位與運算結果為1010,即整數10;9的二進位制為1001,4的二進位制位0100,2的二進位制為0010,按位與運算之後,結果為0000,即整數0,。其結果為一個64位無符號整數。

1.4.3 位異或運算 ^

位異或運算的實質是將參與運算的兩個資料,按對應的二進位制數逐位進行邏輯異或運算。對應的二進位制數不同時,對應的結果才為1。如果兩個對應位數都為0或者都為1,則對應位的結果為0。

select 10^15,1^0,1^1; 
  • 1
  • 1

1.4.4 位左移運算子 <<

位左移運算子<<使指定的二進位制值的所有位都左移指定的位數。左移指定位數之後,左邊高位的數值被移出並丟棄,右邊低位空出的位置用0補齊。語法格式為:expr<

select 1<<2,4<<2; 
  • 1
  • 1

1的二進位制位0000 0001,左移兩位之後0000 0100,即十進位制整數4;十進位制4左移兩位之後變成0001 0000,即變成十進位制的16。

1.4.5 位右移運算子 >>

位右移運算子>>使指定的二進位制的所有位都右移指定的位數。右移指定位數之後,右邊低位的數值將被丟棄移除,左邊高位空出的位置用0補齊。語法格式為:expr>>n。這裡n指定值expr要移除的位數。

select 1>>1,16>>2; 
  • 1
  • 1

1的二進位制位0000 0001右移1位之後變成0000 0000,即十進位制整數0,16的二進位制數值為0001 0000右移兩位之後變成十進位制的4.

1.4.6 位取反運算 ~

位取反運算的實質是將參與運算的資料,按對應的二進位制數逐位反轉,即1取反後變成0,0取反變成1。

select 5&~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寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2017-09-01 09:00 ~ 2017-09-30 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群1     小麥苗的DBA寶典QQ群2        小麥苗的微店

.............................................................................................................................................

MySQL中的運算子
DBA筆試面試講解群1
DBA筆試面試講解群2
歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2144415/,如需轉載,請註明出處,否則將追究法律責任。

相關文章