算數(shù)運(yùn)算符
算術(shù)運(yùn)算符分為:加(+)、減(-)、乘(*)、除(/ 或 DIV)、取余(%或MOD)。
SELECT 100 + 1.0
FROM dule; // 101.0
- 在SQL中,加法運(yùn)算符沒有拼接的意思。如果表達(dá)式中有字符串,則會(huì)被隱式轉(zhuǎn)為數(shù)字;如果無法轉(zhuǎn)為數(shù)字,則會(huì)當(dāng)作數(shù)字
0處理; - 如果對(duì)整數(shù)進(jìn)行加減操作,結(jié)果仍是整數(shù)。如果加減運(yùn)算中存在浮點(diǎn)數(shù),則結(jié)果也是相同小數(shù)位數(shù)的浮點(diǎn)數(shù);
- 整數(shù)相乘,仍得整數(shù);整數(shù)和浮點(diǎn)數(shù)相乘,得到相同小數(shù)位數(shù)的浮點(diǎn)數(shù);兩數(shù)相除,無論是否除凈,得到4位小數(shù)的浮點(diǎn)數(shù);
- 如果把
0作為分母,則相除得到NULL;
比較運(yùn)算符
比較運(yùn)算符有 = 、<=>、!=、>、<、>=、<=等。比較的結(jié)果為真則返回1,為假則返回0,其他情況返回NULL。
1. 等號(hào)運(yùn)算符(=)| 不等于運(yùn)算符(!= 或 <>):判斷左右兩邊的值、字符串、表達(dá)式是否相等。
SELECT NULL = NULL
FROM dule; // 0
- 如果左右兩邊都是字符串,則判斷其ANSI碼是否相等;
- 如果左右兩邊都是數(shù)字,則對(duì)比其大??;
- 如果一個(gè)是數(shù)字,一個(gè)是字符串,則把字符串轉(zhuǎn)為數(shù)字進(jìn)行比較,無法直接轉(zhuǎn)為數(shù)字的轉(zhuǎn)為0;
- 如果表達(dá)式中包含
NULL,則結(jié)果為NULL。
2. 安全等于運(yùn)算符(<=>):與等號(hào)運(yùn)算符的唯一區(qū)別是判斷NULL = NULL 為 1。
3. 空運(yùn)算符(IS NULL 或 ISNULL())| 非空運(yùn)算符(IS NOT NULL):判斷一個(gè)值是否為NULL。
SELECT * FROM frontends WHERE 1 IS NULL;
SELECT * FROM frontends WHERE ISNULL(1);
4. 最小|最大值運(yùn)算符(LEAST() | GREASTEST()):返回一組數(shù)中的最小\最大值。
SELECT LEAST(屬性1,屬性2) FROM DULE;
- 語法為
LEAST/GREASTEST(值1,值2,值3,...); - 如果數(shù)據(jù)中包含NULL,則返回NULL;
- 如果數(shù)據(jù)中包含數(shù)字和字符串,如果字符串可以轉(zhuǎn)為數(shù)字,則轉(zhuǎn)后比較。如果不能則報(bào)錯(cuò)。
5. 區(qū)間運(yùn)算符(BETWEEN AND )
SELECT * FROM frontends WHERE 1 BETWEEN 2 AND 10;
- 語法為
BETWEEN A AND B,左邊小,右邊大; - 閉合區(qū)間。
6. 屬于運(yùn)算符 | 不屬于運(yùn)算符(IN() | NOT IN()):判斷給定的值是否在集合中。
SELECT * FROM frontends WHERE 1 IN(1,2,3);
- 語法為
IN/NOT IN(值1,值2,值3,...);
7. 模糊匹配運(yùn)算符(LIKE):主要用于模糊匹配字符串。
# 查找frontends表中名字的第二個(gè)字母為a的數(shù)據(jù);
SELECT * FROM frontends WHERE `name` LIKE '_a%';
- 如果滿足條件則返回
1,不滿足條件返回0,給定值或匹配條件為NULL則返回NULL; - 匹配條件需要用單引號(hào)''包裹,而不能用著重號(hào);
- 使用通配符
%,匹配0~n個(gè)字符; - 使用通配符
_,匹配一個(gè)字符;
轉(zhuǎn)義字符
(1)使用符號(hào) \ 表示其后面緊跟的特殊字符是轉(zhuǎn)義字符;
(2)使用關(guān)鍵字ESCAPE來指定任意字符作為轉(zhuǎn)義符號(hào)`。
8. 正則運(yùn)算符(REGEXP | RLIKE)
SELECT c FROM table WHERE a REGEXP b;
- ‘^’匹配以該字符后面的字符開頭的字符串;
- ‘$’匹配以該字符前面的字符結(jié)尾的字符串;
- ‘.’匹配任何一個(gè)單字符;
- [...] 匹配在方括號(hào)內(nèi)的任何字符。例如,[abc] 匹配“a”或“b”或“c”。使用一 個(gè)‘-’表示范圍?!癧a-z]”匹配任何字母,而“[0-9]”匹配任何數(shù)字;
- 星號(hào)匹配0~n個(gè)它前面的字符。例如,“x*”匹配任何數(shù)量的‘x’字符,“[0-9]*”匹配任何數(shù)量的數(shù)字, 而“*”匹配任何數(shù)量的任何字符。
邏輯運(yùn)算符
邏輯運(yùn)算符主要用來判斷表達(dá)式的真假,在MySQL中,邏輯運(yùn)算符的返回結(jié)果為1、0或者NULL。
1. 與(AND 或 &&):所有值都非0且非NULL時(shí)返回1;有0時(shí)返回0;其他情況(非0 + NULL、都是NULL)返回NULL;
2. 或(OR 或 ||):有1時(shí)返回1;所有值都是0時(shí)返回0;其他情況(0 + NULL、都是NULL)返回NULL;
3. 異或(XOR):有NULL時(shí)返回NULL;非NULL的值都為非0或者都為0時(shí)返回0;非NULL的值有一個(gè)為非0且另一個(gè)為0時(shí)返回1;
4. 非(NOT 或 !):當(dāng)給定的值為0時(shí)返回1;當(dāng)給定的值為非0值時(shí)返回0;為NULL時(shí),返回NULL。
位運(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ù)。
1. 按位與運(yùn)算符(&):將給定的二進(jìn)制數(shù)逐位進(jìn)行邏輯與運(yùn)算。都為1時(shí)該位得1,否則該位為0;
2. 按位或運(yùn)算符(|):將給定的二進(jìn)制數(shù)逐位進(jìn)行邏輯或運(yùn)算。都有1時(shí)該位得1,否則該位為0;
3. 按位異或運(yùn)算符(^):將給定的二進(jìn)制數(shù)逐位進(jìn)行邏輯或運(yùn)算。都兩數(shù)一個(gè)為1一個(gè)為0時(shí)該位得1,否則該位為0;
4. 按位取反運(yùn)算符(~):將給定的二進(jìn)制數(shù)逐位取反。即將1變成0,0變成1;
5. 按位左移運(yùn)算符(<<):將給定的二進(jìn)制數(shù)的所有位向左移指定位數(shù),左邊移除的高位數(shù)丟棄,右邊不足的低位數(shù)用0補(bǔ)齊;
6. 按位右移運(yùn)算符(>>):將給定的二進(jìn)制數(shù)的所有位向右移指定位數(shù),右邊移除的低位數(shù)丟棄,左邊不足的高位數(shù)用0補(bǔ)齊。