资料
根据【MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!】 整理
资料链接:
百度网盘:
链接:https://pan.baidu.com/s/1KboU_3EZJxrezMWZ2klP6g
提取码:1234
阿里云盘
1. 算术运算符
算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/ 或 div)和取模(% 或 mod)运算。
1.1 加法与减法运算符
SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 * 30, 100 + 35.5, 100 - 35.5 FROM DUAL;
SELECT 100 + '1' FROM DUAL;
在Java语言中,结果是:1001。
在SQL中,+ 没有连接的作用,就表示加法运算。此时,会将字符串转换为数值(隐式转换)
SELECT 100 + 'a' # 此时将'a'看做 0 处理 FROM DUAL;
SELECT 100 + NULL # null 值参与运算,结果为null FROM DUAL;
- 由运算结果可以得出如下结论:
- 1.一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
- 2.一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;
- 3.加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
- 4.在Java中,+ 的左右两边如果有字符串,那么表示字符串的拼接。但是在MySQL中 + 只表示数值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。(补充:MySQL中字符串拼接要使用字符串函数
CONCAT()
实现)
1.2 乘法与除法运算符
SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, # 除法更多的情况除不尽,会保留一定的小数位 # 所以结果有小数 100 / 2, 100 + 2 * 5 / 2, 100 / 3, 100 DIV 0 # 分母如果为0,则结果为null FROM DUAL;
- 由运算结果可以得出如下结论:
- 1.一个数乘以整数1和除以整数1后仍得原数;
- 2.一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
- 3.一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
- 4.一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
- 5.乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
- 6.在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。
1.3 求模(求余)运算符
# 取模运算: % mod # 符号前面的数为被模数,符号后面的为模数 # 结果的符号与被模数一致,与模数无关 SELECT 12 % 3, 12 % 5, 12 MOD -5, -12 % 5, -12 % -5 FROM DUAL;
练习:查询员工id为偶数的员工信息
SELECT * FROM employees WHERE employee_id%2 = 0;
2. 比较运算符
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
2.1 符号类型的比较运算符
= <=> <> != < <= > >=
2.1.1 = 的使用
等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。
- 在使用等号运算符时,遵循如下规则:
- 1.如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
- 2.如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
- 3.如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
- 4.如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
SELECT 1 = 2, 1 != 2, # 字符串与数值进行比较 # 字符串存在隐式转换。 # 会尝试将其转换为数值 # 如果转换数值不成功,则看做0 1 = '1', 1 = 'a', 0 = 'a' FROM DUAL;
SELECT #两边都是字符串的话,则按照ANSI的比较规则进行比较。 'a' = 'a', 'ab' = 'ab', 'a' = 'b' FROM DUAL;
SELECT # 只要有null参与判断,结果就为null 1 = NULL, NULL = NULL FROM DUAL;
查询 commission_pct 为 null 的记录:
SELECT last_name,salary,commission_pct FROM employees WHERE commission_pct = NULL;
此时执行,不会有任何的结果,因为比较结果为1才会加入结果集,null参与比较结果都为null,所以都不会加入结果集,最后查询的结果为空。
2.1.2 <=> 安全等于
为 null 而生,安全等于可以进行 null 的比较。
其他与等于相同。
SELECT 1 <=> 2, # 数值与字符串进行比较,会尝试将其转化为字符串 1 <=> '1', 1 <=> 'a', 0 <=> 'a' FROM DUAL;
SELECT # 安全等于可以进行 null 的比较 1 <=> NULL, NULL <=> NULL FROM DUAL;
查询 commission_pct 为 null 的记录:
SELECT last_name,salary,commission_pct FROM employees WHERE commission_pct <=> NULL;
使用安全等于可以进行 null 的比较,commission_pct 值等于 NULL,为真,所以可以查询出结果。
2.1.3 <> 与 !=
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。
与 = 一样,如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
SELECT 3 <> 2, '4' <> NULL, '' != NULL, NULL != NULL FROM DUAL;
2.1.4 < 、<= 、>= 、>
与 = 一样,如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
数值与字符串进行比较,会尝试将其转化为字符串。
SELECT 3 < 2, 3 > 2, 2 <= 4, 4 >= 4, 4 > NULL, 4 > 'A' FROM DUAL;