sql查询排序

查询排序

如果需要针对查询后的结果,按照指定的数据列进行排序操作,就必须使用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;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值