MySQL运算符,SQL,算术比较逻辑位,优先级,正则表达式,完整详细可收藏
文章目錄
- 1、算術運算符
- 2、比較運算符
- 3、邏輯運算符
- 4、位運算符
- 5、運算符的優(yōu)先級
- 拓展:使用正則表達式查詢
1、算術運算符
算術運算符主要用于數學運算,其可以連接運算符前后的兩個數值或表達式,對數值或表達式進行加(+)、減(-)、乘(*)、除(/)和取模(%)運算。
1.1 加法與減法運算符
mysql> SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5 FROM dual; +-----+---------+---------+----------+--------------+------------+------------+ | 100 | 100 + 0 | 100 - 0 | 100 + 50 | 100 + 50 -30 | 100 + 35.5 | 100 - 35.5 | +-----+---------+---------+----------+--------------+------------+------------+ | 100 | 100 | 100 | 150 | 120 | 135.5 | 64.5 | +-----+---------+---------+----------+--------------+------------+------------+ 1 row in set (0.00 sec)由運算結果可以得出如下結論:
①一個整數類型的值對整數進行加法和減法操作,結果還是一個整數;
②一個整數類型的值對浮點數進行加法和減法操作,結果是一個浮點數;
③加法和減法的優(yōu)先級相同;
④在Java中,+的左右兩邊如果有字符串,那么表示字符串的拼接。但是在MySQL中+只表示數值相加。如果遇到非數值類型,先嘗試轉成數值,如果轉失敗,就按0計算。(補充:MySQL中字符串拼接要使用字符串函數CONCAT()實現)
1.2 乘法與除法運算符
mysql> SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2,100 + 2 * 5 / 2,100 /3, 100 DIV 0 FROM dual; +-----+---------+-----------+-----------+---------+-----------------+---------+------- ----+ | 100 | 100 * 1 | 100 * 1.0 | 100 / 1.0 | 100 / 2 | 100 + 2 * 5 / 2 | 100 /3 | 100 DIV 0 | +-----+---------+-----------+-----------+---------+-----------------+---------+------- ----+ | 100 | 100 | 100.0 | 100.0000 | 50.0000 | 105.0000 | 33.3333 | NULL | +-----+---------+-----------+-----------+---------+-----------------+---------+------- ----+ 1 row in set (0.00 sec) #計算出員工的年基本工資 SELECT employee_id,salary,salary * 12 annual_sal FROM employees;由運算結果可以得出如下結論:
①一個數乘以整數1和除以整數1后仍得原數;
②一個數乘以浮點數1和除以浮點數1后變成浮點數,數值與原數相等;
③一個數除以整數后,不管是否能除盡,結果都為一個浮點數;
④一個數除以另一個數,除不盡時,結果為一個浮點數,并保留到小數點后4位;
⑤乘法和除法的優(yōu)先級相同;
⑥在數學運算中,0不能用作除數,在MySQL中,一個數除以0為NULL。
1.3 求模(求余)運算符
mysql> SELECT 12 % 3, 12 MOD 5 FROM dual; +--------+----------+ | 12 % 3 | 12 MOD 5 | +--------+----------+ | 0 | 2 | +--------+----------+ 1 row in set (0.00 sec) #篩選出employee_id是偶數的員工 SELECT * FROM employees WHERE employee_id MOD 2 = 0;2、比較運算符
比較運算符用來對表達式左邊的操作數和右邊的操作數進行比較,比較的結果為真則返回1,比較的結果為假則返回0,其他情況則返回NULL。
比較運算符經常被用來作為SELECT查詢語句的條件來使用,返回符合條件的結果記錄。
2.1 等號運算符
等號運算符(=)判斷等號兩邊的值、字符串或表達式是否相等,如果相等則返回1,不相等則返回0。
在使用等號運算符時,遵循如下規(guī)則:
①如果等號兩邊的值、字符串或表達式都為字符串,則MySQL會按照字符串進行比較,其比較的是每個字符串中字符的ANSI編碼是否相等。
②如果等號兩邊的值都是整數,則MySQL會按照整數來比較兩個值的大小。
③如果等號兩邊的值一個是整數,另一個是字符串,則MySQL會將字符串轉化為數字進行比較。
④如果等號兩邊的值、字符串或表達式中有一個為NULL,則比較結果為NULL。
2.2 安全等于運算符 安全等于運算符(<=>)與等于運算符(=)的作用是相似的, 唯一的區(qū)別 是 <=> 可以用來對NULL進行判斷。在兩個操作數均為NULL時,其返回值為1,而不為NULL;當一個操作數為NULL時,其返回值為0,而不為NULL。
mysql> SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (5 + 3) <=> (2 + 6), '' <=> NULL,NULL <=> NULL FROM dual; +-----------+---------+-------------+---------------------+-------------+------------- --+ | 1 <=> '1' | 1 <=> 0 | 'a' <=> 'a' | (5 + 3) <=> (2 + 6) | '' <=> NULL | NULL <=> NULL | +-----------+---------+-------------+---------------------+-------------+------------- --+ | 1 | 0 | 1 | 1 | 0 | 1 | +-----------+---------+-------------+---------------------+-------------+------------- --+ 1 row in set (0.00 sec) #查詢commission_pct等于0.40 SELECT employee_id,commission_pct FROM employees WHERE commission_pct = 0.40; SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> 0.40;可以看到,使用安全等于運算符時,兩邊的操作數的值都為NULL時,返回的結果為1而不是NULL,其他
返回結果與等于運算符相同。
2.3 不等于運算符 不等于運算符(<>和!=)用于判斷兩邊的數字、字符串或者表達式的值是否不相等,如果不相等則返回1,相等則返回0。不等于運算符不能判斷NULL值。如果兩邊的值有任意一個為NULL,或兩邊都為NULL,則結果為NULL。 SQL語句示例如下:
mysql> SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULL; +--------+--------+------------+----------------+-------------+--------------+ | 1 <> 1 | 1 != 2 | 'a' != 'b' | (3+4) <> (2+6) | 'a' != NULL | NULL <> NULL | +--------+--------+------------+----------------+-------------+--------------+ | 0 | 1 | 1 | 1 | NULL | NULL | +--------+--------+------------+----------------+-------------+--------------+ 1 row in set (0.00 sec)此外,還有非符號類型的運算符:
2.4 空運算符 空運算符(IS NULL或者ISNULL)判斷一個值是否為NULL,如果為NULL則返回1,否則返回0。 SQL語句示例如下:
2.5 非空運算符 非空運算符(IS NOT NULL)判斷一個值是否不為NULL,如果不為NULL則返回1,否則返回0。 SQL語句示例如下:
mysql> SELECT NULL IS NOT NULL, 'a' IS NOT NULL, 1 IS NOT NULL; +------------------+-----------------+---------------+ | NULL IS NOT NULL | 'a' IS NOT NULL | 1 IS NOT NULL | +------------------+-----------------+---------------+ | 0 | 1 | 1 | +------------------+-----------------+---------------+ 1 row in set (0.01 sec) #查詢commission_pct不等于NULL SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NOT NULL; SELECT employee_id,commission_pct FROM employees WHERE NOT commission_pct <=> NULL; SELECT employee_id,commission_pct FROM employees WHERE NOT ISNULL(commission_pct);2.6 最小值運算符 語法格式為:LEAST(值1,值2,…,值n)。其中,“值n”表示參數列表中有n個值。在有兩個或多個參數的情況下,返回最小值。
mysql> SELECT LEAST (1,0,2), LEAST('b','a','c'), LEAST(1,NULL,2); +---------------+--------------------+-----------------+ | LEAST (1,0,2) | LEAST('b','a','c') | LEAST(1,NULL,2) | +---------------+--------------------+-----------------+ | 0 | a | NULL | +---------------+--------------------+-----------------+ 1 row in set (0.00 sec)由結果可以看到,當參數是整數或者浮點數時,LEAST將返回其中最小的值;當參數為字符串時,返回字母表中順序最靠前的字符;當比較值列表中有NULL時,不能判斷大小,返回值為NULL。
2.7 最大值運算符 語法格式為:GREATEST(值1,值2,…,值n)。其中,n表示參數列表中有n個值。當有兩個或多個參數時,返回值為最大值。假如任意一個自變量為NULL,則GREATEST()的返回值為NULL。
mysql> SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2); +-----------------+-----------------------+--------------------+ | GREATEST(1,0,2) | GREATEST('b','a','c') | GREATEST(1,NULL,2) | +-----------------+-----------------------+--------------------+ | 2 | c | NULL | +-----------------+-----------------------+--------------------+ 1 row in set (0.00 sec)由結果可以看到,當參數中是整數或者浮點數時,GREATEST將返回其中最大的值;當參數為字符串時,返回字母表中順序最靠后的字符;當比較值列表中有NULL時,不能判斷大小,返回值為NULL。
2.8 BETWEEN AND運算符 BETWEEN運算符使用的格式通常為SELECT D FROM TABLE WHERE C BETWEEN A AND B,此時,當C大于或等于A,并且C小于或等于B時,結果為1,否則結果為0。
mysql> SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c'; +-------------------+----------------------+-------------------------+ | 1 BETWEEN 0 AND 1 | 10 BETWEEN 11 AND 12 | 'b' BETWEEN 'a' AND 'c' | +-------------------+----------------------+-------------------------+ | 1 | 0 | 1 | +-------------------+----------------------+-------------------------+ 1 row in set (0.00 sec) SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500;2.9 IN運算符 IN運算符用于判斷給定的值是否是IN列表中的一個值,如果是則返回1,否則返回0。如果給定的值為NULL,或者IN列表中存在NULL,則結果為NULL。
mysql> SELECT 'a' IN ('a','b','c'), 1 IN (2,3), NULL IN ('a','b'), 'a' IN ('a', NULL); +----------------------+------------+-------------------+--------------------+ | 'a' IN ('a','b','c') | 1 IN (2,3) | NULL IN ('a','b') | 'a' IN ('a', NULL) | +----------------------+------------+-------------------+--------------------+ | 1 | 0 | NULL | 1 | +----------------------+------------+-------------------+--------------------+ 1 row in set (0.00 sec) SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);2.10 NOT IN運算符 NOT IN運算符用于判斷給定的值是否不是IN列表中的一個值,如果不是IN列表中的一個值,則返回1,否則返回0。
mysql> SELECT 'a' NOT IN ('a','b','c'), 1 NOT IN (2,3); +--------------------------+----------------+ | 'a' NOT IN ('a','b','c') | 1 NOT IN (2,3) | +--------------------------+----------------+ | 0 | 1 | +--------------------------+----------------+ 1 row in set (0.00 sec)2.11 LIKE運算符 LIKE運算符主要用來匹配字符串,通常用于模糊匹配,如果滿足條件則返回1,否則返回0。如果給定的值或者匹配條件為NULL,則返回結果為NULL。
LIKE運算符通常使用如下通配符:
如果使用\表示轉義,要省略ESCAPE。如果不是\,則要加上ESCAPE:
SELECT job_id FROM jobs WHERE job_id LIKE 'IT$_%' escape '$';2.12 REGEXP運算符
REGEXP運算符用來匹配字符串,語法格式為: expr REGEXP 匹配條件 。如果expr滿足匹配條件,返回1;如果不滿足,則返回0。若expr或匹配條件任意一個為NULL,則結果為NULL。
REGEXP運算符在進行匹配時,常用的有下面幾種通配符:
3、邏輯運算符
邏輯運算符主要用來判斷表達式的真假,在MySQL中,邏輯運算符的返回結果為1、0或者NULL。MySQL中支持4種邏輯運算符如下:
3.1 邏輯非運算符 邏輯非(NOT或!)運算符表示當給定的值為0時返回1;當給定的值為非0值時返回0;當給定的值為NULL時,返回NULL。
3.2 邏輯與運算符 邏輯與(AND或&&)運算符是當給定的所有值均為非0值,并且都不為NULL時,返回1;當給定的一個值或者多個值為0時則返回0;否則返回NULL。
mysql> SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL; +----------+---------+------------+------------+ | 1 AND -1 | 0 AND 1 | 0 AND NULL | 1 AND NULL | +----------+---------+------------+------------+ | 1 | 0 | 0 | NULL | +----------+---------+------------+------------+ 1 row in set (0.00 sec) SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000 AND job_id LIKE '%MAN%';3.3 邏輯或運算符 邏輯或(OR或||)運算符是當給定的值都不為NULL,并且任何一個值為非0值時,則返回1,否則返回0;當一個值為NULL,并且另一個值為非0值時,返回1,否則返回NULL;當兩個值都為NULL時,返回NULL。
mysql> SELECT 1 OR -1, 1 OR 0, 1 OR NULL, 0 || NULL, NULL || NULL; +---------+--------+-----------+-----------+--------------+ | 1 OR -1 | 1 OR 0 | 1 OR NULL | 0 || NULL | NULL || NULL | +---------+--------+-----------+-----------+--------------+ | 1 | 1 | 1 | NULL | NULL | +---------+--------+-----------+-----------+--------------+ 1 row in set, 2 warnings (0.00 sec) #查詢基本薪資不在9000-12000之間的員工編號和基本薪資 SELECT employee_id,salary FROM employees WHERE NOT (salary >= 9000 AND salary <= 12000);SELECT employee_id,salary FROM employees WHERE salary <9000 OR salary > 12000;SELECT employee_id,salary FROM employees WHERE salary NOT BETWEEN 9000 AND 12000;OR可以和AND一起使用,但是在使用時要注意兩者的優(yōu)先級,由于AND的優(yōu)先級高于OR,因此先對AND兩邊的操作數進行操作,再與OR中的操作數結合。
3.4 邏輯異或運算符 邏輯異或(XOR)運算符是當給定的值中任意一個值為NULL時,則返回NULL;如果兩個非NULL的值都是0或者都不等于0時,則返回0;如果一個值為0,另一個值不為0時,則返回1。
mysql> SELECT 1 XOR -1, 1 XOR 0, 0 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1, 0 XOR 0 XOR 0; +----------+---------+---------+------------+---------------+---------------+ | 1 XOR -1 | 1 XOR 0 | 0 XOR 0 | 1 XOR NULL | 1 XOR 1 XOR 1 | 0 XOR 0 XOR 0 | +----------+---------+---------+------------+---------------+---------------+ | 0 | 1 | 0 | NULL | 1 | 0 | +----------+---------+---------+------------+---------------+---------------+ 1 row in set (0.00 sec) select last_name,department_id,salary from employees where department_id in (10,20) XOR salary > 8000;4、位運算符
位運算符是在二進制數上進行計算的運算符。位運算符會先將操作數變成二進制數,然后進行位運算,最后將計算結果從二進制變回十進制數。MySQL支持的位運算符如下:
4.1 按位與運算符 按位與(&)運算符將給定值對應的二進制數逐位進行邏輯與運算。當給定值對應的二進制位的數值都為1時,則該位返回1,否則返回0。
1的二進制數為0001,10的二進制數為1010,所以1 & 10的結果為0000,對應的十進制數為0。20的二進制數為10100,30的二進制數為11110,所以20 & 30的結果為10100,對應的十進制數為20。
4.2 按位或運算符 按位或(|)運算符將給定的值對應的二進制數逐位進行邏輯或運算。當給定值對應的二進制位的數值有一個或兩個為1時,則該位返回1,否則返回0。
mysql> SELECT 1 | 10, 20 | 30; +--------+---------+ | 1 | 10 | 20 | 30 | +--------+---------+ | 11 | 30 | +--------+---------+ 1 row in set (0.00 sec)1的二進制數為0001,10的二進制數為1010,所以1 | 10的結果為1011,對應的十進制數為11。20的二進制數為10100,30的二進制數為11110,所以20 | 30的結果為11110,對應的十進制數為30。
4.3 按位異或運算符 按位異或(^)運算符將給定的值對應的二進制數逐位進行邏輯異或運算。當給定值對應的二進制位的數值不同時,則該位返回1,否則返回0。
mysql> SELECT 1 ^ 10, 20 ^ 30; +--------+---------+ | 1 ^ 10 | 20 ^ 30 | +--------+---------+ | 11 | 10 | +--------+---------+ 1 row in set (0.00 sec)1的二進制數為0001,10的二進制數為1010,所以1 ^ 10的結果為1011,對應的十進制數為11。20的二進制數為10100,30的二進制數為11110,所以20 ^ 30的結果為01010,對應的十進制數為10。
再舉例:
mysql> SELECT 12 & 5, 12 | 5,12 ^ 5 FROM DUAL; +--------+--------+--------+ | 12 & 5 | 12 | 5 | 12 ^ 5 | +--------+--------+--------+ | 4 | 13 | 9 | +--------+--------+--------+ 1 row in set (0.00 sec)
4.4 按位取反運算符 按位取反(~)運算符將給定的值的二進制數逐位進行取反操作,即將1變?yōu)?,將0變?yōu)?。
由于按位取反(~)運算符的優(yōu)先級高于按位與(&)運算符的優(yōu)先級,所以10 & ~1,首先,對數字1進行按位取反操作,結果除了最低位為0,其他位都為1,然后與10進行按位與操作,結果為10。
4.5 按位右移運算符 按位右移(>>)運算符將給定的值的二進制數的所有位右移指定的位數。右移指定的位數后,右邊低位的數值被移出并丟棄,左邊高位空出的位置用0補齊。
mysql> SELECT 1 >> 2, 4 >> 2; +--------+--------+ | 1 >> 2 | 4 >> 2 | +--------+--------+ | 0 | 1 | +--------+--------+ 1 row in set (0.00 sec)1的二進制數為0000 0001,右移2位為0000 0000,對應的十進制數為0。4的二進制數為0000 0100,右移2位為0000 0001,對應的十進制數為1。
4.6 按位左移運算符 按位左移(<<)運算符將給定的值的二進制數的所有位左移指定的位數。左移指定的位數后,左邊高位的數值被移出并丟棄,右邊低位空出的位置用0補齊。每移一位就乘以2。
mysql> SELECT 1 << 2, 4 << 2; +--------+--------+ | 1 << 2 | 4 << 2 | +--------+--------+ | 4 | 16 | +--------+--------+ 1 row in set (0.00 sec)1的二進制數為0000 0001,左移兩位為0000 0100,對應的十進制數為4。4的二進制數為0000 0100,左移兩位為0001 0000,對應的十進制數為16。
5、運算符的優(yōu)先級
數字編號越大,優(yōu)先級越高,優(yōu)先級高的運算符先進行計算。可以看到,賦值運算符的優(yōu)先級最低,使用“()”括起來的表達式的優(yōu)先級最高。
拓展:使用正則表達式查詢
正則表達式通常被用來檢索或替換那些符合某個模式的文本內容,根據指定的匹配模式匹配文本中符合要求的特殊字符串。例如,從一個文本文件中提取電話號碼,查找一篇文章中重復的單詞或者替換用戶輸入的某些敏感詞語等,這些地方都可以使用正則表達式。正則表達式強大而且靈活,可以應用于非常復雜的查詢。MySQL中使用REGEXP關鍵字指定正則表達式的字符匹配模式。下表列出了REGEXP操作符中常用字符匹配列表。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MySQL运算符,SQL,算术比较逻辑位,优先级,正则表达式,完整详细可收藏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查询 Apple ID 帐户恢复进度
- 下一篇: MySQL排序ORDER BY与分页LI