03-MySQL基本运算符


-- 运算符
-- 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);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值