首先說(shuō)一下having子句的作用:having子句主要用于過(guò)濾分組部蛇。
分組函數(shù)也叫組函數(shù)也叫多行函數(shù)窑眯。
(1)having子句的使用
? ? ? ? 求平均工資大于2000點(diǎn)部門
? ? ? ? ? ? ? ? select? ? deptno , avg(sal)? ? from? ? emp? ? group? ? by? ? deptno? ? having? ? avg(sal)>2000;
?(2)where與having點(diǎn)區(qū)別
? ? ? ? 不能在where子句中使用組函數(shù)系冗,但是可以在having子句中使用組函數(shù)
? ? ? ? 不含分組函數(shù)時(shí)where和having是可以通用的
(3)錯(cuò)誤示例
? ? ? ? select? ? deptno,avg(sal)? ? from? ? emp? ? where? ? avg(sal) > 2000? ? group? ? by? ? deptno;
(4)where和having可以通用的情況
? ? ? ? 查詢10號(hào)部門的平均工資
? ? ? ? select? ? deptno,avg(sal)? ? from? ? emp? ? group? ? by? ? deptno? ? having? ? deptno? ? =? ? 10;
? ? ? ? select? ? deptno,avg(sal)? ? from? ? emp? ? where? ? deptno=10? ? group? ? by? ? deptno;
(5)注意:從SQL優(yōu)化的角度盡量使用where
? ? ? ? 原因:having先分組后過(guò)濾瓷产,where先過(guò)濾后分組
? ? ? ? where使得分組記錄數(shù)大大降低搜贤,從而提高效率