MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)
MySQL的四種運算子
一、算術運算子
MySQL 支援使用的算術運算子。
運算子 | 註釋 |
---|---|
+ | 加法 |
- | 減法 |
* | 乘法 |
/ | 除法 |
% | 取餘數 |
用法例項
mysql> select 1+2,5-3,3*4,4/3,7%2;
+-----+-----+-----+--------+------+
| 1+2 | 5-3 | 3*4 | 4/3 | 7%2 |
+-----+-----+-----+--------+------+
| 3 | 2 | 12 | 1.3333 | 1 |
+-----+-----+-----+--------+------+
1 row in set (0.00 sec)
1)在除法運算和求餘數運算中,除數不能為0,若除數是O,返回的結果則為NULL。需要注意的是,如果有多個運算子,按照先乘除後加減的優先順序進行運算,相同優先順序的運算―符沒有先後順序。
2)在MySQL的欄位值內還有一種情況,某些字串型別的欄位儲存的數字型字串,這些欄位在進行算術運算時將會被自動轉換為數字的值。如果字串的開始部分是數字,在轉換時將被轉換為這個數字。如果是既包含字元又包含數字得的混合字串,無法轉換為數字時,將被轉換為0。這些細節在進行算術運算時需多加註意。
二、比較運算子
比較運算子是查詢資料記錄時經常使用的一類運算子。通過使用比較運算子可以判斷出表中有哪些記錄是符合條件的,如果比較的結果為真則返回1,如果為假則返回0,比較的結果如果不確定則返回NULL。其中字串在進行比較的時候預設是不區分大小寫的。
MySQL常用的比較運算子
運算子 | 註釋 |
---|---|
= | 等於 |
> | 大於 |
< | 小於 |
<= | 小於等於 |
>= | 大於等於 |
!=或<> | 不等於 |
IS NULL | 判斷一個值是否為NULL |
IS NOT NULL | 判斷一個值是否不為 NULL |
BETWEEN AND | 兩者之間 |
IN | 在集合中 |
LIKE | 萬用字元匹配,模糊查詢 |
GREATEST | 兩個或多個引數時返回最大值 |
LEAST | 兩個或多個引數時返回最小值 |
1、等於運算子
“=”是用來判斷數字、字串和表示式是否相等的,如果相等則返回1,如果不相等則返回0。如果比較的兩者有一個值是NULL,則比較的結果就是NULL。其中字元的比較是根據ASCII碼來判斷的,如果ASCII碼相等,則表示兩個字元相同;如果ASCIl碼不相等,則表示兩個字元不相同。
- 常用的ASCII值I
用法例項
mysql> select 5=5,'e'='e',(2+6)=(3+5),6='6',4=null;
+-----+---------+-------------+-------+--------+
| 5=4 | 'a'='e' | (2+6)=(3+5) | 6='6' | 4=null |
+-----+---------+-------------+-------+--------+
| 0 | 0 | 1 | 1 | NULL |
+-----+---------+-a------------+-------+--------+
1 row in set (0.00 sec)
注意項
1)如果兩者都是整數,則按照整數值進行比較。
2)如果一個整數一個字串,欄位值的型別相同,則會自動將字串轉換為數字,再進行比較。
3)如果兩者都是字串,則按照字串進行比較。
4)如果兩者中至少有一個值是NULL,則比較的結果是NULL。
2、不等於運算子
不等於號有兩種寫法,分別是<>或者=,用於針對數字、字串和表示式不相等的比較。
如果不相等則返回1,如果相等則返回0,這點正好跟等於的返回值相反。需要注意的是不等
於運算子不能用於判斷 NULL。
用法例項
mysql> select 3<>3,4!='a','abc'!='cba',0<>null;
+------+--------+--------------+---------+
| 3<>3 | 4!='a' | 'abc'!='cba' | 0<>null |
+------+--------+--------------+---------+
| 0 | 1 | 1 | NULL |
+------+--------+--------------+---------+
1 row in set, 1 warning (0.00 sec)
3、大於、大於等於、小於、小於等於運算子
- 大於(>)運算子用來判斷左側的運算元是否大於右側的運算元,若大於返回1,否則返回0,不能用於判斷NULL。
- 小於(<)運算子用來判斷左側的運算元是否小於右側的運算元,若小於返回1,否則返回0,不能用於判斷NULL。
- 大於等於(>=)判斷左側的運算元是否大於等於右側的運算元,若大於等於返回1,否則返回0,不能用於判斷NULL。
- 小於等於(<=)判斷左側的運算元是否小於等於右側的運算元,若小於等於返回1,否則返回,不能用於判斷NULL。
用法例項
mysql> select 5>2,'a'>4,'b'<'a','abc'< 'baa',null<9,(5+3)<=(6+8);
+-----+-------+---------+--------------+--------+--------------+
| 5>2 | 'a'>4 | 'b'<'a' | 'abc'< 'baa' | null<9 | (5+3)<=(6+8) |
+-----+-------+---------+--------------+--------+--------------+
| 1 | 0 | 0 | 1 | NULL | 1 |
+-----+-------+---------+--------------+--------+--------------+
1 row in set, 1 warning (0.00 sec)
//字串做比較時預設只會比較第一個字元的的大小。
//不同型別的欄位型別無法比較,返回值為0
4、IS NULL、IS NOTNULL運算子
IS NULL判斷一個值是否為NULL,如果為NULL返回1,否則返回0
IS NOT NULL判斷一個值是否不為NULL,如果不為NULL返回1,否則返回0
用法例項
mysql> select 2 IS NULL,'' IS NOT NULL,NULL IS NULL,0 IS NULL;
+-----------+----------------+--------------+-----------+
| 2 IS NULL | '' IS NOT NULL | NULL IS NULL | 0 IS NULL |
+-----------+----------------+--------------+-----------+
| 0 | 1 | 1 | 0 |
+-----------+----------------+--------------+-----------+
1 row in set (0.00 sec)
//空值不等於NULL。空值雖然不佔用空間,但是也表示一個值。
//NULL雖然佔用空間,但是不表示一個值,只表示一個NULL物件。
5、BETWEEN AND運算子
BETWEENAND比較運算通常用於判斷一個值是否落在某兩個值之間。可以用於判斷整數或者英文是否在某個數字或者字母之間。
用法例項
mysql> select 5 between 2 and 8,'a' between 'a' and 'b',6 between 1 and 6,'a' between 'b' and 'z';
+-------------------+-------------------------+-------------------+-------------------------+
| 5 between 2 and 8 | 'a' between 'a' and 'b' | 6 between 1 and 6 | 'a' between 'b' and 'z' |
+-------------------+-------------------------+-------------------+-------------------------+
| 1 | 1 | 1 | 0 |
+-------------------+-------------------------+-------------------+-------------------------+
1 row in set (0.00 sec)
// between對於取值之間的頭尾是包含的。類似與小於等於和大於等於。
6、LEAST、 GREATEST運算子
LEAST :當有兩個或者多個引數時,返回其中的最小值。如果其中一個值為NULL,則
返回結果就為NULL。
GREATEST :當有兩個或者多個引數時,返回其中的最大值。如果其中一個值為NULL.
則返回結果就為NULL。
用法例項
mysql> select least(1,2,3,3.1),least('a','b','c'),least('a',5,'b'),least(1,4,8);
+------------------+--------------------+------------------+--------------+
| least(1,2,3,3.1) | least('a','b','c') | least('a',5,'b') | least(1,4,8) |
+------------------+--------------------+------------------+--------------+
| 1.0 | a | 0 | 1 |
+------------------+--------------------+------------------+--------------+
1 row in set, 2 warnings (0.00 sec)
//least :可以比較整數型別和浮點型的最小值,輸出型別自動轉換為浮點型的最小值。
//least:不能比較整數和字串型別的最小值。
mysql> select greatest('a','c',5),greatest(4,5,7),greatest(4.5,5,7),greatest('a','y','b');
+---------------------+-----------------+-------------------+-----------------------+
| greatest('a','c',5) | greatest(4,5,7) | greatest(4.5,5,7) | greatest('a','y','b') |
+---------------------+-----------------+-------------------+-----------------------+
| 5 | 7 | 7.0 | y |
+---------------------+-----------------+-------------------+-----------------------+
1 row in set, 2 warnings (0.00 sec)
//greatest:可以比較整數型別和浮點型的最大值,輸出型別自動轉換為浮點型的最大值
//greatest:可以比較整數型和字元型的最大值,但是會將字串型別的值忽略不參與比較
7、IN、NOTIN運算子
IN:判斷一個值是否在對應的列表中,如果是返回1,否則返回0
NOT IN:判斷一個值是否不在對應的列表中,如果不是返回1,否則返回0
用法例項
mysql> select 'a' in ('a','b', 'c'),'c' not in ('a','b','c');
+-----------------------+--------------------------+
| 'a' in ('a','b', 'c') | 'c' not in ('a','b','c') |
+-----------------------+--------------------------+
| 1 | 0 |
+-----------------------+--------------------------+
1 row in set (0.00 sec)
8、LIKE、NOTLIKE運算子
LIKE用來匹配字串,如果匹配成功則返回1,反之返回0。LIKE支援兩種萬用字元: ‘%’ 用於匹配任意數目的字元,而 ’_’ 只能匹配一個字元。
NOT LIKE正好跟LIKE相反,如果沒有匹配成功則返回1,反之返回0
用法例項
mysql> select 'abc' like 'a%',12 like '1_' ,35 not like '3_67','ac'not like '__';
+-----------------+--------------+--------------------+-------------------+
| 'abc' like 'a%' | 12 like '1_' | 35 not like '3_67' | 'ac'not like '__' |
+-----------------+--------------+--------------------+-------------------+
| 1 | 1 | 1 | 0 |
+-----------------+--------------+--------------------+-------------------+
1 row in set (0.00 sec)
三、邏輯運算子
邏輯運算子又被稱為布林運算子,通常用來判斷表示式的真假,如果為真返回1,否則返回0,真和假也可以用TRUE和FALSE表示。
MySQL中支援使用的邏輯運算子有四種
運算子 | 註釋 |
---|---|
NOT或! | 邏輯非 |
AND或&& | 邏輯與 |
OR或 II | 邏輯或 |
XOR | 邏輯異或 |
- 理解方式
1表示為真TURE,0表示為假FALSE
邏輯非 1!= 0 0!= 1
真的為假,假的為真
邏輯與 0&&0=0 1&&0=0 0&&!=0 1&&1=1
兩個條件都為真為真,兩個為假為假
邏輯或 0||0=0 1||0=1 0||1=1 1||1=1
兩個條件有一個為真則為真,兩個為假為假
邏輯異或 0xor0=0 1xor0=1 0&&1=1 1xor1=0
兩個條件一個為真即為真,兩個為真或兩個為假為假
1、邏輯非
邏輯運算子中最簡單的運算子就是邏輯非,邏輯非使用NOT或!表示。
例項操作
mysql> select not 2,!3,not 0,!(4%2),!NULL;
+-------+----+-------+--------+-------+
| not 2 | !3 | not 0 | !(4%2) | !NULL |
+-------+----+-------+--------+-------+
| 0 | 0 | 1 | 1 | NULL |
+-------+----+-------+--------+-------+
1 row in set (0.00 sec)
- 邏輯非將跟在它後面的邏輯測試取反,把真變為假,把假變為真。
1)如果NOT後面的運算元為0時,所得值為1;
2)如果運算元為非0時,所得值為0;
3)如果運算元為NULL時,所得值為NULL。
2、邏輯與
邏輯與通常用於判斷兩個值或多個值得有效性,邏輯與使用AND或&&表示
例項操作
mysql> select 2 and 5,6 && 0,0&&NULL,1 and NULL;
+---------+--------+---------+------------+
| 2 and 5 | 6 && 0 | 0&&NULL | 1 and NULL |
+---------+--------+---------+------------+
| 1 | 0 | 0 | NULL |
+---------+--------+---------+------------+
1 row in set (0.00 sec)
- 邏輯與將邏輯測試判斷,所有值返回都是真返回真,否者返回假。
NULL在邏輯判斷中的含義
NULL本真並不表示0或1即真假。當判斷條件因為有NULL存在的時候無法判斷真假時就返回一個NULL值
判斷條件 | && | II | xor |
---|---|---|---|
1與NULL | NULL | 1 | 1 |
NULL與1 | NULL | 1 | 1 |
0與NULL | 0 | NULL | NULL |
NULL與0 | 0 | NULL | NULL |
NULL與NULL | NULL | NULL | NULL |
3、邏輯或
邏輯或表示兩個值或多個值,其中有任意一個非零值,即返回真。邏輯或用||或OR表示
例項操作
MySQL 5.6 識別 “||” 符號的或運算子
mysql> select 4||5,6 or 0,0||5;
+------+--------+------+
| 4||5 | 6 or 0 | 0||5 |
+------+--------+------+
| 45 | 1 | 05 |
+------+--------+------+
1 row in set (0.00 sec)
MySQL 5.7 不識別 “||” 符號的或運算子,5.7邏輯與判斷的時候建議都使用 “or” 或運算子
mysql> select 4||5,6 or 0,0||5;
+------+--------+------+
| 4||5 | 6 or 0 | 0||5 |
+------+--------+------+
| 45 | 1 | 05 |
+------+--------+------+
1 row in set (0.00 sec)
4、邏輯異或
任意兩個值的運算元,如果兩者都是0或者都是非0,則返回0;如果一個為0,另一個為非0,則返回結果為1;當任意一個值為 NULL時,返回值為NULL。邏輯異或用 “xor” 表示
例項操作
mysql> select 5 xor 6,0 xor 0,0 xor 5;
+---------+---------+---------+
| 5 xor 6 | 0 xor 0 | 0 xor 5 |
+---------+---------+---------+
| 0 | 0 | 1 |
+---------+---------+---------+
1 row in set (0.00 sec)
四、位運算子
位運算子實際上是對二進位制數進行計算的運算子。
MySQL內位運算會先將運算元變成二進位制格式,然後進行位運算,最後在將計算結果從二進位制變回到十進位制格式,方便使用者檢視。
MySQL支援6種位運算子
位運算子 | 註釋 |
---|---|
& | 按位與 |
I | 按位或 |
~ | 按位取反 |
^ | 按位異或 |
<< | 按位左移 |
>> | 按位右移 |
例項操作
- 按位與、或、異或、取反
mysql> select 15&5,8|5,5^10,10&~1;
+------+-----+------+-------+
| 15&5 | 8|5 | 5^10 | 10&~1 |
+------+-----+------+-------+
| 5 | 13 | 15 | 10 |
+------+-----+------+-------+
1 row in set (0.00 sec)
運算過程 15&5 8|5 5^10 10&~1
第一步轉換為二進位制 15=1111 5=101 8=1000 5=101 5=101 10=1010 10=1010 1=1
第二步將二進位制數一位一位對其進行運算子判斷,對其方式為右對其向左補零。 ~1=1110
15=1111 8=1000 5=0101 10=1010
5=0101 5=0101 10=1010 ~1=1110
得到 0101=5 1101=13 1111=15 1010=10
-
按位與運算(&),是對應的二進位制位都是1的,它們的運算結果為1,否則為0.
-
按位或運算(|),是對應的二進位制位有一個或兩個為1的,運算結果為1,否則為0.
-
按位異或運算(^),是對應的二進位制位不相同時,運算結果1,否則為0.
-
按位取反(~),是對應的二進位制數逐位反轉,即1取反後變為0,0取反後變為1.通常結合其他的位運算一起使用,先對值取反在按另一個值補齊在進行其他的位運算子運算.
-
按位左移、右移
mysql> select 5<<2,2<<5,15>>3,25>>5;
+------+------+-------+-------+
| 5<<2 | 2<<5 | 15>>3 | 25>>5 |
+------+------+-------+-------+
| 20 | 64 | 1 | 0 |
+------+------+-------+-------+
1 row in set (0.00 sec)
向左位移過程 5<<2
轉換為二進位制 5=101
將5的二進位制數整體向左移動兩個位置空出來的補零得到 10100
轉換為十進位制為25
向右位移的過程 15>>3
轉換為二進位制 15=1111
將15的二進位制數整體向右移動三個位置,移出的數丟棄得到 1
轉換為十進位制為1
注:左移或右移運算子,都是將數轉換為二進位制後,然後在左移或右移指定的位數,超出的位數將被移除並丟棄,空出來的位置用0補齊。
五、運算子的優先順序
運算子,在使用過程中都有優先順序問題。運算子的優先順序決定了不同的運算子在計算過程中的先後順序。級別高的運算子會先進行計算,如果運算子的級別相同,MySQL會按照順序從左到右依次進行計算。如果不確定所使用的運算子的優先順序,可以使用()改變優先順序。
MySQL常用運算子的優先順序表
相關文章
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- javascript運算子——邏輯運算子JavaScript
- Python學習-比較運算子和邏輯運算子Python
- Java基礎09:邏輯運算子、位運算子Java
- 運算子 運算子
- 算術運算子裡的特殊運算子
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- java短路運算子和邏輯運算子的區別Java
- 邏輯運算子
- Kotlin 運算子詳解:算術、賦值、比較與邏輯運算子全解析Kotlin賦值
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- 運算子-賦值運算子賦值
- SCSS 邏輯運算子CSS
- javascript邏輯運算子“||”和“&&”JavaScript
- javascript中&&運算子和||運算子的使用JavaScript
- 位運算子
- SCSS 比較運算子CSS
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- mysql運算子MySql
- JavaScript ! 邏輯非運算子JavaScript
- JavaScript || 邏輯或運算子JavaScript
- JavaScript && 邏輯與運算子JavaScript
- iOS Swift邏輯運算子iOSSwift
- 運算子
- SCSS 算術運算子CSS
- Java算術運算子Java
- 位運算子的計算
- Java位運算子Java
- javascript位運算子JavaScript
- javascript基礎(賦值運算子,關係運算子,相等運算子,三元運算子,運算子的優先順序,程式碼塊)(十)JavaScript賦值
- JS 中的邏輯運算子JS
- 算數運算子
- C#運算子大全-各種運算子號的意思和作用C#
- MySQL where 運算子MySql
- php運算子運用之型別運算子該如何使用PHP型別
- PHP中的比較運算子PHP
- Java基礎——邏輯運算子Java