1、按照 job 和薪水倒序排序:
select ename,job,sal from emp order by job desc,sal desc;
2、substr()截取子串
该函数接收3个参数:substr(被截取字段名称,起始下标,截取长度),起始下标从1开始。
查询并显示所员工姓名的第二个字母:
select substr(ename,2,1) from emp;
3、length()获取字段长度
取得员工姓名长度
select ename,length(ename) as nameLength from emp;
4、查询员工姓名及补助,如果补助为Null设置为0;
select ename,ifnull(comm,0) from emp;
5、case…when…then…else…end
匹配工作岗位,当为MANAGER时,薪水上调10%,当为SALESMAN时,薪水上调50%,其它岗位薪水不变。
case job
when ‘MANAGER’ then sal * 1.1
when ‘SALESMAN’then sal * 1.5
else sal
end
在select语句中使用:
select ename, sal, job,
(case job
when ‘MANAGER’ then sal * 1.1
when ‘SALESMAN’then sal * 1.5
else sal
end) as newsal
from emp;
6、round()四舍五入
该函数接收两个参数round(数字,保留的小数位数)
查看员工薪水保留1位小数:
select round(sal,1) from emp;
7、使用str_to_date()函数查询02-20-1981年入职的员工:
select ename,hiredate from emp where hiredate = str_to_date('02-20-1981','%m-%d-%Y');
8、date_format()格式化日期
该函数接收两个参数,date_format(日期类型数据,’日期格式’)
查询员工的入职日期,以’10-12-1980’的格式显示到窗口中;
select ename,date_format(hiredate,'%m-%d-%Y') hiredate from emp ;
9、取得补助不为空的员工数:
select count(comm) from emp;
说明:count()函数不会统计数据为null的记录
10、distinct去除重复记录
作用:将查询结果中某一字段的重复记录去除掉
用法:distinct 字段名或 distinct字段名1, 字段名2…
注意:distinct只能出现在所有字段最前面,后面如果有多个字段及为多字段联合去重。
查询公司有哪些工作岗位:
select distinct job from emp;
去除部门编号deptno和工作岗位job重复的记录:
select distinct job,deptno from emp;
11、group by 分组
计算每个工作岗位的最高薪水,并且按照由低到高进行排序:
select job,max(sal) as maxsal from emp group by job order by maxsal;
12、计算除了manager之外的每个工作岗位的最高薪水:
select job,max(sal) as maxsal from emp where job <> 'MANAGER' group by job;
13、having过滤
作用:如果想对分组的数据进行过滤,需要使用having子句。
找出每个工作岗位的平均薪水,要求显示平均薪水大于2000的:
select job,avg(sal) from emp group by job having avg(sal) > 2000;
14、where和having区别
- where和having都是为了完成数据的过滤,它们后面都是添加条件;
- where是在 group by之前完成过滤;
- having是在group by之后完成过滤;
注:一个的SQL语句如下:
select
xxxx
from
xxxx
where
xxxx
group by
xxxx
having
xxxx
order by
xxxx
参考:http://www.monkey1024.com/database/814