欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中having關(guān)鍵字詳解以及與where的區(qū)別

 更新時(shí)間:2024年07月23日 11:00:54   作者:睡竹  
在MySQL中HAVING和WHERE是用于過(guò)濾數(shù)據(jù)的兩個(gè)重要的關(guān)鍵字,它們?cè)诓樵冋Z(yǔ)句中的位置和功能有所不同,這篇文章主要給大家介紹了關(guān)于MySQL中having關(guān)鍵字詳解以及與where區(qū)別的相關(guān)資料,需要的朋友可以參考下

1、having關(guān)鍵字概覽

1.1、作用

  • 對(duì)查詢的數(shù)據(jù)進(jìn)行篩選

1.2、having關(guān)鍵字產(chǎn)生的原因

  • 使用where對(duì)查詢的數(shù)據(jù)進(jìn)行篩選時(shí),where子句中無(wú)法使用聚合函數(shù),所以引出having關(guān)鍵字

1.3、having使用語(yǔ)法

  • having單獨(dú)使用(不與group by一起使用,在Oracle中會(huì)報(bào)錯(cuò)),單獨(dú)使用時(shí),大部分場(chǎng)合與where相同
  • having與group by一起使用,這是having關(guān)鍵字產(chǎn)生的初衷,對(duì)分組之后的數(shù)據(jù)再進(jìn)行篩選

1.4、having與where的區(qū)別

  • 一般情況下,where用于過(guò)濾數(shù)據(jù)行,而having用于過(guò)濾分組(能用where的地方,不要使用having)
  • where中不能出現(xiàn)聚合函數(shù),而having可以使用聚合函數(shù)作為條件
  • where在數(shù)據(jù)分組前進(jìn)行過(guò)濾,而having在數(shù)據(jù)分組后進(jìn)行過(guò)濾(因此where效率一般比having高);where是數(shù)據(jù)從磁盤(pán)讀入內(nèi)存時(shí)篩選,而having是在內(nèi)存中篩選
  • where是對(duì)數(shù)據(jù)庫(kù)文件過(guò)濾(過(guò)濾條件是表中的字段),而having是對(duì)select中查詢的字段進(jìn)行過(guò)濾
  • where子句中不能使用字段別名,而having子句中可以使用字段別名
  • 多表關(guān)聯(lián)查詢時(shí),where先篩選再聯(lián)接,having先聯(lián)接再篩選

2、having案例

初始化表(以student表為例):

create table if not exists student
(
	id int null,
	name varchar(50) null,
	age int null,
	sex varchar(2) null,
	score double null
)
comment '學(xué)生表';

INSERT INTO student (id, name, age, sex, score) VALUES (1, '張三', 18, '男', 70);
INSERT INTO student (id, name, age, sex, score) VALUES (2, '李四', 17, '男', 60);
INSERT INTO student (id, name, age, sex, score) VALUES (3, '王五', 19, '男', 80);
INSERT INTO student (id, name, age, sex, score) VALUES (4, '趙六', 16, '男', 90);
INSERT INTO student (id, name, age, sex, score) VALUES (5, '七七', 16, '女', 95);
INSERT INTO student (id, name, age, sex, score) VALUES (6, '九九', 17, '女', 85);
INSERT INTO student (id, name, age, sex, score) VALUES (7, '十一', 18, '女', 80);
INSERT INTO student (id, name, age, sex, score) VALUES (8, '小明', 19, '男', 90);
INSERT INTO student (id, name, age, sex, score) VALUES (9, '小軍', 17, '男', 55);
INSERT INTO student (id, name, age, sex, score) VALUES (10, '小雷', 19, '女', 60);

2.1、having單獨(dú)使用

案例1:查詢學(xué)生表中,成績(jī)?cè)?0分以上的數(shù)據(jù)

select * from student having score >= 80

等同于:

select * from student where score >= 80

having使用的錯(cuò)誤:

select 
    id
    ,name
    ,age 
from student 
having score >= 80 -- 報(bào)錯(cuò),score篩選條件沒(méi)有出現(xiàn)在select中

where使用的錯(cuò)誤:

select
       id
     ,name
     ,age
     ,score as fenshu
from student
where fenshu >= 80 -- 報(bào)錯(cuò),where子句中不能使用字段別名

2.2、having與group by一起使用

案例2:求各個(gè)年齡段的平均分和年齡

select age,avg(score) from student group by age

如下:

 案例3:求學(xué)生平均分大于80分的年齡段及平均分

  • 這里只能使用having,對(duì)平均分進(jìn)行篩選,使用where會(huì)報(bào)錯(cuò)
select
       age
     ,avg(score)
