當前位置:首頁 » 編程語言 » sql查詢過程

sql查詢過程

發布時間: 2024-09-29 16:25:48

sql中的Group By的查詢過程多列分組的查詢過程是怎樣的

Group By子句 Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。 語法: [ Group By [ ALL ] Group_By_expression[ ,...n ] [ WITH { CUBE | ROLLUP } ] ] 參數說明: ALL:包含所有組和結果集,甚至包含那些任何行都不滿足WHERE子句指定的搜索條件的組和結果集。如果指定了ALL,將對組中不滿足搜索條件的匯總列返回空值。不能用CUBE或ROLLUP運算符指定ALL。如果訪問遠程表的查詢中有WHERE子句,則不支持Group By ALL操作。 Group_By_expression:對其執行分組的表達式。Group_By_expression也稱為分組列。Group_By_expression可以是列或引用列的非聚合表達式。在選擇列表內定義的列的別名不能用於指定分組列。對於不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的項數受查詢所涉及的Group By列的大小、聚合列和聚合值的限制。該限制從8060位元組的限制開始,對保存中間查詢結果所需的中間級工作表有8060位元組的限制。如果指定了CUBE或ROLLUP,則最多隻尺雹能有10個分組表達式。 CUBE:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。在結果集內返回每個可能的組和子組組合的Group By匯總行。Group By匯總行在結果中顯示拿廳為NULL,但可用來表示所有值。使用GroupING函數確定結果集內的空值是否是Group By匯總值。結果集內的匯總行數取決於Group By子句內包含的列數。Group By子句中的每個操作數(列)綁定在分組NULL下,並且分組適用於所有其他操作數(列)。由於CUBE返回陵敏帆每個可能的組和子組組合,因此,不論指定分組列所使用的是什麼順序,行數都相同。 ROLLUP:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。按層次結構順序,從組內的最低級別到最高級別匯總組。組的層次結構取決於指定分組列時所使用的順序。更改分組列的順序會影響在結果集內生成的行數。 使用Group By子句的注意事項。 (1)在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。 (2)SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。 (3)在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。 (4)Group By子句不能使用欄位別名。 1.按單列進行分組 Group By子句可以基於指定某一列的值將數據集合劃分為多個分組,同一組內所有記錄在分組屬性上具有相同值。 示例: 把「student」表按照「性別」這個單列進行分組。在查詢分析器中輸入的SQL語句如下: use student select 性別 from student Group By 性別 但仍然要強調SELECT子句必須與Group By後的子句或者是分組函數列相一致。 例如,由於下列查詢中「姓名」列既不包含在Group By子句中,也不包含在分組函數中,所以是錯誤的。錯誤的SQL語句如下: use student select 姓名,性別 from student Group By 性別 例如,在「grade」表中,按「學期」分組查詢。SQL語句如下: use studnet select 學期 from grade Group By 學期 2.按多列進行分組 Group By子句可以基於指定多列的值將數據集合劃分為多個分組。 示例: 在「student」表中,按照「性別」和「年齡」列進行分組。在查詢分析中輸入的SQL語句如下: use student select 性別,年齡 from student Group By 性別,年齡 在「student」表中,首先按照「性別」分組,然後再按照「年齡」分組。 再舉一個例子,例如,在「grade」表中,按照「學號」和「課程代號」列進行分組。SQL語句如下: use student select 學號,課程代號 from grade Group By 學號,課程代號 按多列進行分組時有NULL組的是如何處理的。當表按多列進行分組時有NULL組,這時NULL被作為一個特定值處理,就像其他任何值一樣。也就是說,如果在某個分組列中存在兩個NULL,則按它們有相同的值那樣處理,並將它們放在相同的組中。 示例: 在「grade」表中,按「學期」和「課程代號」列進行分組。在查詢分析器中輸入的SQL語句如下: use student select 學期,課程代號 from grade Group By 學期,課程代號 3.與聚集函數一起使用 Group By子句是經常與聚集函數一起使用。如果SELECT子句中包含聚集函數,則計算每組的匯總值,當用戶指定Group By時,選擇列表中任一非聚集表達式內的所有列都應包含在Group By列表中,或者Group By表達式必須與選擇列表表達式完全匹配。 示例: 在「student」表中,分別求男女生的平均年齡。在查詢分析器中輸入的SQL語句如下: use student select 性別,avg(年齡) as 平均年齡 from student Group By 性別 例如,在「student」表中,分別求有多少個男生和女生。SQL語句如下: use student select 性別,count(性別) as 人數 from student Group By 性別 說明:關於聚合函數的詳細講解可參閱9.2.1節。 4.與HAVING子句一起使用 HAVING子句對Group By子句選擇出來的結果進行再次篩選,最後輸出符合HAVING子句中條件的記錄。HAVING子句的語法與WHERE子句的語法相類似,惟一不同的是HAVING子句中可以包含聚合函數。 語法: [HAVING ] 參數說明: :指定組或聚合應滿足的搜索條件。當HAVING與Group By ALL一起使用時,HAVING 子句替代ALL。 示例: 在「student」表中,按「性別」分組求平均年齡,並且查詢其平均年齡大於21的學生信息。在查詢分析器中輸入的SQL語句如下: use student select avg(年齡), 性別 from student Group By 性別 having avg(年齡)>21 在「grade」表中,按「學期」分組求平均成績,並且查詢「平均成績」大於93的課程信息。在查詢分析器中輸入的SQL語句如下: +1 已贊過

② sql語句如何查詢一個表中某一列的相同數據

假設表名是num,列名是a,則查詢語句為:

SELECT * FROM num WHERE a IN(

SELECT a FROM num GROUP BY a HAVING COUNT(a)>1

)

其中:

SELECT 語句:SELECT 語句用於從表中選取數據。結果被存儲在一個結果表中(稱為結果集)。

WHERE 子句:如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。

GROUP BY 語句:GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。

HAVING 子句:在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。

COUNT() 函數:返回匹配指定條件的行數。

(2)sql查詢過程擴展閱讀:

sql語言特點:

1、一體化:SQL集數據定義DDL、數據操縱DML和數據控制DCL於一體,可以完成資料庫中的全部工作。

2、使用方式靈活:它具有兩種使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主語言中使用。

3、非過程化:只提操作要求,不必描述操作步驟,也不需要導航。使用時只需要告訴計算機「做什麼」,而不需要告訴它「怎麼做」。

4、語言簡潔,語法簡單,好學好用:在ANSI標准中,只包含了94個英文單詞,核心功能只用6個動詞,語法接近英語口語。

熱點內容
腳本干將 發布:2024-09-29 18:12:50 瀏覽:462
sqlserver主鍵索引 發布:2024-09-29 18:12:45 瀏覽:415
sql循環輸出 發布:2024-09-29 18:12:43 瀏覽:777
版式文件伺服器地址山東省 發布:2024-09-29 18:01:18 瀏覽:505
微博手機視頻上傳視頻怎麼下載到電腦上 發布:2024-09-29 18:00:45 瀏覽:329
蘋果掌上公交安卓上叫什麼 發布:2024-09-29 17:55:50 瀏覽:107
虛擬機如何查看配置 發布:2024-09-29 17:47:52 瀏覽:717
華為虛擬伺服器lanip地址 發布:2024-09-29 17:40:33 瀏覽:141
判斷電腦配置需要看哪些參數 發布:2024-09-29 17:37:21 瀏覽:549
柱插筋加密 發布:2024-09-29 17:36:09 瀏覽:482