SQL ORDER BY 多列排序

SQL ORDER BY 多列排序

  • SQL ORDER BY 多列排序的使用

SQL ORDER BY 多列排序的使用

最近学习My Sql的时候对order by的多列排序逻辑不是很清楚,查阅了一些资料加上自己动手做了几个小实验清楚了不少,本结论仅适用于实验条件下成立(列值为 int)先上结论:
如:order by 列名1,列名2,列名3…;
若列名后不加限制条件,将直接按照离order by语句最近的无限制条件的列名排序,即列名1,排序方式默认升序。
如:SELECT * FROM 表名 ORDER BY 列名1>5,列名2;,将按照列名2的值进行排序,而列名1>5的作用是分组,输出结果将按照:列名1值<=5为第一组,列名1>5为第二组的方式,分成两组,两组分别按照列名2的值进行排序,下面以代码为例具体说明:

//建立一个无序表这样更能看出实验结果
create table test (
a int,
b int,
c int
);
insert into test (a,b,c)values
(9,4,78),
(2,7,80),
(3,9,81),
(7,2,60),
(5,4,82),
(4,3,72),
(8,5,41),
(1,8,59),
(6,1,46);
//一、未加条件
	//1
	select * from test order by a;
	//2
	select * from test order by a,b;
	//3
	select * from test order by a,b,c;
	//以上三种情况运行结果均相同,以a的值为依据升序排列
//二、增加条件
	//1
	select * from test order by a>5;
		//将初始表直接分为两组a<=5在前,a>5在后,各组内先后顺序同初始表
	//2
	select * from test order by a>5,b;
		//将初始表直接分为两组a<=5在前,a>5在后,与1情况不同的是各组内以b的值为依据升序排列
	select * from test order by a>5,b>5,c;
		//将初始表直接分为两组a<=5在前,a>5在后,在第一个分组a<=5中,再次按b<=5,b>5分组,组内顺序以c的值为依据升序排列,a>5同上
	select * from test order by a>5,b>5,c>60;
		//将初始表直接分为两组a<=5在前,a>5在后,在第一个分组a<=5中,再次按b<=5,b>5分组,在b的每一个分组内再次分组,分组内顺序按照表的初始定义顺序排序

以上就是本次实验的全部过程,有兴趣的同学可以直接试一下运行结果,如有不足欢迎批评指正.

你可能感兴趣的:(SQL ORDER BY 多列排序)