生活中我们通常要对物品进行排序,这就涉及到了order by与limit了。让我们看看什么是order by与limit
为了大家更好的理解,我将例子中需要的sql文件上传到了百度网盘,供大家食用。
链接:https://pan.baidu.com/s/1dqQS2sQj8QoCKi3UfN1wVA 密码:h7hh
1. order by子句
order by是对输出的数据进行排序。
格式:order by column;
举个栗子
mysql> # order by用法
mysql> # 将products中产品按价格从小到大排序
mysql> select vend_id,prod_name,prod_price from products
-> order by prod_price;
+---------+----------------+------------+
| vend_id | prod_name | prod_price |
+---------+----------------+------------+
| 1003 | Carrots | 2.50 |
| 1003 | TNT (1 stick) | 2.50 |
| 1002 | Fuses | 3.42 |
| 1003 | Sling | 4.49 |
| 1001 | .5 ton anvil | 5.99 |
| 1002 | Oil can | 8.99 |
| 1001 | 1 ton anvil | 9.99 |
| 1003 | Bird seed | 10.00 |
| 1003 | TNT (5 sticks) | 10.00 |
| 1003 | Detonator | 13.00 |
| 1001 | 2 ton anvil | 14.99 |
| 1005 | JetPack 1000 | 35.00 |
| 1003 | Safe | 50.00 |
| 1005 | JetPack 2000 | 55.00 |
+---------+----------------+------------+
14 rows in set (0.42 sec)
以上栗子看出,order by对原表的商品进行了价格上的排序,并且默认的是从小到大的排序。
如何从大到小的排序?在column后面加上关键字desc。
格式:order by column asc/desc;(asc为顺序排序,desc为逆序排序,不声明则默认为asc)
举个栗子
mysql> # order by用法之desc
mysql> # 将products中产品按价格从小到大排序
mysql> select vend_id,prod_name,prod_price from products
-> order by prod_price desc;
+---------+----------------+------------+
| vend_id | prod_name | prod_price |
+---------+----------------+------------+
| 1005 | JetPack 2000 | 55.00 |
| 1003 | Safe | 50.00 |
| 1005 | JetPack 1000 | 35.00 |
| 1001 | 2 ton anvil | 14.99 |
| 1003 | Detonator | 13.00 |
| 1003 | Bird seed | 10.00 |
| 1003 | TNT (5 sticks) | 10.00 |
| 1001 | 1 ton anvil | 9.99 |
| 1002 | Oil can | 8.99 |
| 1001 | .5 ton anvil | 5.99 |
| 1003 | Sling | 4.49 |
| 1002 | Fuses | 3.42 |
| 1003 | Carrots | 2.50 |
| 1003 | TNT (1 stick) | 2.50 |
+---------+----------------+------------+
14 rows in set (0.00 sec)
以上栗子看出,desc用来逆序排序。当价格相等时,我们想按照name的逆序来排序,如何做?
order by 后面可以接多个列名来依此对其进行排序。
格式:order by column1 asc/desc,column2 asc/desc, …;(先按column1排序,再按column2排序。。。)
举个栗子
ysql> # order by用法之按多个属性排序
mysql> # 将products中产品按价格从大到小排序,
mysql> # 价格一样的按产品名称逆序排序。
mysql> select vend_id,prod_name,prod_price from products
-> order by prod_price desc,prod_name desc;
+---------+----------------+------------+
| vend_id | prod_name | prod_price |
+---------+----------------+------------+
| 1005 | JetPack 2000 | 55.00 |
| 1003 | Safe | 50.00 |
| 1005 | JetPack 1000 | 35.00 |
| 1001 | 2 ton anvil | 14.99 |
| 1003 | Detonator | 13.00 |
| 1003 | TNT (5 sticks) | 10.00 |
| 1003 | Bird seed | 10.00 |
| 1001 | 1 ton anvil | 9.99 |
| 1002 | Oil can | 8.99 |
| 1001 | .5 ton anvil | 5.99 |
| 1003 | Sling | 4.49 |
| 1002 | Fuses | 3.42 |
| 1003 | TNT (1 stick) | 2.50 |
| 1003 | Carrots | 2.50 |
+---------+----------------+------------+
14 rows in set (0.00 sec)
2. limit子句
limit子句很简单,就是用来限制结果的。对结果取特定的行来返回。
格式:limit [offset,N];
解释:offset为偏移量,N是返回的个数。一般搭配order by使用。也可以不写offset,则默认为0。
举两个栗子
mysql> # limit用法
mysql> # 从products表中取出最贵的5种产品
mysql> select vend_id,prod_name,prod_price from products
-> order by prod_price desc limit 5;
+---------+--------------+------------+
| vend_id | prod_name | prod_price |
+---------+--------------+------------+
| 1005 | JetPack 2000 | 55.00 |
| 1003 | Safe | 50.00 |
| 1005 | JetPack 1000 | 35.00 |
| 1001 | 2 ton anvil | 14.99 |
| 1003 | Detonator | 13.00 |
+---------+--------------+------------+
5 rows in set (0.00 sec)
mysql> # 从products表中取出第三到第五便宜的产品
mysql> select vend_id,prod_name,prod_price from products
-> order by prod_price desc limit 2,3;
+---------+--------------+------------+
| vend_id | prod_name | prod_price |
+---------+--------------+------------+
| 1005 | JetPack 1000 | 35.00 |
| 1001 | 2 ton anvil | 14.99 |
| 1003 | Detonator | 13.00 |
+---------+--------------+------------+
3 rows in set (0.00 sec)
tips
- 至此,表查询的五种子句就学习完毕了。分别是where、group by、having、order by、limit。
- 五种子句在使用时是有先后顺序的,就是按照我们学习的顺序来的。分别为where、group by、having、order by、limit。如果顺序出现错误,就会出现语法错误。
如果想看其他有关于MySQL数据库的文章,请跳转到到MySQL自学目录