ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【三】排序检索数据 ORDER BY子句

2022-06-22 15:36:15  阅读:172  来源: 互联网

标签:检索 prod name 子句 排序 ORDER SELECT


排序数据

子句(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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有