查询排序
如果需要针对查询后的结果,按照指定的数据列进行排序操作,就必须使用ORDER BY
默认排序:按照数据的插入顺序。
select * from emp;观察
语法格式
【3控制要显示的数据列】SELECT[DISTINCT]*|列名称[别名],列名称[别名],……
【1确定数据来源】FROM 表名称[别名]
【2确定满足条件的数据行】[WHERE 过滤条件I(S)]
【4针对查询结果进行排序】[ORDER BY 字段[ASC|DESC]], 字段[ASC|DESC]]……
ASC:默认:升序;DESC:降序
**ORDER BY 在select 之后执行,所以ORDER BY 子句可以使用SELECT定义的别名
单字段排序
#查询所有的雇员信息,按照工资由高到低排序
select * from emp order by sal desc;
#查询所有销售人员的信息,按照雇佣日期由早到晚排序
select * from emp where job=’SALESMAN’ order by hiredate asc;
多字段排序
#查询所有雇员信息,按照工资由高到低排序;如果工资相同,按照雇佣日期由早到晚排序
select * from emp order by sal desc,hiredata asc;
数据列别名的使用,子句执行顺序
#查询每个雇员的编号、姓名、年薪(别名income),并按照年薪由高到低排序。
select empno,ename,sal*12 income from emp order by income desc;
#查询所有销售人员的编号、姓名、职位(别名 position),年薪(别名income ),并按照年薪由高到低排序
select empno,ename,job position,sal*12 income
from emp
where job=’SALESMAN’
order by income desc;
select empno,ename,job position,sal*12 income
from emp
where position=’SALESMAN’
order by income desc;错误
**整个SQL查询中只有ORDER BY 能使用select 定义的别名
注意:
①ORDER BY 在SELECT之后执行,所以ORDER BY 子句可以使用select定义的别名,并且整个SQL查询中只有ORDER BY可以使用SELECT定义的别名。
②not in 里的职位也要加单引号
Select *from emp where ename not in (’SMITH’,’KING’,’ABC’) ;
综合练习
#查询部门30中的所有员工
#列出所有办事员(CLERK)的编号,姓名和部门编号
#找出佣金高于薪金60%的员工
select * from emp where conn>=(sal*0.6);
#找出部门10中所有经理和部门20中所有办事员的详细资料
select* from emp where (deptno=10and job=’MANAGER’) OR(deptno=20 and job=’CLERK’);
#找出部门10中所有经理和部门20中所有办事员或者挤不上经理又不是办事员但是其薪金大于等于2000的员工资料
两种方法:NOT IN 或 !=
select * from emp where (deptno=10and job=’MANAGER’)OR(deptno=20 and job=’CLERK’)OR(job not in(‘manager’,’clerk’)and sal>=2000);
select * from emp where (deptno=10and job=’MANAGER’)OR(deptno=20 and job=’CLERK’)OR(job!=’manager’and job!=’clerk’and sal>=2000);
#找出收取佣金的员工的不同工作
select distinct job from emp where comm is not null;
#找出不收取佣金或者收取的佣金低于100的员工
select * from emp where comm is null or comm<=100;
#显示名字中不带有R 的员工的姓名
select ename from emp where ename not like ‘%R%’;
#显示姓名字段的任何位置包含的所有员工的姓名,显示结果按照基本工资由高到低排序,如果基本工资相同,则按照雇佣年薪由早到晚排序,如果雇佣日期相同,则按照职位排序
Select ename
from emp
where ename like ‘%A%’
order by sal desc,hiredate,job;
#查询姓名不是’SMITH’,’KING’,’ABC’的员工的工号,姓名,工资
select empno,ename,sal
from emp
where ename not in (’SMITH’,’KING’,’ABC’) ;
#查询员工的姓名,工号,部门编号,按照部门编号升序排列,如果同部门,按照姓名降序
select ename,empno,deptno
from emp
order by deptno asc,ename desc;
#查询名字第三个字母是’A’的员工的姓名,工资,并按工由高到低排序
select ename,sal
from emp
where ename like ‘__A%’
order by sal asc;