一、简介
经常用Excel的朋友就明白,很多时候我们为了更直观的查看表格的某一些数据,经常都会用到排序这一功能。同样的,在SQL中也有排序这一功能,叫ORDER BY字句,原理很简单,就是将SELECT语句检索出来的数据按照特定的要求进行排序。
二、常用语法
1、实例
有一个人员信息表,表名称Prodrate、主要的列有(id、LastName、FirstName、age、class等字段)
01 我们先来看一个没有使用ORDER BY字句进行排序的查询结果
输入
SELECT Lastname FROM Prodrate
输出结果
说明
其实,检索查询出来的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。
02 下面我们看一下使用了ORDER BY字句排序后Lastname列中的数据显示结果
输入
SELECT Lastname FROM Prodrate
ORDER BY Lastname
输出结果
说明
通过上图我们可以看出,使用了ORDER BY子句后的查询结果是按字母顺序和相同的字符进行排序的,这样的查询结果看上去特别舒服。注意:在指定ORDER BY子句时,应保证它是SELECT语句中最后一条语句,否则会报错。
二、ORDER BY子句应用场景
01 指定排序方向
描述:和Excel一样SQL也有升序和降序两种排序。
关键字:DESC
语法:SELECT 列名 FROM 表 ORDER BY 指定列名
问题:查询实例中的Prodrate表,将age字段中的学生年龄按降序来排序,最大的年龄值显示在最上面;
输入
SELECT age FROM Prodrate
ORDER BY age DESC
输出结果
分析
通过查询结果可以看出,使用了DESC关键字后,查询结果以降序的方式进行排序,这里需要特别说明一点,DESC相对应的另外一个关键字ASC是升序,但是它并没有使用的意义,因为使用ORDER BY字句时它是默认按升序来显示查询结果的。
02 按多个列排序
描述:前面我们用的ORDER BY字句都是按单个列排序的,但它并不只有单列排序,还可以多列排序。
语法:SELECT 列名1,列名2 FROM 表 ORDER BY 指定列名1,指定列名2
问题:查询实例中的Prodrate表,将LastName、FirstName、age这3个字段中的数据显示出来并按升序方式进行排序
输入
SELECT LastName,FirstName,age FROM Prodrate
ORDER BY LastName,FirstName,age
输出结果
分析
这里需要明白一点,当你对多列数据进行排序时,它的排序规则是按顺序和规定进行的。
对于上述例子中的输出,只有当第一列的数据相同时,第二列的数据才会发生改变。
例如,LastName列中第一行和第二行的数据不同,系统则不会按第二和第三列的数据去排序,而是按第一列的数据规则进行排序,所以age第一行和第二行的数据没有升序。
又例如,LastName列中第3行的数据相同,但两个Yao是哪个放上面呢,就得看第二列的数据规则了,如果第二列不同,则按第二列的规则进行排序,相同则按第三列的规则进行排序,当然,如果第一列和第二列的所有值都是唯一的,第三列的数据则不会发生改变。
03 按列位置排序
描述:这个和按指定列排序是一样的结果,好处就是不用重复输入列名,直接用数字1234来代表列的位置,但缺点是如果列发生改变,就要更改数字,如果忘记,将会导致排序不规范、错误等问题。
语法:SELECT 所有列 FROM 表 ORDER BY 2,3
问题:查询实例中的Prodrate表所有列,仅对第2和第3列数据进行排序
输入
SELECT * FROM Prodrate
ORDER BY 2,3
输出结果
分析
ORDER BY 2,3的排序顺序是先对第二列LastName的数据进行排序,然后再对第3列FirstName的数据进行排序。这里需要注意一个问题ORDER BY 2,3指定的位置是按照你查询的列进行指定的,如果你查询的是一个列,然后指定二个列,查询结果会报错。例如:SELECT LastName FROM Prodrate ORDER BY 2,3这是个错误的语法。
三、总结
好了,以上是SQL排序语句的使用方法,是比较简单的一个语法,如有不懂的可以留言请教!更多SQL语法的使用持续更新中,敬请期待!
当然,在日常工作中我们也要养成良好的习惯,在每条查询语句末端都加个ORDER BY排序语句,这样检索出来的数据更直观,更具有分析价值。