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

group:组

by:通过

group by :通过….。
分组group by列名:通过指定列来分组

一般情况下在题目中出现 “每个” “各个” “不同的” 这一类词语时基本都会用到group by 分组关键字

语法: select 列名 from表名 group by列名;

多字段分组语法:select * from 表名 group by 列名1 ,列名2;

功能:类似于where

注意: 不能代替where,位置不能再group by 前面。且having 后面可以跟列名

也可以跟聚合函数。

语法:select * from 表名 group by 列名 having 条件表达式;

1.查询各个部门员工平均工资大于2500的员工部门编号;

2.查询各个部门各个岗位的工资大于1500的员工;

3.查询部门编号30的各个岗位平均工资;

1.where 是对分组前的数据进行筛选;

2.having 是对分组后的数据进行筛选;

3.having 后面可以跟列名,函数;

4.where 不能对分组后的数据进行筛选;

5.where 后面不能跟函数;

注意:

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一般是用在order by后面

limit又有限制的意思,我们可以抽象的理解为截取

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: 像……

模糊匹配支持两种字符匹配符号

[En]

Fuzzy matching supports two kinds of character matching symbols

第一种:% 匹配任意个字符;

第二种:_ 匹配一个任意字符;

用法:一般是用在where 条件表达式中;

例如:查询名字中含R的员工姓名和工资;

select ename ,sal from emp where ename like’%R%’;

例如:查询名称为四个字符的员工的姓名和工资

[En]

For example: query the name and salary of an employee whose name is four characters

select ename,sal from emp where ename like”____”;

功能:从相同值的查询列中去掉重复项。

[En]

Function: to remove duplicates from the queried columns with the same values.

例如,查询有多少个领导者

[En]

For example, query how many leaders there are

select count(distinct mgr) from emp;

说明:多表查询是基于查询所需要的数据,但数据部分在不同的表中,查询需要多个表才能获取数据。

[En]

Description: multi-table query is based on the data needed by the query, but the data part is in different tables, query requires multiple tables to obtain data.

select 别名1.列名1,别名2.列名2

from 表名1 as 别名1, 表名2 as 别名2

where 别名1.相同列=别名2.相同列

and 其他条件语句;

第一部分是确定要查询和显示哪些列。

[En]

The first part is to determine which columns to query and display.

第二部分是确定数据来自哪些表。

[En]

The second part is to determine which tables the data comes from.

第三部分是建立两个表之间的关系,一般使用两个表的列名相同的列。

[En]

The third part is to establish the relationship between two tables, generally using the columns with the same column name of the two tables.

第四部分描述了标题中的其他条件。

[En]

The fourth part describes the other conditions in the title.

​ select ename,loc,e.deptno

​ from emp e,dept d

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

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

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’ 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;

Original: https://www.cnblogs.com/cn-zhouchao/p/16467528.html
Author: 小胖子学编程
Title: mysql中group by,having,order by,limit,distinct的用法和简单的的多表查询

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/505248/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球