MySQL培訓教程:排序、限制與分組命令
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢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語句的執行結果就是數據庫中莎士比亞的作品列表,顯示的是查找到的每個標題下第一條記錄的標識碼。