初步体会:现在叫飞鹰小学5年2班的学生到操场上排成一对,此时没有人会认为他们会按照年龄排队,或者按照身高排队,或者按照女生在前面男生在后面排队的。
查询数据:如果只是使用SELECT语句查询出特定列的数据,就和让孩子们排队差不多,你不知道数据库数据库查询出来的数据是以什么顺序进行排列显示的。也许是按照当初将数据添加到表中的顺序,也许是按照其他的顺序。因此如果不明确规定排序顺序,那么就不应该假定检索出来的数据的书序是有意义的。
不指定排序查询商品名称:SELECT prod_name FROM Products;
1.使用单列进行排序
如果对检索出来的数据进行排序,如何进行呢?
比如现在叫飞鹰小学5年2班的学生到操场上按照身高从低到高排成一队。
使用ORDER BY子句,ORDER BY子句取1个或多个列的名字,以此对检索出来的数据进行排序。
排序查询商品名称:SELECT prod_name FROM Products ORDER BY prod_name;
以字母顺序进行数据排序,可以和不排序查询进行比较。
注意事项:看上面结果排序字段是使用被查询的字段prod_name,但误解为排序字段只能使用查询的字段,可以使用非查询的列进行数据排序。
比如:SELECT prod_name FROM Products ORDER BY prod_price;
在此案例中,使用排序的字段就是非查询字段,因此排序字段和被查询字段是没有必然联系的,只能和具体业务要求有关系。
2.按照多个列进行排序
首先按照多个列排序和SELECT中查询多个字段写法相同,就是在字段中间使用分号分割开来。
比如现在叫飞鹰小学5年2班的学生到操场上身高从低到高排成一队,如果身高相同,那么按照年龄从小到大排序。
根据商品价格和商品名称进行排序:SELECT prod_name FROM Products ORDER BY prod_price, prod_name;
结果说明:ORDER BY后面有多个字段,那么是有优先顺序的。
比如上图首先使用价格排序,价格相同使用商品名称排序,商品名称再相同那么mysql使用自己的规则进行排序。但是如果商品价格都不同,那么就会采用商品价格进行排序,而商品名称排序则不会使用!后面的排序字段只是当签名字段无法进行排序后的补充手段而已,如果前面排序字段可以进行排序,则不需要后面的排序字段发挥作用!
3.指定排序方向
在计算机世界的排序只有从小到大或从大到小的排序,按照价格从小到大还能明白,按照时间从小到大排序就可能乱了,按照文字从小到大就崩溃了,人可能会崩溃,但是计算机不会,计算机会按照特定逻辑从小到大。时间早的就小,时间晚的就大。
上面的SQL案例中,我们并没有明确说明是按照从小到大还是从大到小排序。
MySql如何进行排序呢?默认排序方式是升序排列,使用关键字ASC;如果进行降序排列,使用关键字DESC。
查询情景:查询商品Id、商品价格、商品名称,并且按照商品价格进行降序排列。
SQL1:查看下按照商品价格升序排列情况。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price ;
SQL2:查看下按照商品价格降序排列情况。
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;
通过SQL1和SQL2可知,两者查询出来的顺序是截然相反的。
4.按照多个字段排序
打算用多个字段排序如何进行呢?
查询情景:查询商品Id、商品价格、商品名称,并且按照商品价格进行降序排列,按照商品名称升序排列。
SQL:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name ASC;
结果说明:在多个列上进行降序排列,那么必须要对每个列指定DESC关键字;对于升序操作,可以不用指定ASC,默认就是升序操作。
5.ORDER BY和LIMIT组合使用
使用场景:查询出来某个列中最大值或者最小值。
使用分析:使用ORDER BY进行排序,然后使用LIMIT拿出来最大值或者最小值,LIMIT 1即可。
查询场景:查询商品表中商品价格最高的价格是多少。
查询SQL:SELECT prod_price FROM Products ORDER BY prod_price DESC LIMIT 1;
分析结果:
1.第一条SQL使用价格字段进行降序排列,得到了目标数据,但是还有很多不想要的数据。
2.第二条SQL使用价格字段进行降序排列,同时限定返回值是行0,得到目标数据。
6.ORDER BY和LIMIT顺序
类比现实:飞鹰小学5年2班的学生,在班级内部按照身高从高到低排成一对,选择队列中前5人去操场。
个人分析:没有深入数据库了解,排序也是查询部分,而LIMIT是取值部分,如果取值之前必须进行查询完成。