哈罗,各位小伙伴大家好,又见面了,我还是那个不吃饱不干活的小尘,欢迎来到本期的SQL语言之排序查询部分,让我们一起进入知识的海洋吧~  

一、引入

之前我们学过基础查询:

SELECT  *  FROM  employees;

这样查询的话,显示结果的顺序和表中原始数据的存储顺序是完全一致的。

sql server自定义排序 sql查询排序语句_升序

 

若我们有这样一个需求,按照员工的工资或是数值的先后,从高到低在页面上显示出来。

那就要用到条件查询啦!

二、语法:

基础查询: SELECT  *  FROM  employees;

排序查询: SELECT  *  FROM  empoyees  (根据需要可以加where子句进行筛选)

                   order  by  排序的列表

SELECT
	查询列表
FROM
	表
WHERE
	查询条件
ORDER BY
	排序列表(ASC-->升序 / DESC-->降序)

三、案例

案例一:从高到低排序

查询员工信息,要求工资从高到低排序。

代码:

select
	*
from
	employees
order by
	salary desc;

执行结果:

sql server自定义排序 sql查询排序语句_字段_02

 

案例二:从低到高排序

查询员工信息,要求工资从低到高排序。

代码:

select
	*
from
	employees
order by
	salary asc;

 

执行结果:

sql server自定义排序 sql查询排序语句_sql_03

当然,这里的ASC可以省略,效果和上面一样哦:

 

sql server自定义排序 sql查询排序语句_字段_04

 

案例三、添加筛选条件

查询部门编号大于等于90的员工信息,按入职时间的先后进行排序

代码:

SELECT
	*
FROM
	employees
WHERE
	department_id>=90
ORDER BY
	hiredate ASC;

 

执行结果:

sql server自定义排序 sql查询排序语句_sql server自定义排序_05

案例四、按表达式排序

按年薪的高低显示员工的信息和年薪。

代码:

SELECT
	*,
	salary*12*(1+IFNULL(commission_pct,0) ) AS 年薪
FROM
	employees
ORDER BY
	salary*12*(1+IFNULL(commission_pct,0)) DESC;

执行结果:

sql server自定义排序 sql查询排序语句_升序_06

 

年薪那个表达式写法解析:

salary*12*(1+IFNULL(commission_pct,0) ) AS 年薪

salary是薪水,乘以12是年薪,然后还有奖金率呢。因为奖金率commission_pct有NULL的情况,所以用到函数IFNULL,有两个参数:第一个是奖金率,第二个是若有NULL的情况返回什么值。最后AS是起别名。

案例五、按别名排序

按年薪的高低显示员工的信息和年薪。

还是上一题,我们给commission_pct取了一个别名“年薪”,那我们在后面排序的时候,能不能用这个别名呢?

代码:

SELECT
	*,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
	employees
ORDER BY
	年薪 DESC;

 

执行结果:

sql server自定义排序 sql查询排序语句_升序_07

我们可以看到,结果没有变。也是可以的。

说明ORDER  BY也支持别名。

案例六、按函数排序

按姓名长度来显示员工的姓名和工资

这道题要用到LENGTH函数:

sql server自定义排序 sql查询排序语句_字段_08

我们可以看到,LENGTH函数有一个参数,括号里面写的是要获取长度的字符。 

若我们写了“john”,就是4个长度。即返回字符的长度。

sql server自定义排序 sql查询排序语句_sql_09

 

现在我们返回的是姓名last_name。

代码:

SELECT
	LENGTH(last_name) AS 字节长度,
	last_name,
	salary
FROM
	employees
ORDER BY
	LENGTH(last_name) DESC;

执行结果:

sql server自定义排序 sql查询排序语句_sql server自定义排序_10

 

案例七、按多个字段排序

查询员工信息,要求先按工资升序,再按员工编号降序。

我们刚才几个案例,列表里面,只有一个。

现在我们这个里面既有工资,也有编号。也就是说要按多个字段排序。

代码:

SELECT
	*
FROM
	employees
ORDER BY
	salary ASC,
	employee_id DESC;

执行结果:

sql server自定义排序 sql查询排序语句_升序_11

我们还会发现,当工资相等的时候,按照编号降序排列:

 

sql server自定义排序 sql查询排序语句_数据库_12

 

四、特点

(1)ASC代表升序,DESC代表降序。若两个关键字都不写,则默认是升序。

(2)ORDER  BY 子句中可以支持单个字段、多个字段、表达式、函数、别名。

(3)ORDER  BY 子句一般是放在查询语句的最后面, limit 子句除外。

(4)ORDER  BY 执行顺序:FROM 表--->WHERE 筛选--->SELECT 查询列表--->ORDER  BY

五、测试题

测试题一

查询员工的姓名和部门编号和年薪,按年薪降序,按姓名升序。

考点:按多个字段进行排序。

代码:

select
	last_name,
	department_id,
	salary*12*(1+(IFNULL(commission_pct,0))) as 年薪
from
	employees
order by
	年薪 desc,
	last_name asc;

 

执行结果:

sql server自定义排序 sql查询排序语句_数据库_13

测试题二

选择工资不在8000到17000的员工的姓名和工资,按工资降序。

考点:排序+筛选

代码:

SELECT
	last_name,
	salary
FROM
	employees
WHERE
	#salary <=8000 and salary>=17000
	salary NOT BETWEEN 8000 AND 17000 
ORDER BY
	salary DESC;

执行结果:

sql server自定义排序 sql查询排序语句_sql_14

 

测试题三

查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序。

代码:

SELECT
	*,
	LENGTH(email)
FROM
	employees
WHERE
	email LIKE '%e%'
ORDER BY
	LENGTH(email) DESC,
	department_id ASC;

 

运行结果:

sql server自定义排序 sql查询排序语句_字段_15

好啦~这次的内容就分享到这儿了。


sql server自定义排序 sql查询排序语句_sql server自定义排序_16