select的5中子句where,group by, havaing, order by, limit的使用順序及實例


-- 語法:

SELECT select_list    
FROM table_name   
[ WHERE search_condition ]   
[ GROUP BY group_by_expression ]   
[ HAVING search_condition ]   
[ ORDER BY order_expression [ ASC | DESC ] ] 
[limit m,n] 

  

  
-- 示例:
-- limit 0,10是從第一條開始,取10條數據
select classNo  from table_name  
group by classNo   
having(avg(成績)>70) 
order by classNo  
limit 0,10

  

 
說明:

1.where 

where后跟條件用來篩選我們所需的行。它后面可以跟的操作符有=、!=、<、>、<=、>=、 in、 like(可以和通配符%結合一起用,效果將會更好) 、between....and........ AND、OR 、NOT 

如:select id,name,score form student where score in (每組里面的最高分組合); 

2.group by(GROUP BY 語句用於結合合計函數(也叫聚合函數sum count avg max min),根據一個或多個列對結果集進行分組。否則沒有多大的意義)

group by 有一個原則,就是 select 后面的所有列中,沒有使用聚合函數的列,必須出現在 group by 后面
如:我們對文字的分類id進行分組,查詢每組分類的文章數 select articlecategory_id,count(*) from article group by articlecategory_id;
再次提示:
如果你使用了group by,而沒有相應的使用聚合函數那么結果就沒有意義了,按照實際情況來思考的話就變成了一對多了(也就是一個分組對應多個對象(也就是多行),那么一個分組對應多行數據的顯示就變成了分組和第一行數據進行顯示了,所以此時我們應該使用聚合函數(聚合函數就是把多個變成一),也就是對多行數據進行篩選,得到我們想要的數據,如:可以使用count計算論壇小組總帖子數,可以使用sum來計算
論壇小組帖子總回復數,可以使用max來計算論壇小組最多回復的帖子,可以使用min來計算論壇小組最少回復數(沒有多大意義,商城最便宜的商品就意義了),可以使用avg來計算論壇每周的平均訪問量(商城所有商品的平均價格)等。
 
          

3.having 這個是針對查詢的結果進行作用,只能對結果擁有的列進行操作,與where不同的是where是針對原表(就是from后面的那張表的字段)發揮作用。其中having里面可以使用聚合函數。為group by子句設置條件,類似於where為select語句設置條件的方法。having的查找條件可以包括集合函數表達式。除此之外,它的查找條件與where查找條件相同。

select articlecategory_id,count(*) from article group by articlecategory_id having count(*)<5;

4.order by 排序 (可以對多個字段進行排序)

可以針對字段進行排序,order by 字段1 [asc] 升序,[desc] 降序

5.limit 獲取條目的限定

語法 limit offset,N

limit 5 《====》 limit 0,5;

總結:where是針對from后面跟的表進行處理,而group by having order by limit則是針對select后面的字段進行處理。從它們的結構角度來看則:先整體后部分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM