数据排序不限于升序排序(从A到Z) 。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字。
下面的例子按价格以降序排序产品(最贵的排在最前面) :
输入:
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC;
输出:
prod_id | prod_price | prod_name |
---|---|---|
JP2000 SAFE JP1000 ANV03 DTNTR TNT2 FB ANV02 0L1 ANV01 SLING FU1 FC TNT1 |
55.00 50.00 35.00 14.99 13.00 10.00 10.00 9.99 8.99 5.99 4.49 3.42 2.50 2.50 |
JetPack 2000 Safe JetPack 1000 2 ton anvil Detonator TNT (5 sticks) Bird seed 1ton anvil 0il can .5 ton anvil Sling Fuses Carrots TNT (1 stick) |
但是,如果打算用多个列排序怎么办?下面的例子以降序排序产品(最贵的在最前面) ,然后再对产品名排序:
输入:
SELECT prod_id,prod_price,prod_ name FROM products ORDER BY prod_price DESC,prod_name;
输出:
prod_id | prod_price | prod_name |
---|---|---|
JP2000 SAFE JP1000 ANV03 DTNTR TNT2 FB ANV02 0L1 ANV01 SLING FU1 FC TNT1 |
55.00 50.00 35.00 14.99 13.00 10.00 10.00 9.99 8.99 5.99 4.49 3.42 2.50 2.50 |
JetPack 2000 Safe JetPack 1000 2 ton anvil Detonator TNT (5 sticks) Bird seed 1ton anvil 0il can .5 ton anvil Sling Fuses Carrots TNT (1 stick) |
DESC关键字只应用到直接位于其前面的列名。在上例中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
在多个列上降序排序 如果想在多个列上进行降序排序, 必须对每个列指定DESC关键字。
与DESC相反的关键字是ASC (ASCENDING), 在升序排序时可以指定它。但实际上,ASC没有多大用处,因为升序是默认的(如果既不指定ASC也不指定DESC,则假定为ASC)。
区分大小写和排序顺序 在对文本性的数据进行排序时,A与a相同吗?a位于B之前还是位于Z之后?这些问题不是理论问题,其答案取决于数据库如何设置。
在字典 (dictionary) 排序顺序中, A被视为与a相同, 这是MySQL(和大多数数据库管理系统)的默认行为。但是,许多数据库管理员能够在需要时改变这种行为(如果你的数据库包含大量外语字符,可能必须这样做) 。
这里,关键的问题是,如果确实需要改变这种排序顺序,用简单的ORDER BY子句做不到。你必须请求数据库管理员的帮助。
使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。下面的例子演示如何找出最昂贵物品的值:
输入:
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
输出:
prod_price 55.00
prod_price DESC保证行是按照由最昂贵到最便宜检索的,而LIMIT 1告诉MySQL仅返回一行。
ORDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。