该文章中使用的数据表创建于我的另一篇博客
点击前往
1、排序数据
如果不排序,数据一般将以他在表中出现的顺序显示。
关系数据库设计理论认为,
如果不明确规定排列顺序,则不应该假定检索出的数据的顺序有任何意义
为了明确排序用select语句检索出的数据,可使用order by子句。
order by子句取一个或多个列的名字,据此对输出进行排序:
select 身高 from 学生表 order by 身高
执行以上代码后,查询表可得结果:
由结果可以看出该表进行升序排列
注意:
1、在指定一条order by 子句是,应该保证他是select语句中最后一条子句。如果不是最后一条子句,将会出错。 2、通常,order by 子句中使用的列将是为显示而存在的列,但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。
2、按多个列排序
为更好展示多个列排序效果,对表的数据进行添加,代码如下:
alter table 学生表 add 团员 nchar(1) check(团员 = 1 or 团员 = 0)
update 学生表 set 团员 = 1 where 姓名 ='李明'
update 学生表 set 团员 = 1 where 姓名 ='李红'
update 学生表 set 团员 = 0 where 姓名 ='李亮'
update 学生表 set 团员 = 0 where 姓名 ='大红'
update 学生表 set 团员 = 0 where 姓名 ='小红'
insert 学生表(姓名,性别,身高,团员)
values('杨亮','男',1.75,0)
执行以上代码后,查询表可得结果:
要按多个列排序,只要指定这些列明,列明之间用逗号隔开即可(就像选择多个列时那样)。
select 团员,身高 from 学生表 order by 团员,身高
执行以上代码后,可得结果:
在以上的输出结果中,仅在多个行具有相同的团员列值时才对身高进行排序。
如果团员列所有值都是唯一的,则不会按身高列排序
3、按列位置排序
除了能用列名指出排序顺序外,order by 还支持按相对列位置进行排序:
select 姓名,身高,团员 from 学生表 order by 3,2
执行以上代码后,可得结果:
order by 2,表示按照select清单中的第二个列身高进行排序
order by 3,表示按照select清单中的第三个列团员进行排序
优点:
不用重新输入列名
缺点:
1、不明确给出列名可能造成错用列名排序 2、对select清单进行更改时容易错误地对数据进行排序 3、如果进行排序的列不在select清单中,不能使用这项技术
4、指定排序方向
默认排序序列为升序序列(如果既不指定ASC也不指定DESC,则假定为ASC)
单个列排序
select 身高 from 学生表 order by 身高 asc
select 身高 from 学生表 order by 身高 desc
执行以上代码后,可得结果: 多个列排序
select 团员,身高 from 学生表 order by 团员 desc,身高
执行以上代码后,可得结果: 观察截图可得:
desc关键字只应用到直接位于其前面的列名
select 团员,身高 from 学生表 order by 团员 desc,身高 desc
执行以上代码后,可得结果: 注意:
如果想在多个列上进行降序排序,必须对每一列指定DESC关键字
5、全部代码
select *from 学生表
select 身高 from 学生表 order by 身高
alter table 学生表 add 团员 nchar(1) check(团员 = 1 or 团员 = 0)
update 学生表 set 团员 = 1 where 姓名 ='李明'
update 学生表 set 团员 = 1 where 姓名 ='李红'
update 学生表 set 团员 = 0 where 姓名 ='李亮'
update 学生表 set 团员 = 0 where 姓名 ='大红'
update 学生表 set 团员 = 0 where 姓名 ='小红'
insert 学生表(姓名,性别,身高,团员)
values('杨亮','男',1.75,0)
select 团员,身高 from 学生表 order by 团员,身高
select 姓名,身高,团员 from 学生表 order by 3,2
select 身高 from 学生表 order by 身高 asc
select 身高 from 学生表 order by 身高 desc
select 团员,身高 from 学生表 order by 团员 desc,身高
select 团员,身高 from 学生表 order by 团员 desc,身高 desc
|