一、like(模糊查询)
支持%或下划线匹配(%匹配任意多个字符,下划线匹配一个字符)
找出名字中含有o的员工信息
select * from emp where ename like '%o%';
找出名字以T结尾的
select * from emp where ename like '%T';
找出第二个字母是A的
select * from emp where ename like '_A%';
找出名字中有下划线的(\转义字符)
select * from emp where ename like '%\_%';
二、排序
1、一个字段排序
查询所有员工薪资,排序(order by——默认升序)
select ename,sal from emp order by sal;
指定升序(添加asc)
select ename,sal from emp order by sal asc;
指定降序(添加desc)
select ename,sal from emp order by sal desc;
2、多字段排序(按照多个字段排序)
查询员工名字和薪资,要求按照薪资升序,薪资一样,再按照名字升序排列
select ename,sal from emp order by sal asc,ename asc;
3、根据字段位置排序(不建议采用)
select ename,sal from emp order by 2;//按照查询结果的第二列排(不建议采用,列的顺序会修改)
三、综合练习
1、找出工资在1250到3000的员工信息,要求按照薪资降序排列
select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
2、执行顺序:
- 第一步:from
- 第二步:where
- 第三步:select
- 第四步:order by(排序最后执行)
四、函数
(一)数据处理函数(单行处理函数)
1、特点
- 单行处理函数:一个输入对应一个输出(记录数量不变)
- 多行处理函数:多个输入对应一个输出(如求和等运算得出一个结果)
2、类型
①Lower转换小写
select lower(ename) Lower_ename from emp;
②upper转换大写
③substr取子串(substr(被截取的字符串,起始下标,截取的长度))
注意:起始下标从1开始
select substr(ename,1,1) Sub_name from emp;
找出员工名字第一个字母是A的员工信息
select * from emp where substr(ename,1,1) = 'A';
④concat字符串拼接
首字母小写
select concat(lower(substr(ename,1,1)),substr(ename,2,length(ename)-1)) concat_ename from emp;
⑤length取长度
select length(ename) ename_length from emp;
⑥trim去空格
select * from emp where ename= trim(' KING');
⑦round四舍五入
- round(数值,保留的小数位)
- round(数值,-1):保留到十位
select后面可跟字段名(变量名),也可以跟字面值(数据)
select round(1234.567,0) num from emp;
⑧rand生成随机数
select rand() from emp;
⑨ifnull空处理函数(将null转换成一个具体值)
用法:ifnull(数据,被当作哪个值)——如何数据为Null,把这个数据结果当作哪个值
在数据库中,只要有null参与的数学运算,最终结果就是null
select ename,sal+comm salcomm from emp;
查询员工年薪(年薪=(月薪+补贴)*12)
select ename,sal,comm,(sal+ifnull(comm,0))*12 yearsal from emp;
⑩case...when...then...when...then...else...end(难点)
当员工的工作岗位是manager的时候,工资上调10%,当工作岗位是salesman的时候,工资上调50%(注意,不修改数据库,只是将查询结果显示为工资上调)
select
ename,
job ,
sal oldsal,
(case job when 'manager' then sal*1.1 when 'salesman' then sal*1.5 else sal end) newsal
from
emp;
(二)多行处理函数(分组函数)
1、特点
输入多行,最终输出一行
注意:
- 分组函数在使用的时候必须先进行分组,然后才能用(如果没有对数据进行分组,整张表默认为一组)
- 分组函数自动忽略null,不需要对null提前处理
- 分组函数不能直接使用在where子句中
2、类型
①count计数
注意:count(*)和count(具体字段)区别
- count(*):统计总行数(只要有一行数据count则++)
- count(具体字段):表示统计字段下所有不为null的元素总数
②sum求和
③avg平均值
④max最大值
⑤min最小值
3、分组函数不能直接使用在where子句中
找出比最低工资高的员工信息?
4、所有的分组函数可以组合一起用