日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【转】SQL中where, group by, having的用法和区别

發布時間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】SQL中where, group by, having的用法和区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

group by,where,having 是數據庫查詢中最常用的幾個關鍵字。在工作中,時常用到,那么,當一個查詢中使用了where ,group by ,having及聚集函數時 ,執行順序是怎么樣的?為了回答這個問題,將這個三個關鍵字的用法整理一下。

where:數據庫中常用的是where關鍵字,用于在初始表中篩選查詢。它是一個約束聲明,用于約束數據,在返回結果集之前起作用。如下面這個例子,從user表中查詢出userDepartmentId等于2的數據

select * from dbo.user where userDepartmentId=2

group by:對select查詢出來的結果集按照某個字段或者表達式進行分組,獲得一組組的集合,然后從每組中取出一個指定字段或者表達式的值。
在說group by的時候,我們還需要了解聚合函數,聚合函數是SQL語言中一種特殊的函數。例如:

  • count(*):獲取數量
  • sum():求和(這里要注意求和是忽略null值的,null與其他數值相加結果為null,所以可以通過ifnull(xxx,0)將null的值賦為0)
  • avg():求平均數
  • max():求最大值
  • min():求最小值

這些函數和其它函數的根本區別就是它們一般作用在多條記錄上。

我們需要注意的是:在使用group by的SQL語句中,select中返回的字段,必須滿足以下兩個條件之一:

  • 這些字段被包含在group by語句的后面,作為分組的依據;
  • 這些字段包含在聚合函數中。
  • 從剛才的那個例子中,我們查詢出每個城市,相同年齡的員工數量:

    select city, count(*),age from dbo.user where departmentID=2 group by city,age

    having:用于對where和group by查詢出來的分組經行過濾,查出滿足條件的分組結果。它是一個過濾聲明,是在查詢返回結果集以后對查詢結果進行的過濾操作。
    所以having的使用需要注意以下幾點:

  • having只能用于group by(分組統計語句中)
  • where 是用于在初始表中篩選查詢,having用于在 group by 結果分組中查詢
  • having 子句中的每一個元素也必須出現在select列表中
  • having語句可以使用聚合函數,而where不使用。
  • 還是剛才的例子,我們進一步整理,查詢員工數量大于20的城市和年齡段

    select city, count(*),age from dbo.user where departmentID=2 group by city,age having age >40

    回到開頭的那個問題:當一個語句中同時含有where、group by 、having及聚集函數時,執行順序如下:

  • 執行where子句查找符合條件的數據;
  • 使用group by 子句對數據進行分組;對group by 子句形成的組運行聚集函數計算每一組的值;
  • 最后用having 子句去掉不符合條件的組。
  • 需要注意的是,

  • having 子句中的每一個元素也必須出現在select列表中。有些數據庫例外,如oracle.
  • having子句和where子句都可以用來設定限制條件以使查詢結果滿足一定的條件限制。
  • having子句限制的是組,而不是行。where子句中不能使用聚集函數,而having子句中可以。
  • 當加上其他sql語句時,執行順序如下:
    S-F-W-G-H-O 組合

    select –>where –> group by–> having–>order by

    順序是不能改變的

    總結

    以上是生活随笔為你收集整理的【转】SQL中where, group by, having的用法和区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。