MySQL-ORDER BY和LIMIT
时间:2020-02-23 14:41:03 来源:igfitidea点击:
在本教程中,我们将学习在MySQL中排序和限制结果。
排序
我们使用" ORDER BY"将结果基于某个或者多个列以升序和降序排序。
默认情况下,ORDER BY将结果按升序排序。
为了对结果进行降序排序,我们使用DESC
关键字。
使用单列按升序排序
在下面的示例中,我们基于" employee"表的" firstname"列以升序对结果进行排序。
mysql> SELECT * FROM employee ORDER BY firstname; +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | e05 | Bob | Coder | [email protected] | 7 | 1900-08-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:10 | | e03 | Jane | Doe | [email protected] | 9 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e04 | Tin | Tin | [email protected] | 6 | 1900-10-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:03 | | e01 | | | @example.com | 7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ 5 rows in set (0.00 sec)
注意!我们还可以添加ASC
关键字,我们将获得与上述相同的结果。
但这是可选的。
mysql> SELECT * FROM employee ORDER BY firstname ASC;
使用单列按降序排序
在下面的示例中,我们将使用" employee"表的" firstname"列按降序对结果进行排序。
mysql> SELECT * FROM employee ORDER BY firstname DESC; +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | e01 | | | @example.com | 7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 | | e04 | Tin | Tin | [email protected] | 6 | 1900-10-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:03 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e03 | Jane | Doe | [email protected] | 9 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e05 | Bob | Coder | [email protected] | 7 | 1900-08-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:10 | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ 5 rows in set (0.00 sec)
使用多列排序
在下面的示例中,我们基于"得分","名字"和"姓氏"列从"雇员"表中对员工详细信息进行排序。
我们将基于score
对结果进行降序排序。
如果两个或者两个以上员工的分数相同,则我们将按其姓氏和名字的升序对结果进行排序。
mysql> SELECT * FROM employee ORDER BY score DESC, firstname ASC, lastname ASC; +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | e03 | Jane | Doe | [email protected] | 9 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e05 | Bob | Coder | [email protected] | 7 | 1900-08-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:10 | | e01 | | | @example.com | 7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 | | e04 | Tin | Tin | [email protected] | 6 | 1900-10-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:03 | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ 5 rows in set (0.00 sec)
限制
我们使用LIMIT关键字来限制运行查询时获取的行数。
限制行
语法:
SELECT column_name FROM table_name LIMIT row_count;
其中" row_count"是非负整数值。
在下面的示例中,我们限制从"员工"表中仅获取3行。
mysql> SELECT * FROM employee LIMIT 3; +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | e01 | | | @example.com | 7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e03 | Jane | Doe | [email protected] | 9 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ 3 rows in set (0.01 sec)
用偏移量限制行
语法:
SELECT column_name FROM table_name LIMIT offset, row_count;
其中" offset"和" row_count"是非负整数值。
" offset"是要返回的第一行的偏移量," row_count"是要返回的行的总数。
注意!初始行的偏移量为0。
我们的"员工"表包含5行。
在下面的示例中,我们将分两页读取它,每页最多可容纳3行。
因此,对于第一次提取,我们将使用" LIMIT 0,3",它将返回employee表的前3行。
在下一个调用中,我们将使用LIMIT 3,3,它将返回employee表的下2行。
适用于:LIMIT 0、3
mysql> SELECT * FROM employee LIMIT 0, 3; +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | e01 | | | @example.com | 7 | 1900-01-01 | 2016-02-04 06:08:10 | 2016-01-01 01:01:01 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | | e03 | Jane | Doe | [email protected] | 9 | 1900-05-20 | 2016-02-04 06:08:10 | 2016-01-01 01:01:04 | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ 3 rows in set (0.00 sec)
适用于:LIMIT 3、3
mysql> SELECT * FROM employee LIMIT 3, 3; +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ | e04 | Tin | Tin | [email protected] | 6 | 1900-10-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:03 | | e05 | Bob | Coder | [email protected] | 7 | 1900-08-20 | 2016-02-04 06:08:10 | 2016-01-01 01:02:10 | +------------+-----------+----------+----------------------+-------+------------+---------------------+---------------------+ 2 rows in set (0.00 sec)