当前位置 : 主页 > 编程语言 > 其它开发 >

mysql中group by,having,order by,limit,distinct的用法和简单的的多表查询

来源:互联网 收集:自由互联 发布时间:2022-07-12
分组查询:关键字group by的用法 group:组 by:通过 group by :通过....。分组group by列名:通过指定列来分组 一般情况下在题目中出现 "每个" "各个" "不同的" 这一类词语时基本都会用到group by 分组
分组查询:关键字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 其他条件语句;

语句一共有四个部分:

第一部分是确定要查询显示的列

第二部分是确定数据来源于哪些表

第三部分是建立两张表的关系,一般用的是两张表相同列名的列

第四部分阐述题目中的其他条件

  1. 查询部门编号10上班的员工姓名,城市,部门编号;

​ select ename,loc,e.deptno

​ from emp e,dept d

​ where e.deptno=d.deptno and e.deptno=10;

  1. 查询在NEW YORK 上班的员工工号和员工姓名和员工工资和部门名字;
    select e.empno,ename,sal,d.dname -- 查询的列
    from emp e,dept d -- 查询的数据源
    where -- 条件关键字
    e.deptno=d.deptno -- 建立连接
    and d.loc='NEW YORK'; -- 筛选条件

  2. 查询芝加哥员工的平均工资
    select d.loc '城市',round(avg(sal),2)'平均工资'
    from emp e,dept d
    where
    e.deptno=d.deptno
    and
    d.loc='CHICAGO';

4.查询research部门有多少员工;

  1. 第一种方式(不存在重名时可以用这种方法)
    select d.dname '部门',count(e.ename) '员工'
    from emp e,dept d
    where
    e.deptno=d.deptno and d.dname='RESEARCH';

  2. 第二种方式(防止有重名的因素干扰)
    select dname'部门',count(empno)'员工' from emp e ,dept d
    where
    e.deptno=d.deptno and dname='RESEARCH';

  3. 查询在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;

网友评论