【三】排序检索数据 ORDER BY子句
作者:互联网
排序数据
子句(clause) SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。
SELECT prod_name
FROM Products
ORDER BY prod_name;
-- ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
注意:ORDER BY子句的位置 在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出错。
提示:通过非选择列进行排序 通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。
按多个列排序
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
重要的是理解在按多个列排序时,排序的顺序完全按规定进行。换句话说,对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。
按列位置排序
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY 2, 3;
-- ORDER BY 2表示按SELECT清单中的第二个列prod_price进行排序。ORDER BY 2,3表示先按prod_price,再按prod_name进行排序。
这一技术的主要好处在于不用重新输入列名。但它也有缺点。首先,不明确给出列名有可能造成错用列名排序。其次,在对SELECT清单进行更改时容易错误地对数据进行排序(忘记对ORDER BY子句做相应的改动)。最后,如果进行排序的列不在SELECT清单中,显然不能使用这项技术。
指定排序方向
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
-- 产品价格降序排序,产品名默认升序排序
警告:在多个列上降序排序 如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。
1. 编写SQL语句,从Customers中检索所有的顾客名称(cust_name),并按从Z到A的顺序显示结果。
SELECT cust_name
FROM Customers
ORDER BY cust_name DESC;
2. 编写SQL语句,从Orders表中检索顾客ID(cust_id)和订单号(order_num),并先按顾客ID对结果进行排序,再按订单日期倒序排列。
SELECT cust_id, order_num
FROM Orders
ORDER BY cust_id, order_date DESC;
3. 显然,我们的虚拟商店更喜欢出售比较贵的物品,而且这类物品有很多。编写SQL语句,显示OrderItems表中的数量和价格(item_price),并按数量由多到少、价格由高到低排序。
SELECT quantity, item_price
FROM OrderItems
ORDER BY quantity DESC, item_price DESC
4. 下面的SQL语句有问题吗?(尝试在不运行的情况下指出。)
SELECT vend_name,
FROM Vendors
ORDER vend_name DESC;
vend_name 后不应有逗号(逗号仅用于分隔多个列),并且 ORDER 后缺少了 BY。
标签:检索,prod,name,子句,排序,ORDER,SELECT 来源: https://www.cnblogs.com/endingwe/p/16400578.html