附文章用到的emp1表
一、算术运算符
运算符 | 名 称 | 作用 | 示例 |
+ | 加法运算符 | 计算两个值或表达式的和 | SELECT A+B |
- | 减法运算符 | 计算两个值或表达式的和 | SELECT A- B |
* | 乘法运算符 | 计算两个值或表达式的和 | SELECT A* B |
/ (DIV) | 除法运算符 | 计算两个值或表达式的和 | SELECT A / B |
% (MOD) | 求余运算符 | 计算两个值或表达式的和 | SELECT A%B |
1、算术运算符 + - * / %
SELECT 100, 100 + 0, 100 - 10,100 - 2.5
FROM DUAL;
SELECT 100 / 50, 100 / 3, 100 * 50
FROM DUAL;
SELECT 12 % 3, 45 % 6, 7 % 2, -12 % 9, 9 MOD - 4,-9 % -4
FROM DUAL;
注意:
(1)取模运算,结果的符号取决于被模数的符号
(2)在SQL中,‘+’没有连接作用,此时会将字符/字符串转化为数值(隐式转化)
(3)字符型的数字转化为int型数值,字符/字符串在下面的演示中转化为了0 ,Null参与运算结果还是NUll,例:
SELECT 100 + '1', 100 + 'A', 100 + "AB", 100 + NULL
FROM DUAL;
练习:查询薪金为偶数的人
SELECT id,name,salary
FROM emp1
WHERE salary % 2 = 0;
2、比较运算符: = <=> <> != < <= > >=
2.1 ‘ = ’
相当于C语言中的“==”
注意:
(1)字符串存在隐式转换,如果转换数值不成功,则看作0,例:
SELECT 1 = 2,1 = '1', 1 = 'a'
FROM DUAL;
(2)如果是纯字符串进行比较,则不进行隐式转换,而是比较ASCLL码,例:
SELECT 'a' = 'a','ab' = 'ab','a' = 'b','ab' = 'bc'
FROM DUAL;
(3)只要有NULL参与判断,结果就为NULL
SELECT 1 = NULL,NULL =NULL
FROM DUAL;
补充示例:此种情况执行时,不会有任何结果,因为虽然奖金里面有值为NULL,但是NULL参与运算结果都为NULL,所以一条数据也不显示
SELECT id,奖金
FROM emp1
WHERE 奖金 = NULL;
2.2 ‘<=>’ :安全等于
’<=>‘ 当NULL不参与时与 ’=‘ 功能相同,可以看作是专门用来应对NULL参与运算情况的帮助
SELECT 1 <=> '1'
FROM DUAL;
SELECT 1 <=> NULL,NULL <=> NULL
FROM DUAL;
2.3 其他符号
SELECT 3 <> 2,'4' <> NULL,'' != NULL,NULL != NULL
FROM DUAL;
3、IS NULL \ IS NOT NULL \ ISNULL
3.1 IS NULL示例
# 查询表中 奖金 为 NULL 的数据有哪些
SELECT name,奖金
FROM emp1
WHERE 奖金 IS NULL
3.2 IS NOT NULL示例
# 查询表中 奖金 不为 NULL 的数据有哪些
SELECT name,奖金
FROM emp1
WHERE 奖金 IS NOT NULL
# 或(此时又显示了<=>的特殊作用)
SELECT name,奖金
FROM emp1
WHERE NOT 奖金 <=> NULL


'奖金 <=> NULL 实现原理: 若奖金部位NULL,则会返回0,而NOT 则会使0变1,1变0,从而实现对非NULL值的筛选
4、LEAST() \ GREATEST
基本格式:LEAST(value1,value2,...):展示最大值; GREATEST(value1,value2,...): 展示最小值
# 基本展示
SELECT LEAST('A','H','a','P'),GREATEST('A','H','a','P')
FROM DUAL;
5、 BETWEEN 条件1 AND 条件2
注意:查询在条件1和2之间的数据时,结果是包含边界的,条件1属于上界,条件2属于下界,需要保证上界小,例:
# 查询薪水在5-8之间
SELECT salary,name,id
FROM emp1
WHERE salary BETWEEN 5 AND 7;
# 不在这个范围内
SELECT salary,name,id
FROM emp1
WHERE NOT salary BETWEEN 5 AND 7;


6、in(set) \ not in(set)
用于过滤数据的操作符,允许根据值列表或子查询的结果筛选记录
# 查询薪金为5,6,7的员工信息
SELECT id,name,salary
FROM emp1
WHERE salary = 5 OR salary = 6 OR salary = 7;
# 简短处理
SELECT id,name,salary
FROM emp1
WHERE salary IN (5,6,7);
7、LIKE:模糊查询
以查询 name 中带有‘O’的员工信息为例
错误示范: 此时LIKE可以看作 =,所以错误
SELECT `name`
FROM emp1
WHERE `name` LIKE 'O';
正确示范:
# % : 代表不确定个数的字符
# 在navicat中不区分大小写
SELECT `name`
FROM emp1
WHERE `name` LIKE '%O%';
# '%O%' :表示 O 前面或者后面可能有多个字符的情况
小练:
(1)查询 name 中以‘O’开头的员工信息
SELECT `name`
FROM emp1
WHERE `name` LIKE 'O%'
(2)查询 name 中以‘O’结尾的员工信息
SELECT `name`
FROM emp1
WHERE `name` LIKE '%O'
(3)查询既包含字符‘o’和‘m’的人员信息
SELECT `name`
FROM emp1
WHERE `name` LIKE "%O%M%";
8、 ‘’_ ‘’
代表“一个”不确定的字符,可以叠加
例:(1)查询第二个字符为‘o’
SELECT `name`
FROM emp1
WHERE `name` LIKE '_o%';
(2)查询第二个字符为‘_’,第三个字符为Y
# 要使用转义字符: \ 来表示‘_’
SELECT `name`
FROM emp1
WHERE `name` LIKE '_\_Y%';
今天是学习MySQL的第二天,因为今天课程比较多,所以学习的内容比较少,整理的也比较匆忙,还请大家见谅,明后两天时间较为充足,会继续分享更加丰富的MySQL的学习笔记,希望能对大家产生帮助,同时也欢迎大家来一同交流和纠正我的错误,一起进步。
每当学习并掌握了新的知识,就会有一点点的成就感,看似每天的努力微不足道,但它也会通过这一点点的成就感潜移默化的激励着我们,让我们更加充满信心。
须知少日拏云志,曾许人间第一流。我们还年轻,我们还有无限可能!