淺析SQL的排序,分組,統(tǒng)計(jì)常用語句_Mssql數(shù)據(jù)庫教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:揭秘SQL Server視圖使用中4個(gè)限制條件SQL Server的 視圖可以起到數(shù)據(jù)保密、保證數(shù)據(jù)的邏輯獨(dú)立性、簡化查詢操作等等作用。但是視圖跟表這個(gè)基本對象還是有重大的區(qū)別,在使用視圖的時(shí)候,需要遵守4大限制。 限制條件一:定義視圖的查詢語句中不能夠使用某些關(guān)鍵字 我們都知道,視圖其實(shí)就是一組
1.使用排序使數(shù)據(jù)有序通常,你的所有數(shù)據(jù)真正需要的僅僅是按某種順序排列。SQL的ORDER BY語句可以以字母或數(shù)字順序組織數(shù)據(jù)。因此,相似的值按組排序在一起。然而,這個(gè)分組時(shí)排序的結(jié)果,并不是真的分組。ORDER BY顯示每條記錄而分組可能代表很多記錄。
2.進(jìn)行分組除去重復(fù)值
排序和分組之間的最大區(qū)別是:排序的數(shù)據(jù)顯示所有記錄(在限定標(biāo)準(zhǔn)范圍之內(nèi)),而分組數(shù)據(jù)不是顯示所有記錄。GROUP BY語句對于同樣的值只顯示一條記錄。例如,下面的語句中的GROUP BY語句對數(shù)據(jù)源中重復(fù)出現(xiàn)的數(shù)據(jù)只返回唯一的zip編碼列。
SELECT ZIP FROM Customers GROUP BY ZIP
只包括由GROUP BY和SELECT語句共同定義的那些記錄,換句話說,SELECT列表必須滿足GROUP BY列表,但是有一個(gè)例外就是SELECT列表可以包含聚合函數(shù)(GROUP BY語句不允許使用聚合函數(shù))。需要注意的是GROUP BY語句不會(huì)對結(jié)果分組進(jìn)行排序。為了使分組按字母或數(shù)字有序排列,需要添加ORDER BY語句。此外,在GROUP BY語句中不能引用使用了別名的字段。分組欄目必須是潛在的數(shù)據(jù),但它們并不需要顯示在結(jié)果中。
3.在分組之前進(jìn)行數(shù)據(jù)篩選
你可以添加一個(gè)WHERE語句來篩選有GROUP BY所得分組中的數(shù)據(jù)。例如,下面的語句只返回肯塔基州顧客的唯一ZIP編碼列。
SELECT ZIP FROM CustomersWHEREState = ’KY’ GROUP BY ZIP
必須注意的是WHERE語句是在GROUP BY語句求值之前進(jìn)行數(shù)據(jù)過濾的。與GROUP BY語句一樣,WHERE語句也不支持聚合函數(shù)。
4.返回所有分組
當(dāng)你使用WHERE語句過濾數(shù)據(jù)時(shí),結(jié)果分組中只顯示你指定的那些記錄,而符合分組定義但是不滿足過濾條件的數(shù)據(jù)不會(huì)包含在某個(gè)分組中。當(dāng)你想在分組中包含所有數(shù)據(jù)時(shí)添加關(guān)鍵字ALL即可,這時(shí)WHERE條件就不起作用。例如,在前面的例子中添加關(guān)鍵字ALL就會(huì)返回所有的ZIP分組,而不是僅在肯塔基州的那些。
SELECT ZIP FROM CustomersWHEREState = ’KY’ GROUP BY ALL ZIP
這樣看來,這兩個(gè)語句存在沖突,你可能不會(huì)以這種方式使用關(guān)鍵字ALL。當(dāng)你使用聚合函數(shù)計(jì)算某一列時(shí),使用ALL關(guān)鍵字可能會(huì)很方便。例如,下面的語句計(jì)算每個(gè)肯塔基州ZIP中的顧客數(shù),同時(shí),還會(huì)顯示其它的ZIP值。
SELECT ZIP, Count(ZIP) AS KYCustomersByZIP FROM
CustomersWHEREState = ’KY’ GROUP BY ALL ZIP
結(jié)果分組包括潛在數(shù)據(jù)中的所有ZIP值,然而,對于那些不是肯塔基州ZIP分組的聚合列(KYCustomersByZIP)將會(huì)顯示0。遠(yuǎn)程查詢不支持GROUP BY ALL。
5.分組后篩選數(shù)據(jù)
WHERE語句在GROUP BY語句之前進(jìn)行計(jì)算。當(dāng)你需要在分組之后篩選數(shù)據(jù)時(shí),可以使用HAVING語句。通常情況下,WHERE語句和HAVING語句的返回結(jié)果是一樣的,但是值得注意的是這兩個(gè)語句不可互換。當(dāng)你迷惑時(shí),可以遵循下面的說明:使用WHERE語句過濾記錄,使用HAVING語句過濾分組。
一般情況,你會(huì)使用HAVING語句和某個(gè)聚合函數(shù)計(jì)算一個(gè)分組。例如,下面的語句返回一個(gè)唯一的ZIP編碼列,但是可能不會(huì)包含潛在數(shù)據(jù)源中所有的ZIP。
SELECT ZIP, Count(ZIP) AS CustomersByZIP FROM
Customers GROUP BY ZIP HAVING Count(ZIP) = 1
只有那些包含一位顧客的分組顯示在結(jié)果中。
分享:解讀SQL Server數(shù)據(jù)庫開發(fā)要注意的21點(diǎn)1、了解你將要對數(shù)據(jù)進(jìn)行的操作 為你的數(shù)據(jù)庫創(chuàng)建一個(gè)健壯的索引,那可是功德一件。可要做到這一點(diǎn)簡直就是一門藝術(shù)。每當(dāng)你為一個(gè)表添加一個(gè)索引,SELECT會(huì)更快了,可INSERT和DELETE卻大大的變慢了,因?yàn)閯?chuàng)建了維護(hù)索引需要許多額外的工作。顯然,這里問題的
相關(guān)Mssql數(shù)據(jù)庫教程:
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- sql2005 數(shù)據(jù)庫轉(zhuǎn)為sql2000數(shù)據(jù)庫的方法(數(shù)據(jù)導(dǎo)出導(dǎo)入)
- 從各種位置截取字符串的SQL語法
- 關(guān)于SQL Server數(shù)據(jù)庫維度表和事實(shí)表的概述
- SQL server 視圖(view)介紹
- sql2005創(chuàng)建遠(yuǎn)程登錄帳戶的sql語句
- 詳細(xì)解析SQL Server安裝sp4補(bǔ)丁報(bào)錯(cuò)的方法
- SQL Server 2008中的新日期數(shù)據(jù)類型
- 用SQL Server Having計(jì)算列和平均值
- 解讀SQL Server數(shù)據(jù)庫備份的方法
- 如何快速掌握一些異常精妙的"SQL"語句
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-淺析SQL的排序,分組,統(tǒng)計(jì)常用語句
。