精選專欄鏈接 🔗
- MySQL技術筆記專欄
- Redis技術筆記專欄
- 大模型搭建專欄
- Python學習筆記專欄
- 深度學習算法專欄
歡迎訂閱,點贊+關注,每日精進1%,共攀技術高峰
更多內容持續更新中!希望能給大家帶來幫助~ 😀😀😀
MySQL中的算術運算符和比較運算符
- 1,MySQL中的DUAL關鍵字
- 2,算術運算符
- 3,比較運算符
- 3.1,符號型運算符
- 3.1.1,等號運算符
- 3.1.2,安全等于運算符
- 3.1.3,不等于運算符
- 3.1.4,其他符號型運算符總結
- 3.2,非符號型運算符
- 3.2.1,IS NULL :為空運算符
- 3.2.1,IS NOT NULL: 不為空運算符
- 3.2.3,LEAST:最小值運算符
- 3.2.4,GREATEST:最大值運算符
- 3.2.5,BETWEEN AND運算符
- 3.2.6,IN 和NOT IN運算符
- 3.2.7,LIKE:模糊查詢運算符
- 3.2.8,ESCAPE 運算符
- 4,邏輯運算符
1,MySQL中的DUAL關鍵字
? DUAL 關鍵字?是 MySQL數據庫 中的一個特殊表,主要用于在不需要從具體表中獲取數據時進行查詢操作。DUAL表是一個虛擬表
,以運行如下SQL代碼為例:
SELECT 1,3*2
FROM DUAL;
代碼運行結果如下:
2,算術運算符
算術運算符主要用于數學運算,其可以連接運算符前后的兩個數值或表達式,對數值或表達式進行運算。
MySQL中常見的算術運算符有:加(+)、減(-)、乘(*)、除(/或DIV)和取模(%或MOD)。接下來以SQL代碼為例理解算術運算符:
①加法與減法運算符
SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5
FROM DUAL;
運行結果如下:
②乘法與除法運算符
SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2,100 + 2 * 5 / 2,100 /3, 100 DIV 0
FROM DUAL;
運行結果如下:
注意點:
- 有浮點數參與運算,則結果為浮點數;如(100 * 1.0結果為100.0);
- 整數相除結果為浮點數。 因為大多數情況下的整數相除結果不能除盡,因此MySQL中默認了是除不盡的情況,即使除盡了也是浮點數;
- 分母為0則結果為Null;
③取模(求余)運算符
SELECT 12 % 3, 12 MOD 5, 12 MOD -5, -12 % 5,-12 % -5FROM dual;
運行結果如下:
注意:取余運算結果的正負與被模數一致(即%前面的數值)
練習:從員工表中查詢員工id為偶數的員工信息
SQL代碼如下:
SELECT employee_id,last_name,salaryFROM employeesWHERE employee_id % 2 = 0;
查詢得到的結果集如下:
3,比較運算符
比較運算符用來對表達式左邊的操作數和右邊的操作數進行比較,比較的結果為真則返回1,比較的結果為假則返回0,其他情況則返回NULL。比較運算符可以分為符號類型和非符號類型。
3.1,符號型運算符
3.1.1,等號運算符
運行如下SQL代碼:
SELECT 1 = 2,1 != 2,1 = '1',1 = 'a',0 = 'a'
FROM DUAL;
運行結果如下:
運行如下SQL代碼:
SELECT 'a' = 'a','ab' = 'ab','a' = 'b'
FROM DUAL;
運行結果如下:
注意點:
- 如果等號兩邊的值一個是整數,一個是字符串,則MySQL會按照字符串進行比較。如:1 = ‘1’ 進行比較時,會將字符串轉換為數值1 ;
- 字符串存在隱式轉換。如果轉換數值不成功,則看做0;比如1=‘a’ ,字符串轉數值失敗,會變為0;
- 如果等號兩邊都是字符串,MySQL會按照字符串進行比較,比較各自字符的ASCII編碼;
如果等號兩邊的值、字符串或表達式中有一個為NULL,則比較結果為NULL。
易錯例子:篩選出employees表內commission_pct為Null的員工信息
SQL語句如果寫成:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct = NULL;
此時執行查詢,沒有任何結果,如下圖所示:
原因就是WHERE語句中有Null參與比較,而只要等號兩邊有一個Null,結果就是Null。可以使用接下來介紹的安全等于運算符解決此問題。
3.1.2,安全等于運算符
安全等于運算符**(<=>)與等于運算符(=)的作用是相似的
,唯一的區別是‘<=>’可以用來對NULL進行判斷。在兩個操作數均為NULL時,其返回值為1,而不為NULL;當一個操作數為NULL時,其返回值為0,而不為NULL。
SQL代碼示例如下:
SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (5 + 3) <=> (2 + 6), '' <=> NULL,NULL <=> NULL
FROM DUAL;
運行結果如下:
回顧例子:篩選出employees表內commission_pct為Null的員工信息
對此例子,可以使用安全等于
(<=>)進行查詢:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
運行結果如下:
3.1.3,不等于運算符
不等于運算符( <> 和 != )用于判斷兩邊的數字、字符串或者表達式的值是否不相等,如果不相等則返回1,相等則返回0
。不等于運算符不能判斷NULL值。如果兩邊的值有任意一個為NULL,或兩邊都為NULL,則結果為NULL。
SQL示例如下:
SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULLFROM DUAL;
運行結果如下:
3.1.4,其他符號型運算符總結
運算符 | 名稱 | 作用 | 示例 |
---|---|---|---|
< | 小于運算符 | 判斷前面的值、字符串或表達式是否小于后面的值、字符串或表達式 | SELECT C FROM TABLE WHERE A < B |
> | 大于運算符 | 判斷前面的值、字符串或表達式是否大于后面的值、字符串或表達式 | SELECT C FROM TABLE WHERE A > B |
<= | 小于等于運算符 | 判斷前面的值、字符串或表達式是否小于等于后面的值、字符串或表達式 | SELECT C FROM TABLE WHERE A <= B |
>= | 大于等于運算符 | 判斷前面的值、字符串或表達式是否大于等于后面的值、字符串或表達式 | SELECT C FROM TABLE WHERE A >= B |
3.2,非符號型運算符
3.2.1,IS NULL :為空運算符
回顧例子:篩選出employees表內commission_pct為Null的員工信息
前面介紹了使用安全等于運算符篩選 Null 字段。我們還可以使用IS NULL
運算符進行篩選:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
3.2.1,IS NOT NULL: 不為空運算符
繼續看例子:篩選出employees表內commission_pct不為Null的員工信息
SQL語句如下:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
運行結果如下:
總結:查詢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;
3.2.3,LEAST:最小值運算符
LEAST最小值運算符,用于在多個值中返回最小值。
SQL示例如下:
SELECT LEAST (1,0,2), LEAST('b','a','c'), LEAST(1,NULL,2)FROM DUAL;
運行結果如下:
通過結果可以看出:
- 當參數是整數或者浮點數時,LEAST將返回其中最小的值;
- 當參數為字符串時,LEAST返回字母表中順序最靠前的字符;
- 當比較值列表中有NULL時,LEAST不能判斷大小,返回值為NULL;
3.2.4,GREATEST:最大值運算符
GREATEST最大值運算符,用于在多個值中返回最小值。
SQL示例如下:
SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2)
FROM DUAL;
運行結果如下:
通過結果可以看出:
- 當參數中是整數或者浮點數時,GREATEST將返回其中最大的值;
- 當參數為字符串時,GREATEST返回字母表中順序最靠后的字符;
- 當比較值列表中有NULL時,GREATEST不能判斷大小,返回值為NULL;
3.2.5,BETWEEN AND運算符
BETWEEN AND運算符使用的格式通常為:SELECT D FROM TABLE WHERE C BETWEEN A AND B
,此時,當C大于或等于A
,并且C小于或等于B
時,結果為1,否則結果為0。
SQL示例如下:
SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c'
FROM DUAL;
運行結果如下:
應用示例:查詢employees表內工資在6000到8000的員工信息;
SQL語句如下:
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;
查詢得到的結果集如下:
需要注意的是:SELECT D FROM TABLE WHERE C BETWEEN A AND B;
,其中A為下邊界,C為上邊界,不可顛倒,否則可能查詢不到數據。
如果需求改變,要求查詢employees表內工資
不在
6000到8000的員工信息呢?
SQL語句如下:
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
查詢得到的結果集如下:
3.2.6,IN 和NOT IN運算符
IN運算符用于**判斷給定的值是否是IN列表中的一個值,如果是則返回1,否則返回0。
應用示例:查詢部門為10、20、30部門的員工信息
SQL示例如下:
SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20,30);
或者采用下面這種方案:
SELECT last_name,salary,department_id
FROM employees
where department_id = 10 or department_id = 20 or department_id = 30;
運行結果如下:
NOT IN運算符用于判斷給定的值是否不是IN列表中的一個值,如果不是IN列表中的一
個值,則返回1,否則返回0。
應用示例:查詢工資不是6000、7000、8000的員工信息
SQL示例如下:
SELECT last_name,salary,department_id
FROM employees
WHERE salary NOT IN (6000,7000,8000);
運行結果如下:
3.2.7,LIKE:模糊查詢運算符
LIKE運算符主要用來匹配字符串,通常用于模糊匹配,如果滿足條件則返回1,否則返回
0。如果給定的值或者匹配條件為NULL,則返回結果為NULL。
應用示例:查詢last_name中包含字符 ‘a’ 的員工信息
SQL示例如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';
運行結果如下:
其中 %a% 中的 “%”是通配符,它代表不確定個數的字符。另外“_” 也是常用的通配符,二者區別如下:
- “%”:匹配0個或多個字符。
- “_”:只能匹配一個字符。
以下面的幾個案例進行說明:
- “%a%” 表示查詢 last_name 中包含字符a的員工信息;
- “a%” 表示查詢last_name中以字符a開頭的員工信息;
- “%a” 表示查詢last_name中以字符a結尾的員工信息;
- “_a%” 表示查詢last_name中第二個字符為a的員工信息;(一個下劃線匹配一個字符)
- “_\_a%” 表示查詢第二個字符為下劃線,且第三個字符為a的 員工信息;(其中 “\” 表示轉義)
3.2.8,ESCAPE 運算符
如果使用\表示轉義,要省略ESCAPE。如果不想使用\表示轉義,則要加上ESCAPE。
SQL示例(\表示轉義):
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%';
不想使用\進行轉義,比如要求使用$進行轉義。則可以修改SQL為:
SELECT last_name
FROM employees
WHERE last_name LIKE '_$_a%' ESCAPE '$';
4,邏輯運算符
邏輯運算符主要用來判斷表達式的真假,在MySQL中,邏輯運算符的返回結果為1、0或者NULL。MySQL中支持的四種邏輯運算符分別是:邏輯與、邏輯或、邏輯非、邏輯異或。
運算符 | 作用 | 作用 |
---|---|---|
NOT 或 ! | 邏輯非 | SELECT NOT A |
AND 或 && | 邏輯與 | SELECT A AND B 或 SELECT && B |
OR 或II | 邏輯或 | SELECT A OR B 或 SELECT A | | B |
XOR | 邏輯異或 | SELECT A XOR B |
其中邏輯異或(XOR)運算符是當給定的值中任意一個值為NULL時,則返回NULL;如果
兩個非NULL的值都是0或者都不等于0時,則返回0;如果一個值為0,另一個值不為0時,則返回1。簡而言之,異或強調 “異” ,只有兩邊不同時,才返回1。
異或運算符SQL示例
SELECT 1 XOR -1, 1 XOR 0, 0 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1, 0 XOR 0 XOR 0;
運行結果如下: