分組查詢:關鍵字group by的用法 group:組 by:通過 group by :通過....。分組group by列名:通過指定列來分組 一般情況下在題目中出現 "每個" "各個" "不同的" 這一類詞語時基本都會用到group by 分組關鍵字 語法: select 列名 from表名 g ...
分組查詢:關鍵字group by的用法
group:組
by:通過
group by :通過....。分組group by列名:通過指定列來分組
一般情況下在題目中出現 "每個" "各個" "不同的" 這一類詞語時基本都會用到group by 分組關鍵字
語法: select 列名 from表名 group by列名;
多欄位分組語法:select * from 表名 group by 列名1 ,列名2;
分組後的篩選 having的用法
功能:類似於where
註意: 不能代替where,位置不能再group by 前面。且having 後面可以跟列名
也可以跟聚合函數。
語法:select * from 表名 group by 列名 having 條件表達式;
1.查詢各個部門員工平均工資大於2500的員工部門編號;
2.查詢各個部門各個崗位的工資大於1500的員工;
3.查詢部門編號30的各個崗位平均工資;
having 和 where的區別:
1.where 是對分組前的數據進行篩選;
2.having 是對分組後的數據進行篩選;
3.having 後面可以跟列名,函數;
4.where 不能對分組後的數據進行篩選;
5.where 後面不能更函數;
排序關鍵字 order by :
註意:
1.mysql中查詢結果是按升序排序;
2.查詢時排序後如果要求升序或降序那麼,需要將兩種排序的關鍵字補充上;
3.方法一:升序排序關鍵字asc 用法 order by 列名 asc;
4.方法二:降序排序關鍵字desc 用法 order by 列名 desc;
5.多欄位排序:order by 列名1 [asc]desc,列名2[asc] desc ------先按列1排序如果列1值相同則按列2排序;
1.查詢工資大於2000的員工信息按工資降序排序;
select * from emp where sal>2000 order by sal desc;
2.查詢每個崗位平均工資按降序排序;
select job,avg(sal) from emp order by job desc;
3.查詢每個部門平均工資按升序排序;
select deptno ,avg(sal) from emp group by deptno order by deptno desc;
4.查詢部門10的員工信息按工資降序排序;
select * from emp where deptno=10 order by sal desc;
5.查詢工資大於等於3000的員工信息按員工編號降序排序;
select * from emp where sal>=3000 order by empno desc;
6.查詢各個部門的員工的姓名並按部門編號降序排序;
select deptno,ename from emp order by deptno desc;
7.查詢emp表,輸出每個部門的各個職位的平均工資,並按部門編號升序、平均工資降序排序。
select deptno,job,avg(sal) from emp group by deptno,job order by deptno asc,avg(sal) desc;
查詢關鍵字limit的用法
limit一般是用在order by後面
limit又有限制的意思,我們可以抽象的理解為截取
在mysql中的limit m,n意思是從m+1條開始,連續取n條數據
例如: select * from emp order by sal lirmit 0,3;
意思是:查詢emp,表員工所有信息按工資升序排序,只顯工資的1-3位;
1.查詢工資第五高的人信息;
select ename ,sal from emp order by sal desc limit 4,1;
2.查詢工資倒數第三的人信息;
select ename ,sal from emp order by sal asc limit 2,1;
模糊匹配:關鍵字like
like: 像......
模糊匹配支持兩種字元匹配符號
第一種:% 匹配任意個字元;
第二種:_ 匹配一個任意字元;
用法:一般是用在where 條件表達式中;
例如:查詢名字中含R的員工姓名和工資;
select ename ,sal from emp where ename like'%R%';
例如:查詢名字是四個字元的員工姓名和工資;
select ename,sal from emp where ename like"____";
去重: 關鍵字distinct
作用:就是將查詢出來的列值相同的進行去重
例如:查詢有多少個領導;
select count(distinct mgr) from emp;
多表查詢
說明:多表查詢就是根據查詢需要的數據,但是數據部分在不同的表中,查詢的時候需要多個表來獲取數據。
查詢步驟:
第一步:需要先分析即將查詢的數據和給出的條件分別屬於哪些表;
第二步:根據表中的列,來分析表與表之間的聯繫有哪些
直接關係:兩張表之間有相同的列
間接關係:兩張表之間沒有相同的列,但是可以通過其他表建立聯繫;
第三步:mysql語句的編寫
語法:
select 別名1.列名1,別名2.列名2
from 表名1 as 別名1, 表名2 as 別名2
where 別名1.相同列=別名2.相同列
and 其他條件語句;
語句一共有四個部分:
第一部分是確定要查詢顯示的列
第二部分是確定數據來源於哪些表
第三部分是建立兩張表的關係,一般用的是兩張表相同列名的列
第四部分闡述題目中的其他條件
- 查詢部門編號10上班的員工姓名,城市,部門編號;
select ename,loc,e.deptno
from emp e,dept d
where e.deptno=d.deptno and e.deptno=10;
-
查詢在NEW YORK 上班的員工工號和員工姓名和員工工資和部門名字;
select e.empno,ename,sal,d.dname -- 查詢的列
from emp e,dept d -- 查詢的數據源
where -- 條件關鍵字
e.deptno=d.deptno -- 建立連接
and d.loc='NEW YORK'; -- 篩選條件 -
查詢芝加哥員工的平均工資
select d.loc '城市',round(avg(sal),2)'平均工資'
from emp e,dept d
where
e.deptno=d.deptno
and
d.loc='CHICAGO';
4.查詢research部門有多少員工;
-
第一種方式(不存在重名時可以用這種方法)
select d.dname '部門',count(e.ename) '員工'
from emp e,dept d
where
e.deptno=d.deptno and d.dname='RESEARCH'; -
第二種方式(防止有重名的因素干擾)
select dname'部門',count(empno)'員工' from emp e ,dept d
where
e.deptno=d.deptno and dname='RESEARCH'; -
查詢在dallas和new york上班有多少人
select count(empno) -- 查詢的列
from emp e,dept d --查詢的數據來源
where
e.deptno=d.deptno --建立表之間的聯繫
and (loc='DALLAS' or loc='NEW YORK');--題目中的篩選條件
4.查詢sales部門的最低工資的員工姓名和工號
select ename ,empno from emp e,dept d
where e.deptno=d.deptno and dname='SALES' and sal=(select min(sal) from emp e ,dept d where e.deptno=d.deptno and dname='SALES');
select ename ,empno from emp e,dept d
where e.deptno=d.deptno and dname='SALES' order by sal limit 1;
-- 查詢每年要給RESEARCH部門劃多少工資錢
select sum(sal*12) from emp e,dept d
where e.deptno=d.deptno
and dname='RESEARCH';
-- 查詢ACCOUNTING部門員工的平均工資
select d.deptno,avg(sal) from emp e,dept d
where e.deptno=d.deptno
and dname='ACCOUNTING' group by deptno;