與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(五)--運(yùn)算符
安全等于運(yùn)算符(<=>)
這個(gè)操作符和=操作符執(zhí)行相同的比較操作,不過(guò)<=>可以用來(lái)判斷NULL值。
在兩個(gè)操作數(shù)均為NULL時(shí),其返回值為1而不為NULL;
而當(dāng)一個(gè)操作數(shù)為NULL時(shí),其返回值為0而不為NULL。
下面分別是 SELECT NULL <=>1 SELECT 1<=>0 SELECT NULL <=>NULL 的執(zhí)行結(jié)果
在兩個(gè)操作數(shù)均為NULL時(shí),其返回值為1而不為NULL;
LEAST運(yùn)算符
語(yǔ)法格式為:LEAST(值1,值2,...值n),其中值n表示參數(shù)列表中有n個(gè)值。在有兩個(gè)或多個(gè)參數(shù)的情況下,返回最小值。
假如任意一個(gè)自變量為NULL,則LEAST()的返回值為NULL
使用LEAST運(yùn)算符進(jìn)行大小判斷,SQL語(yǔ)句如下:
SELECT LEAST(2,0),LEAST('a','b','c'),LEAST(10,NULL)
由結(jié)果可以看到,當(dāng)參數(shù)中是整數(shù)或者浮點(diǎn)數(shù)時(shí),LEAST將返回其中最小的值;
當(dāng)參數(shù)為字符串時(shí),返回字母中順序最靠前的字符;
當(dāng)比較值列表中有NULL時(shí),不能判斷大小,返回值為NULL
GREATEST運(yùn)算符
語(yǔ)法格式為: GREATEST(值1,值2,...值n),其中n表示參數(shù)列表中有n個(gè)值。
在有兩個(gè)或多個(gè)參數(shù)的情況下,返回最大值。
假如任意一個(gè)自變量為NULL,則GREATEST()的返回值為NULL
使用GREATEST運(yùn)算符進(jìn)行大小判斷,SQL語(yǔ)句如下:
SELECT GREATEST(2,0),GREATEST('a','b','c'),GREATEST(10,NULL)
由結(jié)果可以看到,當(dāng)參數(shù)中是整數(shù)或者浮點(diǎn)數(shù)時(shí),GREATEST將返回其中最大的值;
當(dāng)參數(shù)為字符串時(shí),返回字母中順序最靠后的字符;
當(dāng)比較值列表中有NULL時(shí),不能判斷大小,返回值為NULL
REGEXP 運(yùn)算符
在SQLSERVER里是沒(méi)有正則函數(shù)或者運(yùn)算符的,MYSQL在這方面的確比較完善
用來(lái)匹配字符串,語(yǔ)法格式為:expr REGEXP 匹配條件,如果expr滿(mǎn)足匹配條件,返回1;
如果不滿(mǎn)足,則返回0;
若expr或匹配條件任意一個(gè)為NULL,則結(jié)果為NULL
常用的幾種通配符:
(1)'^'匹配以該字符后面的字符開(kāi)頭的字符串
(2)'$'匹配以該字符后面的字符結(jié)尾的字符串
(3)'.'匹配任何一個(gè)單字符
(4)'[...]'匹配在方括號(hào)內(nèi)的任何字符。例如,“[abc]" 匹配a、b或c。
字符的范圍可以使用一個(gè)'-',“[a-z]”匹配任何字母,而“[0-9]”匹配任何數(shù)字
(5)'*' 匹配零個(gè)或多個(gè)在他前面的字符。例如,“x*”匹配任何數(shù)量的'*'字符,“[0-9]*”匹配任何數(shù)量的數(shù)字,
而“.*”匹配任何數(shù)量的任何字符。
使用REGEXP 運(yùn)算符進(jìn)行字符串匹配運(yùn)算,SQL語(yǔ)句如下:
SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y$' ,'ssky' REGEXP '.sky','ssky' REGEXP '[ab]';
由結(jié)果可以看到,指定匹配字符串為ssky。
'^s'表示匹配任何以字母s開(kāi)頭的字符串,因此滿(mǎn)足匹配條件,返回1;
'y$'表示匹配任何以字母y結(jié)尾的字符串,因此滿(mǎn)足匹配條件,返回1;
'.sky'表示匹配任何以sky結(jié)尾,字符長(zhǎng)度為4的字符串,因此滿(mǎn)足匹配條件,返回1;
'^s'表示匹配任何以字母s開(kāi)頭的字符串,因此滿(mǎn)足匹配條件,返回1;
'[ab]'表示匹配任何包含字母a或者b的字符串,指定字符串中沒(méi)有字母a也沒(méi)有字母b,因此不滿(mǎn)足匹配條件,返回0;
TIPS:正則表達(dá)式是一個(gè)可以進(jìn)行復(fù)雜查詢(xún)的強(qiáng)大工具,相對(duì)于LIKE字符串匹配,他可以使用更多的通配符類(lèi)型
查詢(xún)結(jié)果更加靈活。
邏輯運(yùn)算符
邏輯與運(yùn)算符:AND或者&&
邏輯或運(yùn)算符:OR或者||
上面兩個(gè)運(yùn)算符就不說(shuō)了,只是比SQLSERVER多了&&和||的寫(xiě)法
異或運(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
使用異或運(yùn)算符XOR進(jìn)行邏輯判斷,SQL語(yǔ)句如下
SELECT 1 XOR 1, 0 XOR 0,1 XOR 0,1 XOR NULL,1 XOR 1 XOR 1
由結(jié)果可以看到‘1 XOR 1'和‘0 XOR 0'中運(yùn)算符兩邊的操作數(shù)都為非零值,或者都是零值,因此返回0;
'1 XOR 0'中兩邊的操作數(shù),一個(gè)為0值,另一個(gè)為非0值,返回結(jié)果為1;
'1 XOR NULL'中有一個(gè)操作數(shù)為NULL,返回結(jié)果為NULL;
'1 XOR 1 XOR 1'中有多個(gè)操作數(shù),運(yùn)算符相同,因此運(yùn)算符從左到右依次計(jì)算,'1 XOR 1'的結(jié)果為0,再與1進(jìn)行異或運(yùn)算,因此結(jié)果為1。
TIPS: a XOR b的計(jì)算等同于(a AND (NOT b))或者(NOT a AND ( b))
位運(yùn)算符
由于比較少用到,這里只做簡(jiǎn)單介紹,同樣位運(yùn)算符在SQLSERVER里是沒(méi)有的
位運(yùn)算符是用來(lái)對(duì)二進(jìn)制字節(jié)中的位進(jìn)行測(cè)試、移位或者測(cè)試處理
MYSQL中提供的位運(yùn)算有
按位或(|)
按位與(&)
按位異或(^)
按位左移(<<)
按位右移(>>)
按位取反(~):反轉(zhuǎn)所有比特
TIPS:可以使用BIN()=binary函數(shù)查看一個(gè)十進(jìn)制數(shù)的二進(jìn)制表示
例如20這個(gè)數(shù)字 SELECT BIN(20)
二進(jìn)制表示為:10100
特別提示
某一些MYSQL中的特殊字符需要用轉(zhuǎn)義字符才能插入數(shù)據(jù)庫(kù),否則產(chǎn)生意料之外的結(jié)果。
下面的特殊字符需要在輸入時(shí)加反斜線(xiàn)符號(hào)開(kāi)頭
輸入單引號(hào)需要:\'
輸入雙引號(hào)需要:\''
輸入反斜杠:\\
輸入回車(chē)符:\r
輸入換行符:\n
輸入制表符:\tab
輸入退格符:\b
在插入這些特殊字符到數(shù)據(jù)庫(kù)之前一定要進(jìn)行轉(zhuǎn)義處理
在SQLSERVER里,這些特殊字符不是在前面加反斜杠\,而是加單引號(hào)'
例如插入一個(gè)單引號(hào),加了反斜杠,插入成功
INSERT INTO table_1(NAME) VALUES('\'')
SELECT * FROM table_1
總結(jié)
這一節(jié)簡(jiǎn)單介紹了MYSQL里的一些運(yùn)算符和特殊字符,并且比較了與SQLSERVER的區(qū)別
相關(guān)文章
MYSQL數(shù)據(jù)庫(kù)查詢(xún)按日期分組統(tǒng)計(jì)詳細(xì)代碼
這篇文章主要給大家介紹了關(guān)于MYSQL數(shù)據(jù)庫(kù)查詢(xún)按日期分組統(tǒng)計(jì)的相關(guān)資料,按日期分組是指按照時(shí)間維度對(duì)數(shù)據(jù)進(jìn)行分類(lèi)匯總統(tǒng)計(jì),常用于查詢(xún)分析具有時(shí)間屬性的數(shù)據(jù),例如訂單量、用戶(hù)活躍等,需要的朋友可以參考下2024-01-01MySQL 啟動(dòng)成功但未監(jiān)聽(tīng)端口的解決方法
這篇文章主要給大家介紹了關(guān)于MySQL 啟動(dòng)成功但未監(jiān)聽(tīng)端口的解決方法,文中通過(guò)圖文給大家介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用示例小結(jié)
在MySQL中,DATEDIFF()函數(shù)和TIMESTAMPDIFF()函數(shù)用于計(jì)算日期和時(shí)間之間的差異,TIMESTAMPDIFF()函數(shù)返回的結(jié)果是整數(shù),但你可以通過(guò)在計(jì)算過(guò)程中使用適當(dāng)?shù)某▉?lái)獲得所需的小數(shù)部分,本文介紹MySQL中的datediff()方法和timestampdiff()方法的應(yīng)用,感興趣的朋友一起看看吧2023-12-12MySQL系列之redo log、undo log和binlog詳解
這篇文章主要介紹了MySQL系列之redo log、undo log和binlog詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12解決數(shù)據(jù)庫(kù)有數(shù)據(jù)但查詢(xún)出來(lái)的值為Null問(wèn)題
這篇文章主要介紹了解決數(shù)據(jù)庫(kù)有數(shù)據(jù)但查詢(xún)出來(lái)的值為Null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10