3.1 排序数据
子句(clause): SQL语句由子句构成,有些子句是必须的,有些是可选的。一个子句通常是由一个关键字加上所提供的数据组成。子句的例子有我们前一课看到的SELECT语句的FROM子句。
我们使用ORDER BY对表的某一列进行排序:
SELECT
*
FROM
sorm.emp
ORDER BY
salary;
这里所指定的列是salary是数字类型,系统会按数字的从小到大的顺序来从上往下排列
如果所指定的为字符类型,会按照首字母的顺序排列。
注意: 在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。不然会报错。
3.2 按多个列排序
当你对图书的价格进行排序的同时,对于相同价格的书你又想对名称进行排序该怎么操作呢?
输入:
SELECT book_id, book_price, book_name
FROM book_store
ORDER BY book_price, book_name;
输出:
book_id book_price book_name
---------------------------------
3 67 a
2 67 b
6 67 c
1 88 x
5 88 y
4 99 d
对于ORDER BY后面的列名,靠前的先排序。
3.3 按列位置排序
对于上面的对书的双层排序,可以按列的相对位置来完成
输入:
SELECT book_id, book_price, book_name
FROM book_store
ORDER BY 2, 3;
输出:
book_id book_price book_name
---------------------------------
3 67 a
2 67 b
6 67 c
1 88 x
5 88 y
4 99 d
一样的结果。
这里的相对位置排序的相对位置并不是列名在表的第几个位置(位置从1开始,不是0),而是查询语句SELECT后面的列名的那个顺序的相对位置。
注:可混合使用按名和按相对位置的排序。
3.4 指定排序方向
数据的排列不限于升序排列(从A到Z),这只是默认的排列顺序。要对其进行降序排列要借助DESC关键字。
输入:
SELECT book_id, book_price, book_name
FROM book_store
ORDER BY book_id DESC;
输出:
book_id book_price book_name
---------------------------------
6 67 c
5 88 y
4 99 d
3 67 a
2 67 b
1 88 x
警告: 如果想在多个列上进行降序排列,必须对每一列指定DESC关键字。
例如
SELECT book_id, book_price, book_name
FROM book_store
ORDER BY book_id DESC, book_name DESC;
对book_id进行降序,对book_name进行升序排列:
SELECT book_id, book_price, book_name
FROM book_store
ORDER BY book_id DESC, book_name;
DESC是descending的缩写,与DESC相对的是ASC(ascending),在升序排列时可指定它,ASC没有多大的用处,因为升序是默认的。
descending [dɪ’sendɪŋ] adj 下降的
ascending [ə’sendɪŋ] adj 上升的
提示: 区分大小写和排列顺序,在对文本型数据排列时,A与a相同吗? a位于B之前,还是Z之后?
其答案取决于数据库的设计方式。在字典里A被视为与a相同,这是大多数数据管理系统的默认行为。