1、where條件查詢
從原表中的記錄中進(jìn)行篩選
2、group by 分組查詢
很多情況下,用戶都需要進(jìn)行一些匯總操作,比如統(tǒng)計(jì)整個(gè)公司的人數(shù)或者統(tǒng)計(jì)每一個(gè)部門的人數(shù)等。
聚合函數(shù)
AVG(【DISTINCT】 expr) 返回expr的平均值
COUNT(【DISTINCT】 expr)返回expr的非NULL值的數(shù)目
MIN(【DISTINCT】 expr)返回expr的最小值
MAX(【DISTINCT】 expr)返回expr的最大值
SUM(【DISTINCT】 expr)返回expr的總和
#聚合函數(shù)
#AVG(【DISTINCT】 expr) 返回expr的平均值
SELECt AVG(basic_salary) FROM t_salary;
#COUNT(【DISTINCT】 expr)返回expr的非NULL值的數(shù)目
#統(tǒng)計(jì)員工總?cè)藬?shù)
SELECt COUNT(*) FROM t_employee;#count(*)統(tǒng)計(jì)的是記錄數(shù)
#統(tǒng)計(jì)員工表的員工所在部門數(shù)
SELECt COUNT(dept_id) FROM t_employee;#統(tǒng)計(jì)的是非NULL值
SELECt COUNT(DISTINCT dept_id) FROM t_employee;#統(tǒng)計(jì)的是非NULL值,并且去重
#MIN(【DISTINCT】 expr)返回expr的最小值

#查詢最低基本工資值
SELECt MIN(basic_salary) FROM t_salary;
#MAX(【DISTINCT】 expr)返回expr的最大值

#查詢最高基本工資值
SELECt MAX(basic_salary) FROM t_salary;
#查詢最高基本工資與最低基本工資的差值
SELECt MAX(basic_salary)-MIN(basic_salary) FROM t_salary;
#SUM(【DISTINCT】 expr)返回expr的總和
#查詢基本工資總和
SELECt SUM(basic_salary) FROM t_salary;
group by + 聚合函數(shù)
#group by + 聚合函數(shù)
#統(tǒng)計(jì)每個(gè)部門的人數(shù)
SELECt dept_id,COUNT(*) FROM t_employee
GROUP BY dept_id;
#統(tǒng)計(jì)每個(gè)部門的平均基本工資
SELECt emp.dept_id,AVG(s.basic_salary )
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid
GROUP BY emp.dept_id;
#統(tǒng)計(jì)每個(gè)部門的年齡最大者
SELECt dept_id,MIN(birthday) FROM t_employee GROUP BY dept_id;
#統(tǒng)計(jì)每個(gè)部門基本工資最高者
SELECt emp.dept_id,MAX(s.basic_salary )
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid
GROUP BY emp.dept_id;
#統(tǒng)計(jì)每個(gè)部門基本工資之和
SELECt emp.dept_id,SUM(s.basic_salary )
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid
GROUP BY emp.dept_id;
注意:
用count(*),count(1),誰好呢?
其實(shí),對(duì)于myisam引擎的表,沒有區(qū)別的.
這種引擎內(nèi)部有一計(jì)數(shù)器在維護(hù)著行數(shù).
Innodb的表,用count(*)直接讀行數(shù),效率很低,因?yàn)閕nnodb真的要去數(shù)一遍.
關(guān)于mysql的group by的特殊:
注意:在SELECt 列表中所有未包含在組函數(shù)中的列都應(yīng)該是包含在 GROUP BY 子句中的,換句話說,SELECT列表中最好不要出現(xiàn)GROUP BY子句中沒有的列。
對(duì)于標(biāo)準(zhǔn)語(yǔ)句來說,這個(gè)語(yǔ)句是錯(cuò)誤的,但是mysql可以這么干,出于可移植性和規(guī)范性,不推薦這么寫。
3、having 篩選
having與where類似,可篩選數(shù)據(jù)
having與where不同點(diǎn)
where針對(duì)表中的列發(fā)揮作用,查詢數(shù)據(jù);having針對(duì)查詢結(jié)果中的列發(fā)揮作用,篩選數(shù)據(jù)
where后面不能寫分組函數(shù),而having后面可以使用分組函數(shù)
having只用于group by分組統(tǒng)計(jì)語(yǔ)句
#按照部門統(tǒng)計(jì)員工人數(shù),僅顯示部門人數(shù)少于3人的
SELECT dept_id,COUNT(*) AS c
FROM t_employee
WHERe dept_id IS NOT NULL
GROUP BY dept_id
HAVINg c <3;
#查詢每個(gè)部門的平均工資,并且僅顯示平均工資高于10000
SELECt emp.dept_id,AVG(s.basic_salary ) AS avg_salary
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid AND dept_id IS NOT NULL
GROUP BY emp.dept_id
HAVINg avg_salary >10000;
4、order by 排序
按一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行排序
用法:order by col1,col2,col3…
說明:先按col1排序如果col1相同就按照col2排序,依次類推
col1,col2,col3可以是select后面的字段也可以不是
默認(rèn)是升序,也可以在字段后面加asc顯示說明是升序,desc為降序
例如:order by click_count desc;
如果兩個(gè)字段排序不一樣,例如:
order by 字段1 asc ,字段2 desc;
order by 后面除了跟1個(gè)或多個(gè)字段,還可以寫表達(dá)式,函數(shù),別名等
#排序
#查詢員工基本工資,按照基本工資升序排列,如果工資相同,按照eid升序排列
SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary,eid;
#查詢員工基本工資,按照基本工資降序排列,如果工資相同,按照eid排列
SELECt t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary DESC,eid;
#統(tǒng)計(jì)每個(gè)部門的平均基本工資,并按照平均工資降序排列
SELECt emp.dept_id,AVG(s.basic_salary)
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid
GROUP BY emp.dept_id
ORDER BY AVG(s.basic_salary) DESC;
5、limit 分頁(yè)
limit m,n
m表示從下標(biāo)為m的記錄開始查詢,第一條記錄下標(biāo)為0,n表示取出n條出來,如果從m開始不夠n條了,就有幾條取幾條。m=(page-1)*n,(page頁(yè)碼,n表示每頁(yè)顯示的條數(shù))
如果第一頁(yè)limit 0,n
如果第二頁(yè)limit n,n
依次類推,得出公式limit (page-1)*n , n
#分頁(yè)
#查詢員工信息,每頁(yè)顯示5條,第二頁(yè)
SELECt * FROM t_employee LIMIT 5,5;
#統(tǒng)計(jì)每個(gè)部門的平均基本工資,并顯示前三名
SELECt emp.dept_id,AVG(s.basic_salary)
FROM t_employee AS emp,t_salary AS s
WHERe emp.eid = s.eid
GROUP BY emp.dept_id
ORDER BY AVG(s.basic_salary) DESC
LIMIT 0,3;
本文鏈接:
本文章“Java編程常用的elect的5個(gè)子句”已幫助 269 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579