MySQL中排序数据查询结果通过SQL语句order by关键字来实现。
语法:
select field1 field2 …… fieldn from table_name where condition order by fieldm1 [asc|desc], [fieldm2 [asc|desc],]
说明:
(1) 参数asc表示升序排列,desc表示降序排列;
(2) 关键字order by后面可以设置多个不同的字段进行排序。
- 按照单字段排序
- 按照多字段排序
限制数据记录查询时因为当条件查询时,有时所查询到的数据记录太多,如果全部显示出来则不符合实际需求,此时就可以通过限制查询结果的数据记录的数量来控制。
限制数据记录查询的数量通过关键字limit来实现。
语法:
select field1 field2 …… fieldn from table_name where condition limit offset_start, row_count;
根据是否制定初始位置(起始偏移量) ,关于限制数据查询结果数量语句可以分为如下两类:
- 不指定初始位置方式
- 指定初始位置方式
10.1 按照单字段排序
(1)升序排序
例如:查询员工薪水,并按升序排列
mysql> select * from employee order by salary asc;
(2)降序排序
例如:查询员工薪水,并按降序排列
mysql> select * from employee order by salary desc;
10.2 按照多字段排序
例如:查询员工薪水(升序排列),入职日期(降序排列)
mysql> select * from employee order by salary asc, Hiredate desc;
说明:
查询结果都是先按照字段salary的值从小到大进行排序,当遇到值相同的数据记录时,则按照字段Hiredate的值进行从大到小排序。
10.3 不指定初始位置
说明:如果不指定初始位置,默认值为0,即表示从第一条记录开始显示。
(1)显示记录数小于查询结果
首先我们在原先的员工数据表中薪水字段后面增加一个字段bonus(奖金),如下:
mysql> alter table employee add bonus int after salary;
Query OK, 8 rows affected (0.18 sec)
Records: 8 Duplicates: 0 Warnings: 0
然后,我们查询字段bonus值为null的数据记录,并且只显示两条查询结果:
mysql> select * from employee where bonus is null limit 2;
(2)显示记录数大于查询结果
从上面的表中,我们可以看到,符合bonus的值为null的数据记录有8条,如果我们设置关键字row_count参数大于8时,会出现什么效果?
mysql> select * from employee where bonus is null limit 10;
从查询结果来看,虽然要求显示的查询结果数量是10,但是查询结果总数才8,所以此时如果要求显示记录数大于查询结果时,只会显示所有查询结果。
10.4 指定初始位置
例如:查询字段bonus为空的员工(从第2条记录开始的6条记录),然后对排序结果根据入职时间(Hiredate)从早到晚排序进行显示。
mysql> select * from employee where bonus is null order by Hiredate limit 1, 6;