day2|第04章 运算符|2022-11-13

day2|120天搞定mysql|2022-11-13

第04章 运算符

1. 算术运算符: +、-、*、\、div、%、mod
mysql> select 100, 100+0, 100-1, 100-1.5, 10*2 from dual;

# 在sql中,+号没有连接的作用,就只表示加法运算。此时会将字符串转为数值(隐式转换)
select 100 + '1' from dual;	# 在某些编程语言中,结果是1001.
select 100 + 'a' from dual; # 此时a看作0处理。
select 100 + null from dual; # null参与运算,结果为null。
select 100/1.0, 100/2, 100div0 from dual;	# 分母如果为0,则结果为null

# 取模运算: % mod
mysql> select 12%5, 12 mod 3, 12 mod -5, -12 mod 5, -12 mod -5  from dual; # 结果的正负取决于模数。例如这里的12。

# 练习:查询员工id为偶数的员工信息
mysql> select employee_id, last_name, salary from employees where employee_id % 2 = 0;


2. 比较运算符
# 2.1  =、<=>、<>、!=、<、<=、>、>=
mysql> select 1=2, 1!=2, 1 = '1', 1 = 'a', 0 = 'a', 'a' = 'b' from dual;#字符串存在隐式转换。如果转换数值不成功,则看做0

mysql> select 'a' = 'a', 'ab' = 'ab', 'a' = 'b' from dual; #两边都是字符串的话,则按照ANSI的比较规则进行比较。
mysql> select 1 = null, null = null from dual;# 只要有null参与判断,结果就为null
mysql> select last_name, salary, commission_pct from employees where commission_pct = null; #此时执行,不会有任何的结果

# <=> :安全等于。 记忆技巧:为NULL而生。
mysql> select 1 <=> null, null <=> null;
#练习:查询表中commission_pct为null的数据有哪些
mysql> select last_name, salary, commission_pct from employees where commission_pct <=>
null;

# 2.2 
#① IS NULL \ IS NOT NULL \ ISNULL
#练习:查询表中commission_pct为null的数据有哪些
mysql> select last_name, salary, commission_pct from employees where commission_pct is null;
# 或者
mysql> select last_name, salary, commission_pct from employees where isnull(commission_pct);

#练习:查询表中commission_pct不为null的数据有哪些
mysql> select last_name, salary, commission_pct from employees where commission_pct is not null;
# 或者
mysql> select last_name, salary, commission_pct from employees where not commission_pct <=> null;

#② LEAST() \ GREATEST 
mysql> select least(1,2,3,4,5), least('a','b','c'), greatest(1,2,3) from dual;
mysql> select least(first_name, last_name), greatest(length(first_name), length(last_name)) from  employees;

#③ BETWEEN 条件下界1 AND 条件上界2  (查询条件1和条件2范围内的数据,包含边界)
#查询工资在6000 到 8000的员工信息
mysql> select employee_id, last_name, salary from employees where salary >= 6000 && salary <= 8000;
mysql> select employee_id, last_name, salary from employees where salary between 6000 and 8000;

#查询工资不在6000 到 8000的员工信息
mysql> select employee_id, last_name, salary from employees where salary not between 6000 and 8000;
#where salary < 6000 or salary > 8000;

#④ in (set)\ not in (set)
#练习:查询工资不是6000,7000,8000的员工信息
mysql> select last_name, salary, department_id from employees where salary not in (6000,7000,8000);

#⑤ LIKE :模糊查询
# % : 代表不确定个数的字符 (0个,1个,或多个)
#练习:查询last_name中包含字符'a'的员工信息
mysql> select last_name from employees where last_name like '%a%';
#练习:查询last_name中以字符'a'开头的员工信息
mysql> select last_name from employees where last_name like 'a%';
#练习:查询last_name中包含字符'a'且包含字符'e'的员工信息
#写法1:
mysql> select last_name from employees where last_name like '%a%' and last_name like '%e%';
#写法2:
mysql> select last_name from employees where last_name like '%a%e%' or last_name like '%e%a%';

# _ :代表一个不确定的字符

#练习:查询第3个字符是'a'的员工信息
mysql> select last_name from employees where last_name like '__a%';
#练习:查询第2个字符是_且第3个字符是'a'的员工信息
#需要使用转义字符: \ 
mysql> select last_name from employees where last_name like '_\_a%';

#⑥ REGEXP \ RLIKE :正则表达式
mysql> select 'shkstart' regexp '^shk', 'shkstart' regexp 't$', 'shkstart' regexp 'hk' from dual;
mysql> select 'atguigu' regexp 'gu.gu', 'atguigu' regexp '[ab]' from dual;

#3. 逻辑运算符: OR ||  AND && NOT ! XOR
# or  and 
mysql> select last_name, salary, department_id from employees where department_id = 10 or department_id = 20;
mysql> select last_name, salary, department_id from employees where department_id = 50 and salary > 6000;
# not 
mysql> select last_name, salary, department_id from employees where department_id = 50 and salary > 6000;
mysql> select last_name, salary, department_id from employees where commission_pct is not null;
mysql> select last_name, salary, department_id from employees where not commission_pct <=> null;
# XOR :追求的"异"
mysql> select last_name, salary, department_id from employees where department_id = 50 xor salary > 6000; #注意:AND的优先级高于OR

#4. 位运算符: & |  ^  ~  >>   <<
mysql> select 12 & 5, 12 | 5, 12 ^5 from dual;
mysql> select 10&~1 from dual;
#在一定范围内满足:每向左移动1位,相当于乘以2;每向右移动一位,相当于除以2。
mysql> select 4 << 1, 8 >> 1 from dual;

第04章 课后练习题

# 第04章_运算符课后练习

# 1.选择工资不在5000到12000的员工的姓名和工资
mysql> select last_name, salary from employees where salary not between 5000 and 12000;
mysql> select last_name, salary from employees where salary < 5000 or salary > 12000;

# 2.选择在20或50号部门工作的员工姓名和部门号
mysql> select last_name, department_id from employees where department_id in (20, 50);
mysql> select last_name, department_id from employees where department_id = 20 or department_id = 50;

# 3.选择公司中没有管理者的员工姓名及job_id
mysql> select last_name, job_id, manager_id from employees where manager_id is null;
mysql> select last_name, job_id, manager_id from employees where manager_id <=> null;

# 4.选择公司中有奖金的员工姓名,工资和奖金级别
mysql> select last_name, salary, commission_pct from employees where commission_pct is not null;
mysql> select last_name, salary, commission_pct from employees where not commission_pct <=> null;

# 5.选择员工姓名的第三个字母是a的员工姓名
mysql> select last_name from employees where last_name like '__a%';

# 6.选择姓名中有字母a和k的员工姓名
mysql> select last_name from employees where last_name like '%a%k%' or last_name like '%k%a%';
mysql> select last_name from employees where last_name like '%a%' and last_name like "%k%";

# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息
mysql> select first_name, last_name from employees where first_name like '%e';
mysql> select first_name, last_name from employees where first_name regexp 'e$'; # 以e开头的写法:'^e'

# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种
mysql> select last_name, job_id from employees where department_id between 80 and 100;
mysql> select last_name, job_id from employees where department_id >=80 and department_id <= 100;

# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
mysql> select last_name, salary, manager_id from employees where manager_id in (100,101,110);

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值