MySQL常用運算子
一、算數運算子
運算子 | 作用 |
---|---|
+ | 加法運算 |
- | 減法運算 |
* | 乘法運算 |
/或DIV | 除法運算 |
%或MOD | 取餘運算 |
注意:在除法運算和模運算中,如果除數為0,將是非法除法,返回結果為NULL!
示例:
create table t1(num int); insert into t1 values(64); mysql> select num,num+10,num-4,num*2,num/2,num%3 from t1; +------+--------+-------+-------+---------+-------+ | num | num+10 | num-4 | num*2 | num/2 | num%3 | +------+--------+-------+-------+---------+-------+ | 64 | 74 | 60 | 128 | 32.0000 | 1 | +------+--------+-------+-------+---------+-------+
二、比較運算子
select 語句中的條件語句經常要使用比較運算子。通過這些比較運算子,可以判斷表中的哪些記錄是符合條件的,比較結果為真,則返回1,為假則返回0,比較結果不確定則返回NULL。
符號 | 描述 | 備註 |
---|---|---|
= | 等於 | |
<>,!= | 不等於 | |
> | 大於 | |
< | 小於 | |
<= | 小於等於 | |
>= | 大於等於 | |
BETWEEN | 在兩值之間 | 大於等於最小值 |
NOT BETWEEN | 不在兩值之間 | |
IN | 在集合中 | |
NOT IN | 不在集合中 | |
<=> | 嚴格比較兩個NULL值是否相等 | 兩個操作碼均為NULL時,其所得值為1;當一個操作碼為NULL時,其所得值為0 |
LIKE | 模糊匹配 | |
PEGEXP或RLIKE | 匹配正則 | |
IS NULL | 為空 | |
IS NOT NULL | 不為空 |
2.1 等於運算子
等於運算子用來判斷數字、字串和表示式是否相等,如果相等,則返回值為1,否則返回值為0,如果有一個值是NULL,則比較結果是NULL!如下:
select 1=0,'2'=2,(1+3)=(2+2),NULL=NULL; +-----+-------+-------------+-----------+ | 1=0 | '2'=2 | (1+3)=(2+2) | NULL=NULL | +-----+-------+-------------+-----------+ | 0 | 1 | 1 | NULL | +-----+-------+-------------+-----------+
2.2 嚴格等於運算子
這個運算子和等號運算子的作用一致,只不過多了一個功能,就是可以判斷NULL值!如下:
select 1<=>0,'2'<=>2,(1+3)<=>(2+2),NULL<=>NULL;
+-------+---------+---------------+-------------+
| 1<=>0 | '2'<=>2 | (1+3)<=>(2+2) | NULL<=>NULL |
+-------+---------+---------------+-------------+
| 0 | 1 | 1 | 1 |
+-------+---------+---------------+-------------+
2.3 不等於運算子
不等於運算子用於判斷數字、字串、表示式是否不相等,如果不相等則返回 1,否則返回 0 ,但是不能判斷 NULL 值!如下:
select 'good'<>'god', 1<>2, 4!=4, 5.5!=5, NULL<>NULL;
+---------------+------+------+--------+------------+
| 'good'<>'god' | 1<>2 | 4!=4 | 5.5!=5 | NULL<>NULL |
+---------------+------+------+--------+------------+
| 1 | 1 | 0 | 1 | NULL |
+---------------+------+------+--------+------------+
2.4 IS NULL 、IS NOT NULL
- IS NULL是 檢驗一個值是否為 NULL ,如果為 NULL ,返回值為 1,否則返回值為 0;
- IS NOT NULL 檢驗一個值是否不為 NULL ,如果不為 NULL ,返回值為 1,否則返回值為 0;
select null is null,10 is null,10 is not null;
+--------------+------------+----------------+
| null is null | 10 is null | 10 is not null |
+--------------+------------+----------------+
| 1 | 0 | 1 |
+--------------+------------+----------------+
2.5 BETWEEN AND
主要用於判斷一個值是否在兩個值之間!
select 4 between 1 and 5,4 between 4 and 6,12 between 9 and 10;
+-------------------+-------------------+---------------------+
| 4 between 1 and 5 | 4 between 4 and 6 | 12 between 9 and 10 |
+-------------------+-------------------+---------------------+
| 1 | 1 | 0 |
+-------------------+-------------------+---------------------+
2.6 LEAST 、GREATEST
- LEAST :當有兩個或多個引數時,返回最小值,如果有一個值是 NULL ,則返回結果為 NULL;
- GREATEST :當有兩個或多個引數時,返回最大值,如果有一個值是 NULL ,則返回結果為 NULL;
select least(2,0),least('a','b','c'),least(10,NULL),greatest(2,0),greatest(10,NULL);
+------------+--------------------+----------------+---------------+-------------------+
| least(2,0) | least('a','b','c') | least(10,NULL) | greatest(2,0) | greatest(10,NULL) |
+------------+--------------------+----------------+---------------+-------------------+
| 0 | a | NULL | 2 | NULL |
+------------+--------------------+----------------+---------------+-------------------+
2.7 IN、NOT IN
- IN :判斷一個值是否是 IN 列表中的任意一個值;
- NOT IN :判斷一個值是否不是 IN 列表中的任意一個值;
select 2 in(3,5,8,2),2 not in(1,3,5);
+---------------+-----------------+
| 2 in(3,5,8,2) | 2 not in(1,3,5) |
+---------------+-----------------+
| 1 | 1 |
+---------------+-----------------+
2.8 LIKE
- LIKE 運算子用來匹配字串,如果匹配則返回 1,如果不匹配則返回 0;
- LIKE 使用兩種萬用字元:'%' 用於匹配任何數目的字元,包括零字元 ; '_' 只能匹配一個字元;
select 'stud' like 'stu_','stud' like 's___','stud' like '%d'; +--------------------+--------------------+------------------+
| 'stud' like 'stu_' | 'stud' like 's___' | 'stud' like '%d' |
+--------------------+--------------------+------------------+
| 1 | 1 | 1 |
+--------------------+--------------------+------------------+
2.9 REGEXP
1)REGEXP運算子用來匹配字串,如果匹配則返回1,如果不匹配則返回0;
2)REGEXP 使用以下幾種萬用字元:
- '^':用於匹配以什麼開頭的字串;
- '$':用以匹配以什麼結尾的字串;
- '.':用於匹配任何一個單字串;
- "[...]':用於匹配在方括號內的任何字元;
- '*'用於匹配零個或多個在它前面的字元;
select 'ssky' regexp '^s', 'ssky' regexp 'y$', 'ssky' regexp '.sky', 'ssky' regexp '[ab]' ;
+--------------------+--------------------+----------------------+----------------------+
| 'ssky' regexp '^s' | 'ssky' regexp 'y$' | 'ssky' regexp '.sky' | 'ssky' regexp '[ab]' |
+--------------------+--------------------+----------------------+----------------------+
| 1 | 1 | 1 | 0 |
+--------------------+--------------------+----------------------+----------------------+
三、邏輯運算子
邏輯運算子用來判斷表示式的真假。如果表示式是真,結果返回 1。如果表示式是假,結果返回 0!
運算子號 | 作用 |
---|---|
NOT或! | 邏輯非 |
AND | 邏輯與 |
OR | 邏輯或 |
XOR | 邏輯異或 |
3.1 邏輯非
- 當運算元為0時,所得值為1;
- 當運算元為非0時,所得值為0;
- 當運算元為NULL時,所得值為NULL;
select not 10,!10,not(1-1),not 1+1,not null;
+--------+-----+----------+---------+----------+
| not 10 | !10 | not(1-1) | not 1+1 | not null |
+--------+-----+----------+---------+----------+
| 0 | 0 | 1 | 0 | NULL |
+--------+-----+----------+---------+----------+
3.2 邏輯與
- 當所有運算元為非零值,並且不為NULL時,所得值為1;
- 當一個或多個運算元為0時,所得值為0;
- 其餘情況所得值為NULL;
select 1 and -1,1 && 0,0 and null,1 && null;
+----------+--------+------------+----------+
| 1 and -1 | 1 && 0 | 0 and null | 1&& null |
+----------+--------+------------+----------+
| 1 | 0 | 0 | NULL |
+----------+--------+------------+----------+
3.3 邏輯或
- 當兩個運算元均為非 NULL 值,且任意一個運算元為非零值時,結果為 1 ,否則為 0;
- 當有一個運算元為 NULL ,且另一個運算元為非零值時,則結果為 1 ,否則結果為 NULL;
- 當兩個運算元均為 NULL 時,則所得結果為 NULL;
select 1 or -1 or 0,1 || 2,0 or null,null|| null;
+--------------+--------+-----------+-------------+
| 1 or -1 or 0 | 1 || 2 | 0 or null | null|| null |
+--------------+--------+-----------+-------------+
| 1 | 1 | NULL | NULL |
+--------------+--------+-----------+-------------+
3.4 邏輯異或
- a XOR b 的計算等同於 ( a AND (NOT b) ) 或 ( (NOT a) AND b );
- 當任意一個運算元為 NULL 時,返回值為 NULL;
- 對於非 NULL 的運算元,如果兩個運算元都是非 0 值或者都是 0 值,則返回結果為 0;
- 如果一個為 0 值,另一個為非 0 值,返回結果為 1;
select 1 xor 1,0 xor 0,1 xor 0,1 xor null,1 xor 1 xor 1;
+---------+---------+---------+------------+---------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | 1 xor 1 xor 1 |
+---------+---------+---------+------------+---------------+
| 0 | 0 | 1 | NULL | 1 |
+---------+---------+---------+------------+---------------+
四、位運算子
位運算子是在二進位制數上進行計算的運算子。位運算會先將運算元變成二進位制數,進行位運算。然後再將計算結果從二進位制數變回十進位制數!
運算子號 | 作用 |
---|---|
& | 按位與 |
^ | 按位異或 |
! | 取反 |
<< | 左移 |
>> | 右移動 |
4.1 位或運算子
對應的二進位制位有一個或兩個為 1 ,則該位的運算結果為 1 ,否則為 0!
select 10|15,9|4|2;
+-------+-------+
| 10|15 | 9|4|2 | #10的二進位制為1010,15的二進位制為1111,按位或運算之後結果為1111,即15
+-------+-------+ #9的二進位制為1001,4為0100,2的二進位制為0010,按位或運算之後1111,即15
| 15 | 15 |
+-------+-------+
4.2 位與運算子
對應的二進位制位都為 1 ,則該位的運算結果為 1 ,否則為 0!
select 10 & 15,9 & 4 & 2;
+---------+-----------+
| 10 & 15 | 9 & 4 & 2 |
+---------+-----------+
| 10 | 0 |
+---------+-----------+
4.3 位異或運算子
對應的二進位制位不相同時,結果為 1 ,否則為 0!
select 10 ^ 15,1 ^ 0,1^1;
+---------+-------+-----+
| 10 ^ 15 | 1 ^ 0 | 1^1 |
+---------+-------+-----+
| 5 | 1 | 0 |
+---------+-------+-----+
4.4 左移運算子
使指定的二進位制位都左移指定的位數,左移指定位之後,左邊高位的數值將被移出並丟棄,右邊低位空出的位置用 0 補齊!
select 1<<2,4<<2;
+------+------+
| 1<<2 | 4<<2 |
+------+------+
| 4 | 16 |
+------+------+
在上述位左移運算中,1的二進位制值為00000001,左移兩位之後變成00000100,即十進位制數4;4的二進位制值為00000100,左移兩位之後變成00010000,即十進位制數16!
4.5 右移運算子
使指定的二進位制位都右移指定的位數,右移指定位之後,右邊低位的數值將被移出並丟棄,左邊高位空出的位用 0 補齊!
select 1 >> 1,16 >> 2;
+--------+---------+
| 1 >> 1 | 16 >> 2 |
+--------+---------+
| 0 | 4 |
+--------+---------+
4.6 取反運算子(~)
將對應的二進位制數逐位反轉,即 1 取反後變 0 ,0 取反後變 1!
select 5 &~1;
+-------+
| 5 &~1 |
+-------+
| 4 |
+-------+
關於上述的返回值解釋:SQL語句是將5和進行位取反的數字1進行位與運算(&),位於運算的原則是對應的二進位制位都位1,則該位為1,否則為0,5的二進位制數為0101,1的二進位制數為0001,1進行位取反後的值就是1110,那麼0101和1110進行位與運算的結果就是0100,也就是4!
五、運算子優先順序
注意:最低優先順序為:":=";最高優先順序為: !、BINARY、 COLLATE。