from student
group by age
having avg(score) > 80
-- 結(jié)果為16歲

案例4:查詢學(xué)生年齡平均分大于80分中,男生的信息(姓名,男生的分?jǐn)?shù))

select
    name
    ,sex
    ,age
    ,score
from student
where sex = '男'
group by name,sex,age,score
having avg(score) > 80

結(jié)果:

總結(jié) 

到此這篇關(guān)于MySQL中having關(guān)鍵字詳解以及與where區(qū)別的文章就介紹到這了,更多相關(guān)MySQL having關(guān)鍵字與where區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL利用profile分析慢sql詳解(group left join效率高于子查詢)

    MySQL利用profile分析慢sql詳解(group left join效率高于子查詢)

    最近因?yàn)橐粋€(gè)用了子查詢的sql語(yǔ)句查詢很慢,嚴(yán)重影響了性能,所以需要進(jìn)行優(yōu)化,下面這篇文章主要跟大家介紹了關(guān)于MySQL利用profile分析慢sql的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • MySQL外鍵約束(Foreign?Key)案例詳解

    MySQL外鍵約束(Foreign?Key)案例詳解

    MySQL外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用,下面這篇文章主要給給大家介紹了關(guān)于MySQL外鍵約束(Foreign?Key)的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • mysql實(shí)現(xiàn)merge into問(wèn)題

    mysql實(shí)現(xiàn)merge into問(wèn)題

    文章介紹了在數(shù)據(jù)庫(kù)操作中,如何使用`REPLACE INTO`和`INSERT INTO ON DUPLICATE KEY UPDATE`語(yǔ)句進(jìn)行數(shù)據(jù)更新和插入操作,如果不想創(chuàng)建唯一性索引,可以通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn),文章通過(guò)實(shí)驗(yàn)和驗(yàn)證,展示了這兩種方法的實(shí)際效果
    2024-12-12
  • MySQL數(shù)據(jù)庫(kù)?JDBC?編程(Java?連接?MySQL)

    MySQL數(shù)據(jù)庫(kù)?JDBC?編程(Java?連接?MySQL)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)?JDBC?編程Java?連接?MySQL,在?Java?中,這樣的封裝就是由?Java?標(biāo)準(zhǔn)庫(kù)來(lái)完成的,封裝出了一套統(tǒng)一的數(shù)據(jù)庫(kù)?API?稱為?JDBC,下面來(lái)看文章的詳細(xì)介紹吧
    2021-12-12
  • windows10安裝mysql5.7.17教程

    windows10安裝mysql5.7.17教程

    windows10安裝mysql5.7.17是這樣安裝的嗎?這篇文章主要為大家詳細(xì)介紹了win10下mysql5.7.17安裝配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 淺談MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化

    淺談MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化

    mysql大數(shù)據(jù)量使用limit分頁(yè),隨著頁(yè)碼的增大,查詢效率越低下。本文就來(lái)介紹一下MySQL 億級(jí)數(shù)據(jù)分頁(yè)的優(yōu)化,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Mysql數(shù)據(jù)庫(kù)百萬(wàn)級(jí)數(shù)據(jù)測(cè)試索引效果

    Mysql數(shù)據(jù)庫(kù)百萬(wàn)級(jí)數(shù)據(jù)測(cè)試索引效果

    這篇文章主要為大家介紹了Mysql數(shù)據(jù)庫(kù)百萬(wàn)數(shù)據(jù)測(cè)試索引效果,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 使用MySQL的LAST_INSERT_ID來(lái)確定各分表的唯一ID值

    使用MySQL的LAST_INSERT_ID來(lái)確定各分表的唯一ID值

    MySQL數(shù)據(jù)表結(jié)構(gòu)中,一般情況下,都會(huì)定義一個(gè)具有‘AUTO_INCREMENT’擴(kuò)展屬性的‘ID’字段,以確保數(shù)據(jù)表的每一條記錄都可以用這個(gè)ID唯一確定
    2011-08-08
  • Mysql 中的case-when詳解

    Mysql 中的case-when詳解

    case-when? 是一種 sql 語(yǔ)句中的語(yǔ)法結(jié)構(gòu),主要用于數(shù)據(jù)的行列轉(zhuǎn)換,本文給大家介紹Mysql 中的case-when的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Mysql 乘法除法精度不一致問(wèn)題(除法后四位小數(shù))

    Mysql 乘法除法精度不一致問(wèn)題(除法后四位小數(shù))

    這篇文章主要介紹了Mysql 乘法除法精度不一致,除法后四位小數(shù),本文通過(guò)問(wèn)題分析實(shí)例代碼講解,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論