-- 运算符
-- 1.算术运算符 + - * / %
SELECT 100 + '1'
FROM dual;-- 结果为101(在SQL中+没有连接的作用,会将字符串转换为数值类型)在java中结果为1001
SELECT 100 + 'a'
FROM dual;-- 结果为100(将a看成0来处理)
SELECT 100 / 2
FROM dual;-- 50.0000(除法运算结果为浮点型)
SELECT 100 / 0
FROM dual;-- 分母为0,结果为null
SELECT 12 % 3, 12 % 5, 12 % -5, -12 % 5
FROM dual;
-- 结果与被模数的符号一致
-- 查询id为偶数的员工信息
SELECT last_name, salary, employee_id
FROM employees
WHERE employee_id % 2 = 0;
-- 2.比较运算符
-- 2.1 = <=> < > <>(!=)
SELECT 1 = 2, 1 <> 3, 1 = '1', 0 = 'a', 'a' = 'b' -- 字符串转换为数值不成功则为0(含有数值类型才会转换)
FROM dual;
SELECT 1 = NULL -- 只要有null参与比较结果就为null
FROM dual;
SELECT last_name, salary
FROM employees
-- WHERE salary = 6000;
WHERE commission_pct = NULL;
-- 啥也查不到(不会有结果满足条件)
-- <=> 解决null
SELECT 1 <=> NULL, NULL <=> NULL, NULL <=> 1
FROM dual;-- 两边为null结果为1,一边有null结果为0
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct <=> NULL;
-- 查询表中commission_pct为null的员工信息
-- 2.2
-- IS NULL \ IS NOT NULL \ ISNULL
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NULL;-- 等同于<=>
SELECT last_name, salary, commission_pct
FROM employees
WHERE ISNULL(commission_pct);
-- 等同于<=>
-- 总结
-- 查询结果为null 使用 IS NULL;查询结果不为null的使用 IS NOT NULL
-- 2.2.1.LEAST() \ GREATEST
SELECT LEAST(last_name, first_name), LENGTH(last_name)
FROM employees;
-- 2.2.2.BETWEEN AND
SELECT employee_id, last_name, salary -- 查询工资在6000到8000的员工信息(包含边界的)
FROM employees
WHERE salary BETWEEN 6000 AND 8000;
-- 在什么之间:between and 不在什么之间:not between and
-- 2.2.3.IN() \ NOT IN
SELECT last_name, salary, department_id -- 查询部门号为 10,20,30 的部门信息
FROM employees
WHERE department_id IN (10, 20, 30);
-- 2.2.4.LIKE 模糊查询
SELECT last_name -- 查询姓名包含‘a’的员工信息
FROM employees
WHERE last_name LIKE '%a%'; -- %代表不确定字符的个数(0个或者多个)
SELECT last_name -- 查询姓名包含‘a’,‘e’的员工信息
FROM employees
WHERE last_name LIKE '%a%e%'
OR last_name LIKE '%e%a%';
-- 查询第二个字符是a的员工信息
SELECT last_name -- _ :一个_表示一个不确定的字符
FROM employees
WHERE last_name LIKE '_a%';
-- 查询第二个字符是下划线且第三个字符是a的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%';
-- \ :转义字符
-- 2.2.5.REGEXP \ RLIKE 正则表达式
-- (1)‘^’匹配以该字符后面的字符开头的字符串。
-- (2)‘$’匹配以该字符前面的字符结尾的字符串。
-- (3)‘.’匹配任何一个单字符。
-- (4)“[...]”匹配在方括号内的任何字符。
-- 例如,“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围,使用一个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
-- (5)‘*’匹配零个或多个在它前面的字符。
-- 例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,而“*”匹配任何数量的任何字符。
SELECT last_name
FROM employees
WHERE last_name REGEXP '^a';
-- 3.逻辑运算符:OR || AND && NOT ! XOR(异或)
-- 课后练习
-- 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
-- 2.选择在20或50号部门工作的员工姓名和部门号
SELECT last_name, department_id
FROM employees
WHERE department_id IN (20, 50);
-- 3.选择公司中没有管理者的员工姓名及job_id
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;
-- 4.选择公司中有奖金的员工姓名,工资和奖金级别
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
-- 5.选择员工姓名的第三个字母是a的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
-- 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%k%'
OR last_name LIKE '%k%a%';
-- 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
SELECT last_name
FROM employees
WHERE last_name REGEXP 'e$';
-- 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
SELECT last_name,job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
-- 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT last_name,salary,manager_id
FROM employees
WHERE manager_id IN (100,101,102);
03-MySQL基本运算符
于 2022-07-22 14:56:04 首次发布