自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Group By 有哪些注意事項(xiàng)?你知道嗎?

數(shù)據(jù)庫(kù) MySQL
SQL 語(yǔ)句編寫(xiě)一定要遵循此先后順序:select、from、where、group by、having、order by、limit。其中 having 或 group by 都可單獨(dú)使用,并且在 MySQL 5.7.5 之后,group by 和 having 可以使用別名查詢,但 where 不能使用別名。

注意:本文以下內(nèi)容基于 MySQL 5.7 InnoDB 數(shù)據(jù)庫(kù)引擎。

1、group by 后面不能加 where

在 MySQL 中,所有的 SQL 查詢語(yǔ)法要遵循以下語(yǔ)法順序:

  1. select
  2. from
  3. where
  4. group by
  5. having
  6. order by
  7. limit

以上語(yǔ)法順序是不能前后互換的,否則報(bào)錯(cuò)。比如我們不能在 group by 之后添加 where 查詢語(yǔ)句,否則會(huì)出現(xiàn)如下錯(cuò)誤:

面試突擊62:group by 有哪些注意事項(xiàng)?

語(yǔ)法順序的執(zhí)行是和 MySQL 的 select 語(yǔ)句執(zhí)行順序相關(guān)的,select 執(zhí)行先后順序如下:

  1. from 階段
  2. where 階段
  3. group 階段
  4. having 階段
  5. select 階段
  6. order by 階段
  7. limit 階段

注意:其中 select 比較特殊,在進(jìn)行查詢語(yǔ)句編寫(xiě)時(shí),要寫(xiě)在最前面,其余語(yǔ)法順序要和執(zhí)行先后順序保持一致。

2、having 或 group by 可單獨(dú)使用

having 和 group by 可以單獨(dú)使用,如下查詢所示:

面試突擊62:group by 有哪些注意事項(xiàng)?

3、having 和 group by 可使用別名

當(dāng) having 單獨(dú)使用時(shí),它的作用和 where 類(lèi)似,但又有細(xì)微的不同。比如在 where 中不能使用別名,但 having 和 group by 卻可以別名。咱們創(chuàng)建一個(gè)測(cè)試表來(lái)演示一下,建表 SQL 如下:

drop table if exists student_score;
create table student_score(
id int primary key auto_increment comment '主鍵',
name varchar(250) comment '姓名',
math decimal(4,1) comment '數(shù)學(xué)成績(jī)',
chinese decimal(4,1) comment '語(yǔ)文成績(jī)'
);
insert into student_score(name,math,chinese) values('張三',50,50),('李四',80,80),('王五',90,90);

表中的數(shù)據(jù)如下圖所示:

面試突擊62:group by 有哪些注意事項(xiàng)?

當(dāng)我們使用總成績(jī)別名 total 分別在 where 和 having 中使用時(shí),查詢結(jié)果如下:

面試突擊62:group by 有哪些注意事項(xiàng)?

從上述結(jié)果可以看出,having 查詢可以使用 select 中的別名,而 where 不能使用別名。

除了 having 可以使用別名之外,group by 也可以使用別名,如下圖所示:

面試突擊62:group by 有哪些注意事項(xiàng)?

為什么where不能用別名?為having卻可以?

where 中不能使用別名,這和 MySQL 語(yǔ)句執(zhí)行順序有關(guān),MySQL 語(yǔ)句執(zhí)行順序如下:

  1. from 階段
  2. where 階段
  3. group 階段
  4. having 階段
  5. select 階段
  6. order by 階段
  7. limit 階段

也就是說(shuō),在執(zhí)行 where 查詢時(shí),select 還沒(méi)執(zhí)行,因此在 where 中想要使用還未執(zhí)行的 select 中的別名是不行的。那從上面的執(zhí)行順序可以看到,having 執(zhí)行也在 select 之前,為什么它就可以使用 select 中的別名呢?

這是因?yàn)?MySQL 在 5.7.5 之后做了擴(kuò)展,允許在 having 中使用別名,官方文檔中有相應(yīng)的說(shuō)明,如下圖所示:

面試突擊62:group by 有哪些注意事項(xiàng)?

MySQL 官方文檔地址:

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html。

PS:group by 能使用別名的原理和 having 類(lèi)似。

總結(jié)

SQL 語(yǔ)句編寫(xiě)一定要遵循此先后順序:select、from、where、group by、having、order by、limit。其中 having 或 group by 都可單獨(dú)使用,并且在 MySQL 5.7.5 之后,group by 和 having 可以使用別名查詢,但 where 不能使用別名。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2023-04-26 10:06:08

RocketMQ屬性Consumer

2010-05-07 10:19:48

Oracle 注意事項(xiàng)

2023-04-26 10:21:04

2022-08-02 06:55:35

移動(dòng)設(shè)備Android

2020-11-04 17:35:39

網(wǎng)絡(luò)安全漏洞技術(shù)

2022-12-09 19:00:02

Vite兼容性BigInt

2024-10-22 09:59:36

虛擬化容器化系統(tǒng)

2022-09-14 08:11:06

分頁(yè)模糊查詢

2024-02-19 08:01:59

服務(wù)微服務(wù)授權(quán)

2024-11-26 14:29:48

2022-07-14 08:02:02

NPM依賴治理

2023-09-01 07:38:45

ArrayListArrayst實(shí)線類(lèi)

2022-01-09 23:20:50

手機(jī)國(guó)產(chǎn)蘋(píng)果

2023-12-07 07:08:09

Angular函數(shù)

2023-07-04 08:48:24

靜態(tài)代碼分析工具

2022-03-13 18:53:31

interfacetypeTypeScript

2020-09-28 11:14:57

線程數(shù)據(jù)語(yǔ)言

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

2023-12-12 08:41:01

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)