COUNT(*) 函數返回在給定的選擇中被選的行數。
語法:SELECT COUNT(*) FROM table
使用:現在有一個表,名叫app_category,從Navicat中可以看到表中所有數據,如圖所示,可見表中有297條數據
使用count函數的時候可以看到:
當然僅僅是這個樣子,是木有意義的,我用個可視化工具一眼看穿,要這個函數就顯得雞肋了,那么我們繼續往下看。
場景是這樣的:表app_category與表category關聯。且表間關系是一對多,即同一個app_category_id 對應多個category-id,現在我需要統計出每一個category_id在app_category表中出現的次數那么該如何實現呢,請看接下來的操作:
這樣依然有點不夠酷炫,那么我們還可以在后面繼續追加sql語句呀
例如這條語句:
SELECT category_id ,COUNT(*) AS count FROM app_category
GROUP BY category_id HAVING count(category_id) >2
其查詢的結果是只有count的值大於2 的時候,才是需要的結果
是不是有點小先進了,當然不要激動,我們還可以把這個查詢的結果作為子查詢,進行嵌套查詢,兩個表關聯查詢然后再嵌套查詢等等。這里我就不過多截圖,上一個開發商城項目中用到的查詢語句:
SELECT ps.name FROM property_set ps , category_property_set cps WHERE ps.id=cps.property_set_id AND category_id=(
SELECT category_id AS count FROM category_property_set
GROUP BY category_id HAVING count(category_id) <5
)
大眼一看,可能比較懵逼,聽我分析一下:
首先是子查詢:SELECT category_id AS count FROM category_property_set
GROUP BY category_id HAVING count(category_id) <5
查出category_property_set 表中category_id出現次數小於5的那個category_id的具體的值,剛好得到的結果是只有一條,那么滿足嵌套查詢的條件,用到<,>=等符號時,子查詢結果必須唯一,所有給其添加到外部查詢,其實等價於這樣一條語句:
SELECT ps.name FROM property_set ps , category_property_set cps WHERE ps.id=cps.property_set_id AND category_id=925640926728343552
不用懷疑,這個category_id就是查詢出來的ID,然后這又是一個最最基本的兩表聯合查詢,連個外聯內聯都沒用,然后結果就是這個樣子
啊哈,剛好就是我需要的一個名稱,為啥這麻煩呢,因為表建的不好唄,需要通過category_id 查category_property_set表,然后再通過結果去查property_set表,最后得到屬性的名字,然后就只能想辦法在sql語句上下功夫了呀。
當然,看完有可能還是蒙蔽的。不要虛,看這個
http://www.w3school.com.cn/sql/sql_func_count_ast.asp
這個網址里面的東西看完了,保證啥查詢語句都難不倒你了。說完收工