mysql中的四大運(yùn)算符種類(lèi)實(shí)例匯總(20多項(xiàng))?
運(yùn)用運(yùn)算法有什么好處呢?
運(yùn)用運(yùn)算符可以更加靈活的使用表中的數(shù)據(jù),我們可以通過(guò)使用運(yùn)算符來(lái)解決我們的很多問(wèn)題,大大提高效率。
什么是運(yùn)算符
運(yùn)算符是告訴mysql
執(zhí)行特定算術(shù)或者邏輯操作的符號(hào)。
mysql
的內(nèi)部運(yùn)算符很豐富,主要有四大類(lèi),分別是:
算術(shù)運(yùn)算符:用于各類(lèi)數(shù)值運(yùn)算
- 加(+)
- 減(-)
- 乘(*)
- 除(/)
- 求余(或者稱(chēng)模運(yùn)算)(%)
- 比較運(yùn)算符:用于比較運(yùn)算
- 大于(>)
- 小于(<)
- 等于(=)
- 大于等于(>=)
- 小于等于(<=)
- 不等于(!=)
IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP
等
- 邏輯運(yùn)算符:求值所得結(jié)果均為1(
TRUE
)、0(FALSE
),這類(lèi)運(yùn)算符有:
- 邏輯非(NOT或者!)
- 邏輯與(AND或者&&)
- 邏輯或(OR或者||)
- 邏輯異或(XOR)
- 位運(yùn)算符:參與運(yùn)算的操作數(shù)按二進(jìn)制位進(jìn)行運(yùn)算
- 位與(&)
- 位或(|)
- 位非(~)
- 位異或(^)
- 左移(<<)
- 右移(>>)
可以看到上面有多達(dá)20多種運(yùn)算符,我們接下來(lái)就根據(jù)這個(gè)來(lái)一一進(jìn)行整理。
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符是sql
中最基本的運(yùn)算符;
老規(guī)矩,一切都在操作中;
舉個(gè)例子
創(chuàng)建表一個(gè)名為yunweijia_1
的數(shù)據(jù)表;
mysql> create table yunweijia_1 (num int); Query OK, 0 rows affected (0.04 sec) mysql> show tables; +-------------------+ | Tables_in_test_db | +-------------------+ | yunweijia_1 | +-------------------+ 1 row in set (0.00 sec) mysql>
在yunweijia_1
的數(shù)據(jù)表中插入數(shù)據(jù);
mysql> insert into yunweijia_1 values (66); Query OK, 1 row affected (0.01 sec) mysql>
加法和減法運(yùn)算
mysql> select num, num+10, num-10, num+10-5, num-5+10 from yunweijia_1; +------+--------+--------+----------+----------+ | num | num+10 | num-10 | num+10-5 | num-5+10 | +------+--------+--------+----------+----------+ | 66 | 76 | 56 | 71 | 71 | +------+--------+--------+----------+----------+ 1 row in set (0.00 sec) mysql>
從上面可以看到,我們可以對(duì)num
字段的值進(jìn)行加法和減法的運(yùn)算,而且+
和-
的優(yōu)先級(jí)相同,先加后減或者先減后加的結(jié)果是相同的哈。
乘法、除法和求余運(yùn)算
mysql> select num, num*2, num/2, num%22, num%30 from yunweijia_1; +------+-------+---------+--------+--------+ | num | num*2 | num/2 | num%22 | num%30 | +------+-------+---------+--------+--------+ | 66 | 132 | 33.0000 | 0 | 6 | +------+-------+---------+--------+--------+ 1 row in set (0.00 sec) mysql>
從上面可以看到,對(duì)num
進(jìn)行除除法運(yùn)算的時(shí)間,66被2整除之后,小數(shù)位也是保留了4位小數(shù)的。求余運(yùn)算的時(shí)候,由于66被22整除了,所以余數(shù)是0,但是66無(wú)法被30整除,所以余數(shù)就是6了。
注意點(diǎn):
在數(shù)學(xué)運(yùn)算時(shí),除數(shù)為0的除法是沒(méi)有意義的,因此除法運(yùn)算中的除數(shù)不能為0,如果被0除的話(huà),結(jié)果會(huì)返回
NULL
。如下:
mysql> select num, num/0, num%0 from yunweijia_1; +------+-------+-------+ | num | num/0 | num%0 | +------+-------+-------+ | 66 | NULL | NULL | +------+-------+-------+ 1 row in set (0.00 sec) mysql>
比較運(yùn)算符
一個(gè)比較運(yùn)算符的結(jié)果總是1、0或者null
。比較運(yùn)算符經(jīng)常在select
的查詢(xún)條件子句中使用,用來(lái)查詢(xún)滿(mǎn)足指定條件的記錄。
等于運(yùn)算符(=)
如果相等,返回值為1,否則返回值為0;
mysql> select 1=0, '2'=2, 2=2, '0.01'=0, 'a'='a', (1+5)=(8-2), NULL=NULL; +-----+-------+-----+----------+---------+-------------+-----------+ | 1=0 | '2'=2 | 2=2 | '0.01'=0 | 'a'='a' | (1+5)=(8-2) | NULL=NULL | +-----+-------+-----+----------+---------+-------------+-----------+ | 0 | 1 | 1 | 0 | 1 | 1 | NULL | +-----+-------+-----+----------+---------+-------------+-----------+ 1 row in set (0.00 sec) mysql>
從結(jié)果可以看到哈,在進(jìn)行判斷時(shí),2=2和'2'=2的返回值是相同的,都是1,這是為啥呢,是因?yàn)樵谶M(jìn)行判斷時(shí),mysql
自動(dòng)進(jìn)行了轉(zhuǎn)換,把字符2
轉(zhuǎn)換成了數(shù)字2;'a'='a'是相同的字符比較,因此返回值為1;表達(dá)式的話(huà)就因?yàn)榈忍?hào)(=)兩邊計(jì)算結(jié)果一致,所以返回值是1,由于(=)不能用于空值NULL
的判斷,因此返回值為NULL
。
所以數(shù)值比較時(shí)有以下規(guī)則:
- 若有一個(gè)或者兩個(gè)參數(shù)為
NULL
,則比較運(yùn)算的結(jié)果為NULL
; - 若容一個(gè)比較運(yùn)算中的兩個(gè)參數(shù)都是字符串,則按照字符串進(jìn)行比較;
- 若兩個(gè)參數(shù)均為整數(shù)的話(huà),則按照整數(shù)進(jìn)行比較;
- 若用字符串和數(shù)字進(jìn)行相等判斷,則
mysql
自動(dòng)可以將字符串轉(zhuǎn)換為數(shù)字。
安全等于運(yùn)算符(<=>)
mysql
中的安全等于運(yùn)算符和等于運(yùn)算符類(lèi)似,不過(guò)呢,安全等于運(yùn)算符可以用來(lái)判斷NULL
值。在兩個(gè)操作數(shù)均為NULL
時(shí),其返回值為1,而不是直接返回NULL
;反之,當(dāng)一個(gè)操作數(shù)為NULL
,其返回值為0
,而也不是NULL
。
mysql> select 1<=>0, '2'<=>2, 2<=>2, '0.01'<=>0, 'a'<=>'a', (1+5)<=>(8-2), NULL<=>NULL, 3<=>NULL; +-------+---------+-------+------------+-----------+---------------+-------------+----------+ | 1<=>0 | '2'<=>2 | 2<=>2 | '0.01'<=>0 | 'a'<=>'a' | (1+5)<=>(8-2) | NULL<=>NULL | 3<=>NULL | +-------+---------+-------+------------+-----------+---------------+-------------+----------+ | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | +-------+---------+-------+------------+-----------+---------------+-------------+----------+ 1 row in set (0.00 sec) mysql>
不等于運(yùn)算符(<>或者!=)
'<>'或者'!='用于判斷數(shù)字、字符串、表達(dá)式不相等的判斷;如果不相等,返回值為1;否則返回值為0;
注意:
這兩個(gè)運(yùn)算符不能用于判斷空值
NULL
。
mysql> select 'goot'<>'good', 'good'!='good', 1<>2, 4!=4, 5.5!=5, (9-3)!=(9-5), NULL<>NULL; +----------------+----------------+------+------+--------+--------------+------------+ | 'goot'<>'good' | 'good'!='good' | 1<>2 | 4!=4 | 5.5!=5 | (9-3)!=(9-5) | NULL<>NULL | +----------------+----------------+------+------+--------+--------------+------------+ | 1 | 0 | 1 | 0 | 1 | 1 | NULL | +----------------+----------------+------+------+--------+--------------+------------+ 1 row in set (0.00 sec) mysql>
小于等于運(yùn)算符(<=)
用來(lái)判斷左邊的操作數(shù)是否小于等于右邊的操作數(shù)。
如果小于等于,返回值為1,否則返回值為0。同樣的,<=
不能用于判斷空值NULL
。
mysql> select 'good'<='good', 'good'<='goood', 'good'<='god', 1<=2, 3<=2, (4+1)<=(9-8), NULL<=NULL; +----------------+-----------------+---------------+------+------+--------------+------------+ | 'good'<='good' | 'good'<='goood' | 'good'<='god' | 1<=2 | 3<=2 | (4+1)<=(9-8) | NULL<=NULL | +----------------+-----------------+---------------+------+------+--------------+------------+ | 1 | 1 | 0 | 1 | 0 | 0 | NULL | +----------------+-----------------+---------------+------+------+--------------+------------+ 1 row in set (0.00 sec) mysql>
小于運(yùn)算符(<)
用來(lái)判斷左邊的操作數(shù)是否小于右邊的操作數(shù);
如果小于,返回值為1,否則返回值為0。<
不能用于判斷空值NULL
。
mysql> select 'good'<'good', 'good'<'goodd', 'good'<'god', 1<2, 2<2, 5<3, NULL<NULL; +---------------+----------------+--------------+-----+-----+-----+-----------+ | 'good'<'good' | 'good'<'goodd' | 'good'<'god' | 1<2 | 2<2 | 5<3 | NULL<NULL | +---------------+----------------+--------------+-----+-----+-----+-----------+ | 0 | 1 | 0 | 1 | 0 | 0 | NULL | +---------------+----------------+--------------+-----+-----+-----+-----------+ 1 row in set (0.00 sec) mysql>
大于等于運(yùn)算符(>=)
用來(lái)判斷左邊的操作數(shù)是否大于等于右邊的操作數(shù)。
如果大于等于,返回值為1;否則返回值為0。不能用于判斷空值NULL
。
mysql> select 'good'>='good', 'good'>='goodd', 'good'>='god', 1>=2, 2>=1, (5+5)>=(6-2), NULL>=NULL; +----------------+-----------------+---------------+------+------+--------------+------------+ | 'good'>='good' | 'good'>='goodd' | 'good'>='god' | 1>=2 | 2>=1 | (5+5)>=(6-2) | NULL>=NULL | +----------------+-----------------+---------------+------+------+--------------+------------+ | 1 | 0 | 1 | 0 | 1 | 1 | NULL | +----------------+-----------------+---------------+------+------+--------------+------------+ 1 row in set (0.00 sec) mysql>
大于運(yùn)算符(>)
用來(lái)判斷左邊的操作數(shù)是否大于右邊的操作數(shù)。
如果大于,返回值為1;否則返回值為0。不能用于判斷空值NULL
。
mysql> select 'good'>'good', 'good'>'goood', 'good'>'god', 2>1, 3>5, (9+9)>(1+2), NULL>NULL; +---------------+----------------+--------------+-----+-----+-------------+-----------+ | 'good'>'good' | 'good'>'goood' | 'good'>'god' | 2>1 | 3>5 | (9+9)>(1+2) | NULL>NULL | +---------------+----------------+--------------+-----+-----+-------------+-----------+ | 0 | 0 | 1 | 1 | 0 | 1 | NULL | +---------------+----------------+--------------+-----+-----+-------------+-----------+ 1 row in set (0.00 sec) mysql>
IS NULL(ISNULL)和(IS NOT NULL)運(yùn)算符
is null
和isnull
用來(lái)檢驗(yàn)一個(gè)值是否為NULL
;
如果是NULL
,返回值為1,否則返回值為0。
is not null
用來(lái)檢驗(yàn)一個(gè)值是否為非NULL
;
如果是非NULL
,返回值為1,否則返回值為0。
mysql> select null is null, isnull(null), isnull(99), 99 is not null; +--------------+--------------+------------+----------------+ | null is null | isnull(null) | isnull(99) | 99 is not null | +--------------+--------------+------------+----------------+ | 1 | 1 | 0 | 1 | +--------------+--------------+------------+----------------+ 1 row in set (0.00 sec) mysql>
BETWEEN AND運(yùn)算符
語(yǔ)法格式:
expr between min and max
如果expr
大于等于min
且小于等于max
,則between
的返回值為1,否則返回值為0。
mysql> select 4 between 1 and 5, 4 between 4 and 5, 9 between 1 and 8, 7 between 10 and 12; +-------------------+-------------------+-------------------+---------------------+ | 4 between 1 and 5 | 4 between 4 and 5 | 9 between 1 and 8 | 7 between 10 and 12 | +-------------------+-------------------+-------------------+---------------------+ | 1 | 1 | 0 | 0 | +-------------------+-------------------+-------------------+---------------------+ 1 row in set (0.00 sec) mysql>
LEAST運(yùn)算符
語(yǔ)法格式:
least (值1,值2,...,值n)
在有兩個(gè)或者多個(gè)參數(shù)的情況下,返回最小值。如果任意一個(gè)自變量為NULL
,則LEAST()
返回的值為NULL
;
mysql> select least(0,1,2,3), least(1.0,5,99), least('a', 'b', 'c'), least(0,null,9); +----------------+-----------------+----------------------+-----------------+ | least(0,1,2,3) | least(1.0,5,99) | least('a', 'b', 'c') | least(0,null,9) | +----------------+-----------------+----------------------+-----------------+ | 0 | 1.0 | a | NULL | +----------------+-----------------+----------------------+-----------------+ 1 row in set (0.00 sec) mysql>
GREATEST(VALUE1, VALUE2,......)
當(dāng)有兩個(gè)或者多個(gè)參數(shù)時(shí),返回最大值。如果任意一個(gè)自變量為NULL
,則grestest()
返回的值為NULL
。
mysql> select greatest(0,1,2,3), greatest(1.0,5,99), greatest('a', 'b', 'c'), greatest(0,null,9); +-------------------+--------------------+-------------------------+--------------------+ | greatest(0,1,2,3) | greatest(1.0,5,99) | greatest('a', 'b', 'c') | greatest(0,null,9) | +-------------------+--------------------+-------------------------+--------------------+ | 3 | 99.0 | c | NULL | +-------------------+--------------------+-------------------------+--------------------+ 1 row in set (0.00 sec) mysql>
IN、NOT IN 運(yùn)算符
in
運(yùn)算符用來(lái)判斷操作數(shù)是否為in
列表中的其中一個(gè)值;
如果是,返回值為1,否則的話(huà)返回值為0。
mysql> select 9 in (1,4,9,10,'yunweijia'), 'yunweijia' in (1,4,9,10,'yunweijia'), 1 in (2,4,5); +-----------------------------+---------------------------------------+--------------+ | 9 in (1,4,9,10,'yunweijia') | 'yunweijia' in (1,4,9,10,'yunweijia') | 1 in (2,4,5) | +-----------------------------+---------------------------------------+--------------+ | 1 | 1 | 0 | +-----------------------------+---------------------------------------+--------------+ 1 row in set, 1 warning (0.00 sec) mysql>
not in
運(yùn)算符用來(lái)判斷表達(dá)式是否為in
列表中的其中一個(gè)值;
如果不是,返回值為1,否則的話(huà)返回值為0。
mysql> select 9 not in (1,4,9,10,'yunweijia'), 'yunweijia' not in (1,4,9,10,'yunweijia'), 1 not in (2,4,5); +---------------------------------+-------------------------------------------+------------------+ | 9 not in (1,4,9,10,'yunweijia') | 'yunweijia' not in (1,4,9,10,'yunweijia') | 1 not in (2,4,5) | +---------------------------------+-------------------------------------------+------------------+ | 0 | 0 | 1 | +---------------------------------+-------------------------------------------+------------------+ 1 row in set, 1 warning (0.00 sec) mysql>
當(dāng)in
里面存在null
值,如果運(yùn)算符不成立的話(huà),直接返回null
;
mysql> select 9 in (1,4,9,10, null), 'yunweijia' in (1,4,9,10,'yunweijia', null), 1 in (2,4,5, null); +-----------------------+---------------------------------------------+--------------------+ | 9 in (1,4,9,10, null) | 'yunweijia' in (1,4,9,10,'yunweijia', null) | 1 in (2,4,5, null) | +-----------------------+---------------------------------------------+--------------------+ | 1 | 1 | NULL | +-----------------------+---------------------------------------------+--------------------+ 1 row in set, 1 warning (0.00 sec) mysql>
like運(yùn)算法
用來(lái)匹配字符串;語(yǔ)法格式:
expr like 匹配條件
如果expr
滿(mǎn)足匹配條件,則返回值為1,否則返回值為0。
當(dāng)expr
或匹配條件中任何一個(gè)為null
,則結(jié)果為null
。
like
運(yùn)算符在進(jìn)行匹配的時(shí)候,可以使用通配符,如下:
%
匹配任何數(shù)目的字符,甚至包括零字符;_
只能匹配一個(gè)字符;
mysql> select 'yunweijia' like 'yunweijia', 'ywj' like 'yw_', 'ywj' like 'y%', 'ywj' like 'yunweijia'; +------------------------------+------------------+-----------------+------------------------+ | 'yunweijia' like 'yunweijia' | 'ywj' like 'yw_' | 'ywj' like 'y%' | 'ywj' like 'yunweijia' | +------------------------------+------------------+-----------------+------------------------+ | 1 | 1 | 1 | 0 | +------------------------------+------------------+-----------------+------------------------+ 1 row in set (0.00 sec) mysql>
REGEXP運(yùn)算符
mysql
中的正則表達(dá)式,用來(lái)匹配字符串,語(yǔ)法格式為:
expr regexp 匹配條件
如果expr
滿(mǎn)足匹配條件,返回1,否則返回0,如果expr
或匹配條件任意一個(gè)為NULL
,則結(jié)果為NULL
。
regexp
運(yùn)算符在進(jìn)行匹配時(shí),常用的有以下幾種通配符:
^
匹配以該字符后面的字符開(kāi)頭的字符串$
匹配以該字符前面的字符結(jié)尾的字符串.
匹配任意一個(gè)單字符[...]
匹配在方括號(hào)內(nèi)的任何字符,例如:[abc]匹配'a','b','c'。常用的還有[a-z]匹配任何字母,而[0-9]匹配任何數(shù)字*
匹配另個(gè)或者多個(gè)在他前面的字符,例如:'x*'匹配任何數(shù)量的'x'字符,[0-9]*匹配任何數(shù)字,*匹配任何數(shù)量的任何字符。
mysql> select 'yunweijia' regexp '^y', 'ywj' regexp 'j$', 'ywj' regexp 'y*j', 'ywj' regexp "['ywj', 'aa', 'bb']"; +-------------------------+-------------------+--------------------+------------------------------------+ | 'yunweijia' regexp '^y' | 'ywj' regexp 'j$' | 'ywj' regexp 'y*j' | 'ywj' regexp "['ywj', 'aa', 'bb']" | +-------------------------+-------------------+--------------------+------------------------------------+ | 1 | 1 | 1 | 1 | +-------------------------+-------------------+--------------------+------------------------------------+ 1 row in set (0.00 sec) mysql>
邏輯運(yùn)算符
在mysql
中所有邏輯運(yùn)算符的求值所得結(jié)果均為TRUE
、FALSE
或NULL
。
在mysql
中,他們提現(xiàn)為1(TRUE
)、0(FALSE
)和NULL
。
NOT或!
邏輯非運(yùn)算符not
或者!
,表示當(dāng)操作數(shù)為0時(shí),所得值為1;
當(dāng)操作數(shù)為非零值時(shí),所得值為0;
當(dāng)操作數(shù)為null
時(shí),所得的返回值為null
。
mysql> select not 10, not (1-1), not -5, not null, not 1+1; +--------+-----------+--------+----------+---------+ | not 10 | not (1-1) | not -5 | not null | not 1+1 | +--------+-----------+--------+----------+---------+ | 0 | 1 | 0 | NULL | 0 | +--------+-----------+--------+----------+---------+ 1 row in set (0.00 sec) mysql>
小提示:
在使用運(yùn)算符計(jì)算時(shí),一定要注意不同運(yùn)算符的優(yōu)先級(jí)不同。如果不能確定計(jì)算順序,最好使用括號(hào),以保證運(yùn)算結(jié)果的正確。
ADD或者&&
邏輯與運(yùn)算符add
或者&&
表示當(dāng)所有操作數(shù)均為非零值,并且不為null
時(shí),計(jì)算所得結(jié)果為1,;
當(dāng)一個(gè)或多個(gè)操作數(shù)為0時(shí),所得結(jié)果為0;
其余情況返回值為null
。
mysql> select 9 and -9, 1 and 0, 1 and null, 0 and null; +----------+---------+------------+------------+ | 9 and -9 | 1 and 0 | 1 and null | 0 and null | +----------+---------+------------+------------+ | 1 | 0 | NULL | 0 | +----------+---------+------------+------------+ 1 row in set (0.01 sec) mysql> select 9 && -9, 1 && 0, 1 && null, 0 && null; +---------+--------+-----------+-----------+ | 9 && -9 | 1 && 0 | 1 && null | 0 && null | +---------+--------+-----------+-----------+ | 1 | 0 | NULL | 0 | +---------+--------+-----------+-----------+ 1 row in set, 4 warnings (0.00 sec) mysql>
or或者||
邏輯或運(yùn)算符or
或者||
表示當(dāng)兩個(gè)操作數(shù)均為非null
值且任意一個(gè)操作數(shù)為非零值時(shí),結(jié)果為1,否則結(jié)果為0;
當(dāng)有一個(gè)操作數(shù)為null
,且另一個(gè)操作數(shù)為非零值時(shí),則結(jié)果為1,否則結(jié)果為null
;
當(dāng)兩個(gè)操作數(shù)均為null
時(shí),則所得結(jié)果為null
。
mysql> select 9 or -9 or 0, 1 or 2, 0 or 0, 1 or null, 0 or null, null or null; +--------------+--------+--------+-----------+-----------+--------------+ | 9 or -9 or 0 | 1 or 2 | 0 or 0 | 1 or null | 0 or null | null or null | +--------------+--------+--------+-----------+-----------+--------------+ | 1 | 1 | 0 | 1 | NULL | NULL | +--------------+--------+--------+-----------+-----------+--------------+ 1 row in set (0.00 sec) mysql> select 9 || -9 || 0, 1 || 2, 0 || 0, 1 || null, 0 || null, null || null; +--------------+--------+--------+-----------+-----------+--------------+ | 9 || -9 || 0 | 1 || 2 | 0 || 0 | 1 || null | 0 || null | null || null | +--------------+--------+--------+-----------+-----------+--------------+ | 1 | 1 | 0 | 1 | NULL | NULL | +--------------+--------+--------+-----------+-----------+--------------+ 1 row in set, 7 warnings (0.00 sec) mysql>
XOR
邏輯異或運(yùn)算符xor
表示當(dāng)任意一個(gè)操作數(shù)為null
時(shí),返回值為null
;
對(duì)于非null
的操作數(shù),如果兩個(gè)操作數(shù)都是非0值或者都是0值,則返回結(jié)果為0;
如果一個(gè)為0值,另一個(gè)為非0值,返回結(jié)果為1。
mysql> select 1 xor 1, 0 xor 0, 1 xor 0, 1 xor null, null xor null, 1 xor 1 xor 1; +---------+---------+---------+------------+---------------+---------------+ | 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | null xor null | 1 xor 1 xor 1 | +---------+---------+---------+------------+---------------+---------------+ | 0 | 0 | 1 | NULL | NULL | 1 | +---------+---------+---------+------------+---------------+---------------+ 1 row in set (0.00 sec) mysql>
位運(yùn)算符
位運(yùn)算符是在二進(jìn)制數(shù)上進(jìn)行計(jì)算的運(yùn)算符。位運(yùn)算符會(huì)先將操作數(shù)變成二進(jìn)制數(shù),然后進(jìn)行位運(yùn)算,最后將計(jì)算結(jié)果從二進(jìn)制變回十進(jìn)制數(shù)。
位或運(yùn)算符(||)
位或運(yùn)算的實(shí)質(zhì)是將參與運(yùn)算的幾個(gè)數(shù)據(jù)按照對(duì)應(yīng)的二進(jìn)制數(shù)作為進(jìn)行邏輯或運(yùn)算。對(duì)應(yīng)的二進(jìn)制位有一個(gè)或兩個(gè)為1則該位的運(yùn)算結(jié)果為1,否則為0。
mysql> select 10 | 15, 9 | 4 | 2; +---------+-----------+ | 10 | 15 | 9 | 4 | 2 | +---------+-----------+ | 15 | 15 | +---------+-----------+ 1 row in set (0.01 sec) mysql>
10的二進(jìn)制數(shù)值為1010
,15的二進(jìn)制數(shù)值為1111
,按位或運(yùn)算之后,結(jié)果為1111
,即整數(shù)15;
9的二進(jìn)制數(shù)值為1001
,4的二進(jìn)制數(shù)值為0100
,2的二進(jìn)制數(shù)值為0010
,按位或運(yùn)算之后,結(jié)果為1111
,即整數(shù)15。
位與運(yùn)算符(&)
位與運(yùn)算的實(shí)質(zhì)是將參與運(yùn)算的幾個(gè)操作數(shù)按照對(duì)應(yīng)的二進(jìn)制數(shù)逐位進(jìn)行邏輯與運(yùn)算。對(duì)應(yīng)的二進(jìn)制位都是1或1則該位的運(yùn)算結(jié)果為1,否則為0。
mysql> select 10 & 15, 9 & 4 & 2; +---------+-----------+ | 10 & 15 | 9 & 4 & 2 | +---------+-----------+ | 10 | 0 | +---------+-----------+ 1 row in set (0.00 sec) mysql>
10的二進(jìn)制數(shù)值為1010
,15的二進(jìn)制數(shù)值為1111
,按位與運(yùn)算之后,結(jié)果為1010
,即整數(shù)10;
9的二進(jìn)制數(shù)值為1001
,4的二進(jìn)制數(shù)值為0100
,2的二進(jìn)制數(shù)值為0010
,按位與運(yùn)算之后,結(jié)果為0000
,即整數(shù)0。
位異或運(yùn)算符(^)
位異或運(yùn)算的實(shí)質(zhì)是將參與運(yùn)算的兩個(gè)數(shù)據(jù)按照對(duì)應(yīng)的二進(jìn)制數(shù)逐位進(jìn)行邏輯異或運(yùn)算。
對(duì)應(yīng)位的二進(jìn)制數(shù)不同時(shí),對(duì)應(yīng)位的結(jié)果才為1。如果兩個(gè)對(duì)應(yīng)位數(shù)都為0或者都為1,則對(duì)應(yīng)位的結(jié)果為0。
mysql> select 10 ^ 5, 1 ^ 2, 3 ^ 6; +--------+-------+-------+ | 10 ^ 5 | 1 ^ 2 | 3 ^ 6 | +--------+-------+-------+ | 15 | 3 | 5 | +--------+-------+-------+ 1 row in set (0.00 sec) mysql>
10的二進(jìn)制數(shù)值為1010
,5的二進(jìn)制數(shù)值為101
,按位異或運(yùn)算之后,結(jié)果為1111
,即整數(shù)15;
1的二進(jìn)制數(shù)值為1
,2的二進(jìn)制數(shù)值為10
,按位異或運(yùn)算之后,結(jié)果為11
,即整數(shù)為3;
3的二進(jìn)制數(shù)值為11
,6的二進(jìn)制數(shù)值為110
,按位異或運(yùn)算之后,結(jié)果為101
,即整數(shù)5。
位左移運(yùn)算符(<<)
位左移運(yùn)算符<<
使指定的二進(jìn)制值的所有位都左移指定的位數(shù)。
左移指定位數(shù)之后,左邊高位的數(shù)值繼續(xù)左移,并不會(huì)進(jìn)行丟棄,右邊低位空出的位置用0補(bǔ)齊。
語(yǔ)法格式:
expr << n
n
指定值expr
要移位的位數(shù)。
mysql> select 1 << 2, 15 << 6; +--------+---------+ | 1 << 2 | 15 << 6 | +--------+---------+ | 4 | 960 | +--------+---------+ 1 row in set (0.00 sec) mysql>
1的二進(jìn)制值為1
,左移兩位之后變成了100
,即十進(jìn)制證書(shū)4
;
15的二進(jìn)制位1111
,左移6位之后變成了1111000000
,即十進(jìn)制整數(shù)960。
位右移運(yùn)算符(>>)
位右移運(yùn)算符>>
使指定的二進(jìn)制值的所有位都右移指定的位數(shù)。
右移指定位數(shù)之后,右邊低位的數(shù)值將被移出并丟棄,左邊高位空出的位置用0補(bǔ)齊。
語(yǔ)法格式為:
expr >> n
n
指定值expr
要移位的位數(shù)。
mysql> select 200 >> 2, 10 >> 6; +----------+---------+ | 200 >> 2 | 10 >> 6 | +----------+---------+ | 50 | 0 | +----------+---------+ 1 row in set (0.00 sec) mysql>
100的二進(jìn)制為11001000
,右移兩位之后是110010
,即十進(jìn)制50;
10的二進(jìn)制為1010
,右移6位之后是0
,即二進(jìn)制也是0。
位取反運(yùn)算符(~)
位取反運(yùn)算的實(shí)質(zhì)是將參與運(yùn)算的數(shù)據(jù)按照對(duì)應(yīng)的二進(jìn)制數(shù)逐位反轉(zhuǎn),即1取反后變?yōu)?、0取反后變?yōu)?。
mysql> select 100 & ~1; +----------+ | 100 & ~1 | +----------+ | 100 | +----------+ 1 row in set (0.00 sec) mysql>
在邏輯運(yùn)算100 & ~1
中,由于位取反運(yùn)算符~
的級(jí)別高于位與運(yùn)算符,因此先對(duì)1進(jìn)行取反操作,取反之后,除了最低位為0外,其他位都是1,即1110
,然后與十進(jìn)制數(shù)值100進(jìn)行與運(yùn)算,結(jié)果為1100100
,即整數(shù)100。
運(yùn)算符的優(yōu)先級(jí)
運(yùn)算符的優(yōu)先級(jí)決定了不同的運(yùn)算符在表達(dá)式中計(jì)算的先后順序。我們上面整理了這么多運(yùn)算符,到底哪些運(yùn)算符的優(yōu)先級(jí)最高呢,下面我們就將優(yōu)先級(jí)由低到高排列。
每個(gè)運(yùn)算符的優(yōu)先級(jí)都是不同的,一般情況下,級(jí)別高的運(yùn)算符先進(jìn)行計(jì)算,如果級(jí)別相同,mysql
按表達(dá)式的順序從左到右依次計(jì)算。如果無(wú)法確定優(yōu)先級(jí),我們可以使用圓括號(hào)()來(lái)改變優(yōu)先級(jí)。而且這樣子會(huì)使我們的sql
更加優(yōu)雅,且計(jì)算過(guò)程更加清晰。
到此這篇關(guān)于mysql中的四大運(yùn)算符種類(lèi)匯總(20多項(xiàng)) 的文章就介紹到這了,更多相關(guān)mysql運(yùn)算符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pycharm2017實(shí)現(xiàn)python3.6與mysql的連接
這篇文章主要為大家詳細(xì)介紹了PyCharm連接MySQL數(shù)據(jù)庫(kù)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03輕松掌握MySQL函數(shù)中的last_insert_id()
相信大家應(yīng)該都知道Mysql函數(shù)可以實(shí)現(xiàn)許多我們需要的功能,這篇文章介紹的Mysql函數(shù)Last_insert_id()就是其中之一,文章通過(guò)一個(gè)例子展開(kāi)來(lái)講,應(yīng)該更有助于大家的理解和學(xué)習(xí),有需要的朋友們下面來(lái)一起看看吧。2016-12-12Mysql數(shù)據(jù)庫(kù)面試必備之三大log介紹
大家好,本篇文章主要講的是Mysql數(shù)據(jù)庫(kù)面試必備之三大log介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2021-12-12mysql使用left?join連接出現(xiàn)重復(fù)問(wèn)題的記錄
這篇文章主要介紹了mysql使用left?join連接出現(xiàn)重復(fù)問(wèn)題的記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03一步步教你如何使用mysql?binlog恢復(fù)數(shù)據(jù)
Binlog日志即binary?log,是二進(jìn)制日志文件,有兩個(gè)作用,一個(gè)是增量備份,另一個(gè)是主從復(fù)制,下面這篇文章主要給大家介紹了關(guān)于如何使用mysql?binlog?恢復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-04-04MySQL 啟動(dòng)報(bào)錯(cuò):File ./mysql-bin.index not found (Errcode: 13)
這篇文章主要介紹了MySQL 啟動(dòng)報(bào)錯(cuò):File ./mysql-bin.index not found (Errcode: 13)的解決方法,需要的朋友可以參考下2014-07-07新手必備之MySQL msi版本下載安裝圖文詳細(xì)教程
今天教大家怎么下載安裝MySQL msi版本,文中有非常詳細(xì)的圖文解說(shuō),對(duì)不會(huì)下載安裝mysql的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Mysql通過(guò)ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟
mysql在使用的過(guò)程中,難免遇到數(shù)據(jù)庫(kù)表誤操作,下面這篇文章主要給大家介紹了關(guān)于Mysql通過(guò)ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06