SQL

SQL 知识量:22 - 44 - 129

3.1 按列名排序><

默认排序- 3.1.1 -

使用查询语句查询数据时,如果没有明确指定数据的排序规则,那么返回的数据将按照数据库设置的默认排序规则进行排序,有可能是按照数据在底层表中出现的顺序显示,也有可能是按照数据最初添加到数据表中的顺序。

例如:查询学生表,按表数据默认排序显示。

select * from student;

查询结果:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  1 | Susan  |  11 | female |
|  2 | Jame   |  12 | male   |
|  3 | Bob    |  11 | male   |
|  4 | Robot  |  10 | male   |
|  5 | Jen    |  11 | female |
|  6 | Toney  |  10 | male   |
|  7 | Jack   |  13 | male   |
|  8 | Alice  |  10 | female |
|  9 | Bonnie |  11 | male   |
| 10 | Ella   |  12 | female |
+----+--------+-----+--------+

以上结果是按照数据最初添加到数据表中的顺序显示的,因为id的排序是从1到10。

需要注意的是:不能依赖数据库的默认排序,因为不确定性,这种排序是没有意义的。应该总是对查询的数据进行指定排序,这需要使用order by子句。

按单个列排序- 3.1.2 -

使用order by子句可以按照某个列进行排序。

例如:查询学生表,按照年龄排序。

select * from student order by age;

查询结果:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  4 | Robot  |  10 | male   |
|  6 | Toney  |  10 | male   |
|  8 | Alice  |  10 | female |
|  1 | Susan  |  11 | female |
|  3 | Bob    |  11 | male   |
|  5 | Jen    |  11 | female |
|  9 | Bonnie |  11 | male   |
|  2 | Jame   |  12 | male   |
| 10 | Ella   |  12 | female |
|  7 | Jack   |  13 | male   |
+----+--------+-----+--------+

以上结果按照年龄age进行了排序,但是如果想要在此基础上进一步再对姓名排序,就可以同时按照两个列进行排序,即按多个列排序。

按多个列排序- 3.1.3 -

按多个列排序时,只需要依次指明排序的列名即可,多个列名之间使用逗号分隔。

例如:查询学生表,按照年龄和姓名排序。

select * from student order by age,name;

查询结果:

+----+--------+-----+--------+
| id | name   | age | sex    |
+----+--------+-----+--------+
|  8 | Alice  |  10 | female |
|  4 | Robot  |  10 | male   |
|  6 | Toney  |  10 | male   |
|  3 | Bob    |  11 | male   |
|  9 | Bonnie |  11 | male   |
|  5 | Jen    |  11 | female |
|  1 | Susan  |  11 | female |
| 10 | Ella   |  12 | female |
|  2 | Jame   |  12 | male   |
|  7 | Jack   |  13 | male   |
+----+--------+-----+--------+

以上查询先按照年龄进行排序,然后对具有相同年龄的行再按照姓名进行排序。

注意:按多个列排序时,指明排序的列的顺序十分重要,数据库会按照先后顺序进行排序,例如:按照A列,B列排序,只有在按照A列进行排序后,多行具有相同(A列)值时,才对这些具有相同值的行进行下一个列(B列)的排序。