MySQL基础教程:排序、限制与分组语句
MySQL基础教程:排序、限制与分组语句,当我们得到很长的一列数据时,可以把数据按指定的顺序输出。使用ORDERBY子句可以为数据进行排序。假设,我们想从数据库中查询威廉·莎士比亚(WilliamShakespeare)写的戏剧作品,可以输入如下SQL语句得到结果列表,并且将结果按照play标题排序:
- SELECT book_id, title, publisher
- FROM books
- JOIN authors USING(author_id)
- JOIN publishers USING(publisher_id)
- WHERE author_last = 'Shakespeare'
- AND genre = 'play'
- ORDER BY title, pub_year;
ORDERBY子句出现在WHERE子句的末尾。在这里,ORDERBY子句首先按照title列对数据进行排序,然后再按照pub_year列根据同一作品的出版年份再次对结果进行排序。默认情况下,数据是按照字母数字顺序升序排列的,如果我们想将结果按照标题降序排列,只需将DESC标记加在ORDERBY子句的title后面与pub_year之前的逗号处即可:
- ...
- ORDER BY title DESC, pub_year;
一个规模较大的书店中会有许多莎士比亚的戏剧作品,可能每个作品都有几个不同的印刷版。如果我想对显示的记录条数加以限制,则可在上面的SQL语句结尾处添加LIMIT子句:
- SELECT book_id, title, publisher
- FROM books
- JOIN authors USING(author_id)
- JOIN publishers USING(publisher_id)
- WHERE author_last = 'Shakespeare'
- AND genre = 'play'
- ORDER BY title DESC, pub_year
- LIMIT 20;
添加了LIMIT子句就把显示的记录限定在了20行以内,并从ORDERBY子句的排序结果集的第一行开始计数。如果想取回20行以后的10个记录,我们可以修改LIMIT子句指定需要跳过的行数,以及想要取回的记录数。因此,如果想跳过前20行,取回紧随其后的10个记录,可以用下面的内容替代SQL语句中的LIMIT子句:
- ...
- LIMIT 20, 10;
正如你所看到的,LIMIT子句带有二个参数,第一个参数表示将要略过的行数或取回数据的起始点(例如:20),第二个参数表示将要显示记录的行数(例如:10)。
如果我们只想得到莎士比亚的作品标题列表,而不关心出版发行商是谁(就是说,如果我们想让标题相同的一组数据只返回一行记录,一行记录就可以满足需求了),可以按照如下方式使用GROUPBY子句完成这项工作:
- SELECT book_id, title
- FROM books
- JOIN authors USING(author_id)
- WHERE author_last = 'Shakespeare'
- GROUP BY title;
上述SQL语句的执行结果就是数据库中莎士比亚的作品列表,显示的是查找到的每个标题下第一条记录的标识码。
-
标签错误:<!-- #Label#
labelId=20160707140604
moduleId=1
classId=12231768634
orderby=2
fields=url,title,u_info
attribute=
datatypeId=22192428132
recordCount=3
pageSize=
<htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate>
-->
- 我要参加技术沙龙