目錄層級(jí)
MySQL數(shù)據(jù)庫(kù),從入門到精通:第一篇——MySQL概念詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第二篇——MySQL關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)的比較
MySQL數(shù)據(jù)庫(kù),從入門到精通:第三篇——MySQL 數(shù)據(jù)庫(kù)規(guī)范和基礎(chǔ)查詢語句
MySQL數(shù)據(jù)庫(kù),從入門到精通:第四篇——MySQL中常用的運(yùn)算符及其用法
MySQL數(shù)據(jù)庫(kù),從入門到精通:第五篇——MySQL排序和分頁
MySQL數(shù)據(jù)庫(kù),從入門到精通:第六篇——全面掌握MySQL多表查詢技巧
MySQL數(shù)據(jù)庫(kù),從入門到精通:第七篇——MySQL單行函數(shù)應(yīng)用
MySQL數(shù)據(jù)庫(kù),從入門到精通:第八篇——MySQL聚合函數(shù)實(shí)戰(zhàn)探究:優(yōu)化SELECT過程助力高效查詢
MySQL數(shù)據(jù)庫(kù),從入門到精通:第九篇——MySQL子查詢
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十篇——MySQL表創(chuàng)建和管理指南
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十一篇——MySQL數(shù)據(jù)處理之增刪改指南
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十二篇——MySQL數(shù)據(jù)類型詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十三篇——MySQL數(shù)據(jù)表約束詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十四篇——MySQL視圖詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十五篇——MySQL存儲(chǔ)過程和函數(shù)詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十六篇——MySQL變量、流程控制和游標(biāo)詳解
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十七篇——MySQL 觸發(fā)器的使用方法及注意事項(xiàng)
MySQL數(shù)據(jù)庫(kù),從入門到精通:第十八篇——MySQL 8新特性全解析
THIS IS END!
前言
MySQL是一種流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在各行各業(yè)廣泛應(yīng)用。在MySQL中,運(yùn)算符是用于對(duì)數(shù)據(jù)進(jìn)行各種操作和計(jì)算的基礎(chǔ)工具。本文將對(duì)MySQL中常用的各類運(yùn)算符進(jìn)行詳細(xì)介紹,幫助讀者更好地理解和應(yīng)用運(yùn)算符,提高數(shù)據(jù)庫(kù)的使用效率和精度。
摘要
本文主要分為三個(gè)方面,第一部分介紹MySQL中的算術(shù)運(yùn)算符,包括加、減、乘、除、求模等運(yùn)算符的用法和注意事項(xiàng)。
第二部分介紹MySQL中常用的比較運(yùn)算符,如等于、不等于、大于、小于等,以及空運(yùn)算符、非空運(yùn)算符、最小值運(yùn)算符、最大值運(yùn)算符、BETWEEN AND運(yùn)算符、IN運(yùn)算符、NOT IN運(yùn)算符、LIKE運(yùn)算符、REGEXP運(yùn)算符等的用法和示例。
第三部分介紹MySQL中常用的邏輯運(yùn)算符和位運(yùn)算符的用法,包括邏輯或運(yùn)算符、按位取反運(yùn)算符、按位右移運(yùn)算符、按位左移運(yùn)算符等。
同時(shí),本文還介紹了使用正則表達(dá)式查詢的方法,并提供了一些常見的正則表達(dá)式查詢示例,如查詢以特定字符或字符串開頭的記錄、查詢以特定字符或字符串結(jié)尾的記錄、用符號(hào)".“來替代字符串中的任意一個(gè)字符、使用”*“和”+"來匹配多個(gè)字符、匹配指定字符串、匹配指定字符中的任意一個(gè)、匹配指定字符以外的字符、使用{n,}或者{n,m}來指定字符串連續(xù)出現(xiàn)的次數(shù)等
第四篇_MySQL中常用的運(yùn)算符及其用法運(yùn)算符
1. 算術(shù)運(yùn)算符
算術(shù)運(yùn)算符主要用于數(shù)學(xué)運(yùn)算,其可以連接運(yùn)算符前后的兩個(gè)數(shù)值或表達(dá)式,對(duì)數(shù)值或表達(dá)式進(jìn)行加(+)、減(-)、乘(*)、除(/)和取模(%)運(yùn)算。
1.加法與減法運(yùn)算符
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ùn)算結(jié)果可以得出如下結(jié)論:
- 一個(gè)整數(shù)類型的值對(duì)整數(shù)進(jìn)行加法和減法操作,結(jié)果還是一個(gè)整數(shù);
- 一個(gè)整數(shù)類型的值對(duì)浮點(diǎn)數(shù)進(jìn)行加法和減法操作,結(jié)果是一個(gè)浮點(diǎn)數(shù);
- 加法和減法的優(yōu)先級(jí)相同,進(jìn)行先加后減操作與進(jìn)行先減后加操作的結(jié)果是一樣的;
- 在Java中,+的左右兩邊如果有字符串,那么表示字符串的拼接。但是在MySQL中+只表示數(shù)值相加。如果遇到非數(shù)值類型,先嘗試轉(zhuǎn)成數(shù)值,如果轉(zhuǎn)失敗,就按0計(jì)算。(補(bǔ)充:MySQL中字符串拼接要使用字符串函數(shù)CONCAT()實(shí)現(xiàn))
#運(yùn)算符 dual 創(chuàng)建一個(gè)虛擬的表
SELECT 100,100+0,100+20,100+20*30,100+22.2 FROM DUAL;
#表示加法運(yùn)算 并不像java得到字符串拼接 注意下
SELECT 100+'1' FROM DUAL;
#默認(rèn)把字符當(dāng)做0 來進(jìn)行處理的
SELECT 100+'a' from DUAL;
#null 參與運(yùn)算結(jié)果都為null
SELECT 100+NULL FROM DUAL;
2.乘法與除法運(yùn)算符
+-----+---------+-----------+-----------+---------+-----------------+---------+-------
----+
| 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)
#div=/ 分母為0 值為0
SELECT 100 , 100 * 1 , 100 * 1.0 ,100 / 1.0 , 100 / 2 , 100 + 2 * 5 / 2 , 100 /3 ,
100 DIV 0 FROM DUAL;
#計(jì)算出員工的年基本工資
SELECT employee_id,salary,salary * 12 annual_sal
FROM employees;
由運(yùn)算結(jié)果可以得出如下結(jié)論:
一個(gè)數(shù)乘以整數(shù)1和除以整數(shù)1后仍得原數(shù);
一個(gè)數(shù)乘以浮點(diǎn)數(shù)1和除以浮點(diǎn)數(shù)1后變成浮點(diǎn)數(shù),數(shù)值與原數(shù)相等;
一個(gè)數(shù)除以整數(shù)后,不管是否能除盡,結(jié)果都為一個(gè)浮點(diǎn)數(shù);
一個(gè)數(shù)除以另一個(gè)數(shù),除不盡時(shí),結(jié)果為一個(gè)浮點(diǎn)數(shù),并保留到小數(shù)點(diǎn)后4位;
乘法和除法的優(yōu)先級(jí)相同,進(jìn)行先乘后除操作與先除后乘操作,得出的結(jié)果相同。
在數(shù)學(xué)運(yùn)算中,0不能用作除數(shù),在MySQL中,一個(gè)數(shù)除以0為NULL。
3.求模(求余)運(yùn)算符
將t22表中的字段i對(duì)3和5進(jìn)行求模(求余)運(yùn)算。
mysql> SELECT 12 % 3, 12 MOD 5 FROM dual;
+--------+----------+
| 12 % 3 | 12 MOD 5 |
+--------+----------+
| 0 | 2 |
+--------+----------+
1 row in set (0.00 sec)
#取模 運(yùn)算: % mod 除數(shù)前面的數(shù)為負(fù)數(shù)那么他得到值就是負(fù)數(shù)
SELECT 12 % 3,12 % 5, 12 MOD -5,-12 % 5,-12%-5 FROM DUAL;
#查詢employees 表中employee_id 為偶數(shù)的值
SELECT employee_id,last_name,salary FROM employees
WHERE employee_id % 2 = 0;
#篩選出employee_id是偶數(shù)的員工
SELECT * FROM employees
WHERE employee_id MOD 2 = 0;
可以看到,100對(duì)3求模后的結(jié)果為3,對(duì)5求模后的結(jié)果為0。
2. 比較運(yùn)算符
比較運(yùn)算符用來對(duì)表達(dá)式左邊的操作數(shù)和右邊的操作數(shù)進(jìn)行比較,比較的結(jié)果為真則返回1,比較的結(jié)果為假則返回0,其他情況則返回NULL。
比較運(yùn)算符經(jīng)常被用來作為SELECT查詢語句的條件來使用,返回符合條件的結(jié)果記錄。
#比較運(yùn)算符 0為false 1為ftrue 字符串存在隱式轉(zhuǎn)換如果轉(zhuǎn)換不成功則為0
SELECT 1=2, 1 !=2,2='a',0='a' FROM DUAL;
1.等號(hào)運(yùn)算符
等號(hào)運(yùn)算符(=)判斷等號(hào)兩邊的值、字符串或表達(dá)式是否相等,如果相等則返回1,不相等則返回0。
在使用等號(hào)運(yùn)算符時(shí),遵循如下規(guī)則:
1.如果等號(hào)兩邊的值、字符串或表達(dá)式都為字符串,則MySQL會(huì)按照字符串進(jìn)行比較,其比較的是每個(gè)字符串中字符的ANSI編碼是否相等。
2.如果等號(hào)兩邊的值都是整數(shù),則MySQL會(huì)按照整數(shù)來比較兩個(gè)值的大小。
3.如果等號(hào)兩邊的值一個(gè)是整數(shù),另一個(gè)是字符串,則MySQL會(huì)將字符串轉(zhuǎn)化為數(shù)字進(jìn)行比較。
4.如果等號(hào)兩邊的值、字符串或表達(dá)式中有一個(gè)為NULL,則比較結(jié)果為NULL。對(duì)比:SQL中賦值符號(hào)使用 :=時(shí),其返回值為0,而不為NULL。
mysql> SELECT 1 = 1, 1 = '1', 1 = 0, 'a' = 'a', (5 + 3) = (2 + 6), '' = NULL , NULL =
NULL;
+-------+---------+-------+-----------+-------------------+-----------+-------------+
| 1 = 1 | 1 = '1' | 1 = 0 | 'a' = 'a' | (5 + 3) = (2 + 6) | '' = NULL | NULL = NULL |
+-------+---------+-------+-----------+-------------------+-----------+-------------+
| 1 | 1 | 0 | 1 | 1 | NULL | NULL |
+-------+---------+-------+-----------+-------------------+-----------+-------------+
1 row in set (0.00 sec)
mysql> SELECT 1 = 2, 0 = 'abc', 1 = 'abc' FROM dual;
+-------+-----------+-----------+
| 1 = 2 | 0 = 'abc' | 1 = 'abc' |
+-------+-----------+-----------+
| 0 | 1 | 0 |
+-------+-----------+-----------+
1 row in set, 2 warnings (0.00 sec)
#查詢salary=10000,注意在Java中比較是==
SELECT employee_id,salary FROM employees WHERE salary = 10000;
#比較運(yùn)算符 0為false 1為ftrue 字符串存在隱式轉(zhuǎn)換如果轉(zhuǎn)換不成功則為0
#只要null參與比較判斷那么他結(jié)果就會(huì)為空
SELECT 1=NULL, NULL=NULL
FROM DUAL;
SELECT last_name,salary
FROM employees
WHERE salary = 6000;
SELECT last_name,salary
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct=NULL;
2.安全等號(hào)運(yùn)算符
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;
#如果把0.40改成 NULL 呢?
可以看到,使用安全等于運(yùn)算符時(shí),兩邊的操作數(shù)的值都為NULL時(shí),返回的結(jié)果為1而不是NULL,其他返回結(jié)果與等于運(yùn)算符相同。
#<=> :安全等于 區(qū)別在于 對(duì)于NULl的判斷也會(huì)進(jìn)行判斷了
# 為了null而生
SELECT 1<=>1, 1 <=>2,2<=>'a',0<=>'a' FROM DUAL;
#空可以正常得到比較了 加了<=>
SELECT 1<=> NULL, NULL<=> NULL
FROM DUAL;
#可查詢表中commission_pct 為空的數(shù)據(jù)
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct<=>NULL;
3.不等于運(yùn)算符
不等于運(yùn)算符(<>和!=)用于判斷兩邊的數(shù)字、字符串或者表達(dá)式的值是否不相等,如果不相等則返回1,相等則返回0。不等于運(yùn)算符不能判斷NULL值。如果兩邊的值有任意一個(gè)為NULL,或兩邊都為NULL,則結(jié)果為NULL。 SQL語句示例如下:
可以看到,使用安全等于運(yùn)算符時(shí),兩邊的操作數(shù)的值都為NULL時(shí),返回的結(jié)果為1而不是NULL,其他
返回結(jié)果與等于運(yùn)算符相同。
3.不等于運(yùn)算符 不等于運(yùn)算符(<>和!=)用于判斷兩邊的數(shù)字、字符串或者表達(dá)式的值是否不相等,
如果不相等則返回1,相等則返回0。不等于運(yùn)算符不能判斷NULL值。如果兩邊的值有任意一個(gè)為NULL,
或兩邊都為NULL,則結(jié)果為NULL。 SQL語句示例如下:
# <> != 不等于
SELECT 3<>2 ,3!=2,2<>2 ,2!=2 FROM DUAL;
#空和任何數(shù)據(jù)做對(duì)比都為空
SELECT '4'<>NULL,''!=NULL,NULL!=NULL FROM DUAL;
此外,還有非符號(hào)類型的運(yùn)算符:
#查詢commission_pct 為空
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct IS NULL;
#或者 作為關(guān)鍵字
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE ISNULL(commission_pct);
#查詢commission_pct 不 為空
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct IS NOT NULL;
#或者 作為關(guān)鍵字
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE NOT commission_pct <=>NULL;
#LEAST(value1,value2,...) 最小值 GREATEST(value1,value2,...) 最大值
SELECT LEAST('a','c','d','z','v'),
GREATEST('a','c','d','z','v') FROM DUAL;
SELECT LEAST(first_name,last_name) , LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
#BETWEENt 條件1 AND 條件2 (查詢條件1到條件二范圍的值 ,包含邊界值 例如 條件2是小于 5000 那就包括 5000)
#條件1必須為起始條件 條件2位終止條件 注意 不然查不到數(shù)據(jù)
#查詢表employees 中salary的值為6000-8000的包含6000和8000
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6600 AND 8000;
#或者下面
SELECT employee_id,last_name,salary
FROM employees
WHERE salary>=6000 && salary<=8000;
#錯(cuò)誤案例無法查詢到數(shù)據(jù)
SELECT employee_id,last_name,salary
FROM employees
WHERE salary>=8000 && salary<=6000;
#查詢不在6000和8000之間的數(shù)據(jù)
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6600 AND 8000;
#or 或的意思 AND 和&& 為且的意思
SELECT employee_id,last_name,salary
FROM employees
WHERE salary<6000 or salary>8000;
#in (集合) not in (集合)
#in 多條件值查詢 查詢 值為 10 20 30
SELECT department_id,last_name,salary
FROM employees
WHERE department_id =10 OR department_id=20 OR department_id=30 ;
SELECT department_id,last_name,salary
FROM employees
WHERE department_id in(10,20,30);
#查詢不為 10 20 30 的 not in
SELECT department_id,last_name,salary
FROM employees
WHERE department_id NOT in(10,20,30);
#like 模糊查詢 查詢 相似值
#%% 代表不確定個(gè)數(shù)的字符 代表前后有若干個(gè)值可能是0 ,1,或者其他
#查詢name中包含 a的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%';
#查詢name中 a 開頭的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE 'a%';
#查詢name中 a 結(jié)尾的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a';
#查詢包含a e的值
#寫法1
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
#寫法2
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%e%' or last_name LIKE '%e%a%';
#查詢第二個(gè)字符是a的值
#_ 代表不確定的字符
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '_a%'
#REGEXP RLIKE 正則表達(dá)式
#查詢 是不是以為y開頭,是不是以為O結(jié)尾,是不是包含 wen
SELECT 'yanwenchao' REGEXP '^y','yanwenchao' REGEXP 'o$',
'yanwenchao' REGEXP 'wen' FROM DUAL;
#... 3個(gè)點(diǎn)代表中間是3個(gè)任意值 前后對(duì)應(yīng)即可
#【af】 其中有任意一個(gè)字母就算通過 或者都有
SELECT 'yanwenchao' REGEXP 'yan...ch','yanwenchao' REGEXP '[af]'
FROM DUAL;
1是true 2是false
4. 空運(yùn)算符
空運(yùn)算符(IS NULL或者ISNULL)判斷一個(gè)值是否為NULL,如果為NULL則返回1,否則返回0。 SQL語句示例如下:
mysql> SELECT NULL IS NULL, ISNULL(NULL), ISNULL('a'), 1 IS NULL;
+--------------+--------------+-------------+-----------+
| NULL IS NULL | ISNULL(NULL) | ISNULL('a') | 1 IS NULL |
+--------------+--------------+-------------+-----------+
| 1 | 1 | 0 | 0 |
+--------------+--------------+-------------+-----------+
1 row in set (0.00 sec)
#查詢commission_pct等于NULL。比較如下的四種寫法
SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL;
SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> NULL;
SELECT employee_id,commission_pct FROM employees WHERE ISNULL(commission_pct);
SELECT employee_id,commission_pct FROM employees WHERE commission_pct = NULL;
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL;
#查詢commission_pct 為空
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct IS NULL;
#或者 作為關(guān)鍵字
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE ISNULL(commission_pct);
5. 非空運(yùn)算符
非空運(yùn)算符(IS NOT NULL)判斷一個(gè)值是否不為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)
SELECT employee_id,commission_pct FROM employees WHERE NOT commission_pct <=> NULL;
SELECT employee_id,commission_pct FROM employees WHERE NOT ISNULL(commission_pct);
#查詢commission_pct 不 為空
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE commission_pct IS NOT NULL;
#或者 作為關(guān)鍵字
SELECT last_name,salary ,commission_pct
FROM employees
#WHERE salary = NULL; #只要null參與判斷不會(huì)有任何結(jié)果
WHERE NOT commission_pct <=>NULL;
6. 最小值運(yùn)算符
語法格式為:LEAST(值1,值2,…,值n)。其中,“值n”表示參數(shù)列表中有n個(gè)值。在有兩個(gè)或多個(gè)參數(shù)的情況下,返回最小值。
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(value1,value2,...) 最小值 GREATEST(value1,value2,...) 最大值
SELECT LEAST('a','c','d','z','v'),
GREATEST('a','c','d','z','v') FROM DUAL;
SELECT LEAST(first_name,last_name) , LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
由結(jié)果可以看到,當(dāng)參數(shù)是整數(shù)或者浮點(diǎn)數(shù)時(shí),LEAST將返回其中最小的值;當(dāng)參數(shù)為字符串時(shí),返回字母表中順序最靠前的字符;當(dāng)比較值列表中有NULL時(shí),不能判斷大小,返回值為NULL。
7. 最大值運(yùn)算符
語法格式為:GREATEST(值1,值2,…,值n)。其中,n表示參數(shù)列表中有n個(gè)值。當(dāng)有兩個(gè)或多個(gè)參數(shù)時(shí),返回值為最大值。假如任意一個(gè)自變量為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)
由結(jié)果可以看到,當(dāng)參數(shù)中是整數(shù)或者浮點(diǎn)數(shù)時(shí),GREATEST將返回其中最大的值;當(dāng)參數(shù)為字符串時(shí),返回字母表中順序最靠后的字符;當(dāng)比較值列表中有NULL時(shí),不能判斷大小,返回值為NULL。
#LEAST(value1,value2,...) 最小值 GREATEST(value1,value2,...) 最大值
SELECT LEAST('a','c','d','z','v'),
GREATEST('a','c','d','z','v') FROM DUAL;
SELECT LEAST(first_name,last_name) , LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;
8. BETWEEN AND運(yùn)算符
BETWEEN運(yùn)算符使用的格式通常為SELECT D FROM TABLE WHERE C BETWEEN AAND B,此時(shí),當(dāng)C大于或等于A,并且C小于或等于B時(shí),結(jié)果為1,否則結(jié)果為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;
#BETWEENt 條件1 AND 條件2 (查詢條件1到條件二范圍的值 ,包含邊界值 例如 條件2是小于 5000 那就包括 5000)
#條件1必須為起始條件 條件2位終止條件 注意 不然查不到數(shù)據(jù)
#查詢表employees 中salary的值為6000-8000的包含6000和8000
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6600 AND 8000;
#或者下面
SELECT employee_id,last_name,salary
FROM employees
WHERE salary>=6000 && salary<=8000;
#錯(cuò)誤案例無法查詢到數(shù)據(jù)
SELECT employee_id,last_name,salary
FROM employees
WHERE salary>=8000 && salary<=6000;
#查詢不在6000和8000之間的數(shù)據(jù)
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6600 AND 8000;
#or 或的意思 AND 和&& 為且的意思
SELECT employee_id,last_name,salary
FROM employees
WHERE salary<6000 or salary>8000;
9. IN運(yùn)算符
IN運(yùn)算符用于判斷給定的值是否是IN列表中的一個(gè)值,如果是則返回1,否則返回0。如果給定的值為NULL,或者IN列表中存在NULL,則結(jié)果為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 |
+----------------------+------------+-------------------+--------------------+
WHERE manager_id IN (100, 101, 201);
#in (集合) not in (集合)
#in 多條件值查詢 查詢 值為 10 20 30
SELECT department_id,last_name,salary
FROM employees
WHERE department_id =10 OR department_id=20 OR department_id=30 ;
SELECT department_id,last_name,salary
FROM employees
WHERE department_id in(10,20,30);
#查詢不為 10 20 30 的 not in
SELECT department_id,last_name,salary
FROM employees
WHERE department_id NOT in(10,20,30);
10. NOT IN運(yùn)算符
NOT IN運(yùn)算符用于判斷給定的值是否不是IN列表中的一個(gè)值,如果不是IN列表中的一個(gè)值,則返回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)
#in (集合) not in (集合)
#in 多條件值查詢 查詢 值為 10 20 30
SELECT department_id,last_name,salary
FROM employees
WHERE department_id =10 OR department_id=20 OR department_id=30 ;
SELECT department_id,last_name,salary
FROM employees
WHERE department_id in(10,20,30);
#查詢不為 10 20 30 的 not in
SELECT department_id,last_name,salary
FROM employees
WHERE department_id NOT in(10,20,30);
11. LIKE運(yùn)算符
LIKE運(yùn)算符主要用來匹配字符串,通常用于模糊匹配,如果滿足條件則返回1,否則返回0。如果給定的值或者匹配條件為NULL,則返回結(jié)果為NULL。
LIKE運(yùn)算符通常使用如下通配符:
“%”:匹配0個(gè)或多個(gè)字符。
“_”:只能匹配一個(gè)字符。
SQL語句示例如下:
mysql> SELECT NULL LIKE 'abc', 'abc' LIKE NULL;
+-----------------+-----------------+
| NULL LIKE 'abc' | 'abc' LIKE NULL |
+-----------------+-----------------+
| NULL | NULL |
+-----------------+-----------------+
1 row in set (0.00 sec)
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%';
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
ESCAPE
回避特殊符號(hào)的:使用轉(zhuǎn)義符。例如:將[%]轉(zhuǎn)為[ %]、[]轉(zhuǎn)為[ ],然后再加上[ESCAPE‘$’]即可。
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT\_%‘;
如果使用\表示轉(zhuǎn)義,要省略ESCAPE。如果不是\,則要加上ESCAPE。
SELECT job_id
FROM jobs
WHERE job_id LIKE ‘IT$_%‘ escape ‘$‘;
#like 模糊查詢 查詢 相似值
#%% 代表不確定個(gè)數(shù)的字符 代表前后有若干個(gè)值可能是0 ,1,或者其他
#查詢name中包含 a的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%';
#查詢name中 a 開頭的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE 'a%';
#查詢name中 a 結(jié)尾的值
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a';
#查詢包含a e的值
#寫法1
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
#寫法2
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '%a%e%' or last_name LIKE '%e%a%';
#查詢第二個(gè)字符是a的值
#_ 代表不確定的字符
SELECT department_id,last_name,salary
FROM employees
WHERE last_name LIKE '_a%'
12. REGEXP運(yùn)算符
REGEXP運(yùn)算符用來匹配字符串,語法格式為: expr REGEXP 匹配條件 。如果expr滿足匹配條件,返回
(1)‘^’匹配以該字符后面的字符開頭的字符串。
(2)‘$’匹配以該字符前面的字符結(jié)尾的字符串。
(3)‘.’匹配任何一個(gè)單字符。
(4)“[…]”匹配在方括號(hào)內(nèi)的任何字符。例如,“[abc]”匹配“a”或“b”或 “c”。為了命名字符的范圍,使用一 個(gè)‘-’?!癧a-z]”匹配任何字母,而“[0-9]”匹配任何數(shù)字 。
(5)‘’匹配零個(gè)或多個(gè)在它前面的字符。例如,“x”匹配任何數(shù)量的‘x’字符,“[0-9]”匹配任何數(shù)量的數(shù)字, 而“”匹配任何數(shù)量的任何字符。
SQL語句示例如下:
mysql> SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk';
+------------------------+------------------------+-------------------------+
| 'shkstart' REGEXP '^s' | 'shkstart' REGEXP 't$' | 'shkstart' REGEXP 'hk' |
+------------------------+------------------------+-------------------------+
| 1 | 1 | 1 |
+------------------------+------------------------+-------------------------+
1 row in set (0.01 sec)
mysql> SELECT 'atguigu' REGEXP 'gu.gu', 'atguigu' REGEXP '[ab]';
+--------------------------+-------------------------+
| 'atguigu' REGEXP 'gu.gu' | 'atguigu' REGEXP '[ab]' |
+--------------------------+-------------------------+
| 1 | 1 |
+--------------------------+-------------------------+
1 row in set (0.00 sec)
#REGEXP RLIKE 正則表達(dá)式
#查詢 是不是以為y開頭,是不是以為O結(jié)尾,是不是包含 wen
SELECT 'yanwenchao' REGEXP '^y','yanwenchao' REGEXP 'o$',
'yanwenchao' REGEXP 'wen' FROM DUAL;
#... 3個(gè)點(diǎn)代表中間是3個(gè)任意值 前后對(duì)應(yīng)即可
#【af】 其中有任意一個(gè)字母就算通過 或者都有
SELECT 'yanwenchao' REGEXP 'yan...ch','yanwenchao' REGEXP '[af]'
FROM DUAL;
1是true 2是false
3. 邏輯運(yùn)算符
邏輯運(yùn)算符主要用來判斷表達(dá)式的真假,在MySQL中,邏輯運(yùn)算符的返回結(jié)果為1、0或者NULL。MySQL中支持4種邏輯運(yùn)算符如下:
1.邏輯非運(yùn)算符
邏輯非(NOT或!)運(yùn)算符表示當(dāng)給定的值為0時(shí)返回1;當(dāng)給定的值為非0值時(shí)返回0;當(dāng)給定的值為NULL時(shí),返回NULL。
mysql> SELECT NOT 1, NOT 0, NOT(1+1), NOT !1, NOT NULL;
+-------+-------+----------+--------+----------+
| NOT 1 | NOT 0 | NOT(1+1) | NOT !1 | NOT NULL |
+-------+-------+----------+--------+----------+
| 0 | 1 | 0 | 1 | NULL |
+-------+-------+----------+--------+----------+
1 row in set, 1 warning (0.00 sec)
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
2.邏輯與運(yùn)算符
邏輯與(AND或&&)運(yùn)算符是當(dāng)給定的所有值均為非0值,并且都不為NULL時(shí),返回1;當(dāng)給定的一個(gè)值或者多個(gè)值為0時(shí)則返回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.1邏輯或運(yùn)算符
邏輯或(OR或||)運(yùn)算符是當(dāng)給定的值都不為NULL,并且任何一個(gè)值為非0值時(shí),則返回1,否則返回0;當(dāng)一個(gè)值為NULL,并且另一個(gè)值為非0值時(shí),返回1,否則返回NULL;當(dāng)兩個(gè)值都為NULL時(shí),返回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之間的員工編號(hào)和基本薪資
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;
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
注意:
OR可以和AND一起使用,但是在使用時(shí)要注意兩者的優(yōu)先級(jí),由于AND的優(yōu)先級(jí)高于OR,因此先
對(duì)AND兩邊的操作數(shù)進(jìn)行操作,再與OR中的操作數(shù)結(jié)合。
4.邏輯異或運(yùn)算符
邏輯異或(XOR)運(yùn)算符是當(dāng)給定的值中任意一個(gè)值為NULL時(shí),則返回NULL;如果兩個(gè)非NULL的值都是0或者都不等于0時(shí),則返回0;如果一個(gè)值為0,另一個(gè)值不為0時(shí),則返回1。
| 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;
整理代碼:
#or:或者 滿足一個(gè)即可 and 并 且 兩者都要滿足
SELECT department_id,last_name,salary
FROM employees
WHERE department_id =10 OR salary>6000;
#not 非空
SELECT department_id,last_name,salary
FROM employees
#WHERE department_id =10 OR salary>6000;
#HERE commission_pct is NULL;#空的
WHERE commission_pct is not NULL;#非空的
# WHERE Not commission_pct <=> NULL;#非空的
#XOR 異或 理解:2個(gè)條件滿足一個(gè)另一個(gè)肯定不滿足的
#查詢出來的肯定是滿足其中一個(gè) 不滿足另一個(gè)的數(shù)據(jù)
SELECT department_id,last_name,salary
FROM employees
WHERE department_id =10 XOR salary>6000;
4. 位運(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ù)。
MySQL支持的位運(yùn)算符如下:
1.按位與運(yùn)算符
按位與(&)運(yùn)算符將給定值對(duì)應(yīng)的二進(jìn)制數(shù)逐位進(jìn)行邏輯與運(yùn)算。當(dāng)給定值對(duì)應(yīng)的二進(jìn)制位的數(shù)值都為1時(shí),則該位返回1,否則返回0。
mysql> SELECT 1 & 10, 20 & 30;
+--------+---------+
| 1 & 10 | 20 & 30 |
+--------+---------+
| 0 | 20 |
+--------+---------+
1 row in set (0.00 sec)
1的二進(jìn)制數(shù)為0001,10的二進(jìn)制數(shù)為1010,所以1 & 10的結(jié)果為0000,對(duì)應(yīng)的十進(jìn)制數(shù)為0。20的二進(jìn)制數(shù)為10100,30的二進(jìn)制數(shù)為11110,所以20 & 30的結(jié)果為10100,對(duì)應(yīng)的十進(jìn)制數(shù)為20。
2. 按位或運(yùn)算符
按位或(|)運(yùn)算符將給定的值對(duì)應(yīng)的二進(jìn)制數(shù)逐位進(jìn)行邏輯或運(yùn)算。當(dāng)給定值對(duì)應(yīng)的二進(jìn)制位的數(shù)值有一個(gè)或兩個(gè)為1時(shí),則該位返回1,否則返回0。
mysql> SELECT 1 | 10, 20 | 30;
+--------+---------+
| 1 | 10 | 20 | 30 |
+--------+---------+
| 11 | 30 |
+--------+---------+
1 row in set (0.00 sec)
1的二進(jìn)制數(shù)為0001,10的二進(jìn)制數(shù)為1010,所以1 | 10的結(jié)果為1011,對(duì)應(yīng)的十進(jìn)制數(shù)為11。20的二進(jìn)制數(shù)為10100,30的二進(jìn)制數(shù)為11110,所以20 | 30的結(jié)果為11110,對(duì)應(yīng)的十進(jìn)制數(shù)為30。
mysql> SELECT 1 ^ 10, 20 ^ 30;
+--------+---------+
| 1 ^ 10 | 20 ^ 30 |
+--------+---------+
| 11 | 10 |
+--------+---------+
1 row in set (0.00 sec)
1的二進(jìn)制數(shù)為0001,10的二進(jìn)制數(shù)為1010,所以1 ^ 10的結(jié)果為1011,對(duì)應(yīng)的十進(jìn)制數(shù)為11。20的二進(jìn)
制數(shù)為10100,30的二進(jìn)制數(shù)為11110,所以20 ^ 30的結(jié)果為01010,對(duì)應(yīng)的十進(jìn)制數(shù)為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)
SELECT 12 & 5, 12 | 5,12 ^ 5 FROM DUAL;
4. 按位取反運(yùn)算符
按位取反(~)運(yùn)算符將給定的值的二進(jìn)制數(shù)逐位進(jìn)行取反操作,即將1變?yōu)?,將0變?yōu)?。
mysql> SELECT 10 & ~1;
+---------+
| 10 & ~1 |
+---------+
| 10 |
+---------+
1 row in set (0.00 sec)
5. 按位右移運(yùn)算符
按位右移(>>)運(yùn)算符將給定的值的二進(jìn)制數(shù)的所有位右移指定的位數(shù)。右移指定的位數(shù)后,右邊低位的數(shù)值被移出并丟棄,左邊高位空出的位置用0補(bǔ)齊。
mysql> SELECT 1 >> 2, 4 >> 2;
+--------+--------+
| 1 >> 2 | 4 >> 2 |
+--------+--------+
| 0 | 1 |
+--------+--------+
1 row in set (0.00 sec)
1的二進(jìn)制數(shù)為0000 0001,右移2位為0000 0000,對(duì)應(yīng)的十進(jìn)制數(shù)為0。4的二進(jìn)制數(shù)為0000 0100,右移2位為0000 0001,對(duì)應(yīng)的十進(jìn)制數(shù)為1。
#在一定的范圍內(nèi)他是滿足的:每向左移動(dòng)一位,相當(dāng)于乘以2
#向右移動(dòng)一位相當(dāng)除2 在圖中就可看出
SELECT 1 >> 2, 4 >> 2;
6. 按位左移運(yùn)算符
按位左移(<<)運(yùn)算符將給定的值的二進(jìn)制數(shù)的所有位左移指定的位數(shù)。左移指定的位數(shù)后,左邊高位的數(shù)值被移出并丟棄,右邊低位空出的位置用0補(bǔ)齊。
mysql> SELECT 1 << 2, 4 << 2;
+--------+--------+
| 1 << 2 | 4 << 2 |
+--------+--------+
| 4 | 16 |
+--------+--------+
1 row in set (0.00 sec)
1的二進(jìn)制數(shù)為0000 0001,左移兩位為0000 0100,對(duì)應(yīng)的十進(jìn)制數(shù)為4。4的二進(jìn)制數(shù)為0000 0100,左移兩位為0001 0000,對(duì)應(yīng)的十進(jìn)制數(shù)為16。
5. 運(yùn)算符的優(yōu)先級(jí)
數(shù)字編號(hào)越大,優(yōu)先級(jí)越高,優(yōu)先級(jí)高的運(yùn)算符先進(jìn)行計(jì)算??梢钥吹?,賦值運(yùn)算符的優(yōu)先級(jí)最低,使用“()”括起來的表達(dá)式的優(yōu)先級(jí)最高。
拓展:使用正則表達(dá)式查詢
正則表達(dá)式通常被用來檢索或替換那些符合某個(gè)模式的文本內(nèi)容,根據(jù)指定的匹配模式匹配文本中符合要求的特殊字符串。例如,從一個(gè)文本文件中提取電話號(hào)碼,查找一篇文章中重復(fù)的單詞或者替換用戶輸入的某些敏感詞語等,這些地方都可以使用正則表達(dá)式。正則表達(dá)式強(qiáng)大而且靈活,可以應(yīng)用于非常復(fù)雜的查詢。
MySQL中使用REGEXP關(guān)鍵字指定正則表達(dá)式的字符匹配模式。下表列出了REGEXP操作符中常用字符匹配 列表。
1. 查詢以特定字符或字符串開頭的記錄
字符‘^’匹配以特定字符或者字符串開頭的文本。在fruits表中,查詢f_name字段以字母‘b’開頭的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^b';
2. 查詢以特定字符或字符串結(jié)尾的記錄
字符‘$’匹配以特定字符或者字符串結(jié)尾的文本。
在fruits表中,查詢f_name字段以字母‘y’結(jié)尾的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'y$';
3.用符號(hào)"."來替代字符串中的任意一個(gè)字符
字符‘.’匹配任意一個(gè)字符。 在fruits表中,查詢f_name字段值包含字母‘a(chǎn)’與‘g’且兩個(gè)字母之間只有一個(gè)字母的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
4. 使用"*“和”+"來匹配多個(gè)字符
星號(hào)‘*’匹配前面的字符任意多次,包括0次。加號(hào)‘+’匹配前面的字符至少一次。在fruits表中,查詢f_name字段值以字母‘b’開頭且‘b’后面出現(xiàn)字母‘a(chǎn)’的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
5. 匹配指定字符串
正則表達(dá)式可以匹配指定字符串,只要這個(gè)字符串在查詢文本中即可,如要匹配多個(gè)字符串,多個(gè)字符串之間使用分隔符‘|’隔開。
在fruits表中,查詢f_name字段值包含字符串“on”的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on';
在fruits表中,查詢f_name字段值包含字符串“on”或者“ap”的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
之前介紹過,LIKE運(yùn)算符也可以匹配指定的字符串,但與REGEXP不同,LIKE匹配的字符串如果在文本中間出現(xiàn),則找不到它,相應(yīng)的行也不會(huì)返回。REGEXP在文本內(nèi)進(jìn)行匹配,如果被匹配的字符串在文本中
出現(xiàn),REGEXP將會(huì)找到它,相應(yīng)的行也會(huì)被返回。對(duì)比結(jié)果如下所示。
在fruits表中,使用LIKE運(yùn)算符查詢f_name字段值為“on”的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name like 'on';
Empty set(0.00 sec)
6. 匹配指定字符中的任意一個(gè)
方括號(hào)“[]”指定一個(gè)字符集合,只匹配其中任何一個(gè)字符,即為所查找的文本。
在fruits表中,查找f_name字段中包含字母‘o’或者‘t’的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '[ot]';
在fruits表中,查詢s_id字段中包含4、5或者6的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE s_id REGEXP '[456]';
7. 匹配指定字符以外的字符
“[^字符集合]” 匹配不在指定集合中的任何字符。
在fruits表中,查詢f_id字段中包含字母ae和數(shù)字12以外字符的記錄,SQL語句如下:
mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
8. 使用{n,}或者{n,m}來指定字符串連續(xù)出現(xiàn)的次數(shù)
“字符串{n,}”表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{2,}表示字母a連續(xù)出現(xiàn)至少2次,也可以大于2次;a{2,4}表示字母a連續(xù)出現(xiàn)最少2次,最多不能超過4次。
在fruits表中,查詢f_name字段值出現(xiàn)字母‘x’至少2次的記錄,SQL語句如下:文章來源:http://www.zghlxwxcb.cn/news/detail-478207.html
mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
在fruits表中,查詢f_name字段值出現(xiàn)字符串“ba”最少1次、最多3次的記錄,SQL語句如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-478207.html
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}';
到了這里,關(guān)于MySQL數(shù)據(jù)庫(kù),從入門到精通:第四篇——MySQL中常用的運(yùn)算符及其用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!