1、分组查询:group by

通常和聚合函数结合使用,以组为单位进行统计,一般情况下,题目中每个XX就在group by后面写这个XX;

例:查询每个部门的最高工资:

select deptno,max(sal) from emp group by deptno;

例:查询每个分类下的商品最大价格:

select category_id,max(price) from t_item group by category_id;

例:查询每个部门中工资大于1500的人数:

select deptno,sal from emp where sal > 1500 group by deptno;

例:查询每个领导手下的人数:

select mgr,count(*) from emp where mgr is not null group by mgr;

如果需要使用多个字段进行分组,直接在group by后面写多个字段名通过逗号分隔:

例:查询按每个部门下每个领导的手下人数:

select deptno,mgr,count(*) from emp where mgr is not null group by deptno,mgr;

having:要写在group by后面和它结合使用:

where:后面只能写普通字段的条件不能写聚合函数;

having:后面可以写普通字段条件也可以写聚合函数推荐在having后面只写聚合函数;

例:查询每个部门的平均工资,要求平均工资大于2000:

select deptno,avg(sal) a from emp group by deptno having a > 2000;

例:查询每个分类的平均单价,过滤掉平均单价低于100的:

select category_id,avg(price) a from t_item group by category_id having a >= 100;

2、子查询:

例:查询emp表工资中最高的员工信息:

正常情况下需要查出最高工资的员工,然后再查出员工的信息:

select max(sal) from emp;(查询结果为5000)

select * from emp where sal = 5000;

使用子查询:

select * from emp where sal = (select max(sal) from emp);

例:查询工资最低的员工的所在部门的同事信息:

首先查询到工资最低的员工:

select min(sal) from emp;

通过最低工资找到所在部门编号:

select deptno from emp where sal = (select min(sal) from emp);

通过编号找到其他的员工信息:

select * from emp where deptno = (select deptno from emp where sal = (select min(sal) from emp));

扩展题:查询平均工资最高的部门信息:

得到每个部门的平均工资:

select deptno,avg(sal) from emp group by deptno;

得到最高的平均工资:

select avg(sal) a from emp group by deptno order by a desc limit 0,1;

通过最高的平均工资得到部门编号:(这里为了严谨考虑有多个部门工资平均值相同且为最高平均工资的情况)

select deptno from emp group by deptno having avg(sal) = (select avg(sal) a from emp group by deptno order by a desc limit 0,1);

通过部门编号获得部门信息:

select * from dept where deptno in(select deptno from emp group by deptno having avg(sal) = (select avg(sal) a from emp group by deptno order by a desc limit 0,1));

子查询可以写在什么位置:

写在where或having后面,当做查询条件的值;

写在创建表的时候,把查询结果保存成一张新的表;

写在from的后面当成一张虚拟表,必须有别名。

3、关联查询:

同时查询多张表的数据称为关联查询(能查询到的只能是两张表的交集)。

例:查询每一个员工的姓名和对应的部门名称:

select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;

笛卡尔积:如果关联查询不写关联关系则结果为两张表的乘积,这个乘积称为笛卡尔积,笛卡尔积为一种错误的查询结果,切记工作中不要出现。

关联查询的查询方式:等值连接和内连接

等值连接:select * from A,B where A.x = B.x and A.age = 18;

内连接:select * from A [inner] join B on A.x = B.x where A.age = 18; [inner]可以省略不写

等值连接和内连接查询到的内容一样,都为两张表中有关联关系的数据(交集部分)。

例:查询每一个员工的姓名和对应部门名称:(用内连接的方式)

select e.ename,d.deptno from emp e join dept d on e.deptno = d.deptno;

外连接:内连接和等值连接查询到的是交集数据,外连接查询到的是某一张表的全部数据 + 另一张表的交集数据。

左/右外连接:select * from A left/right join B on A.x = B.x where A.age = 18;(左外连接就是以左边的表即A为主表和右边表的交集)

关联查询总结:

关联查询的查询方式:等值连接、内连接、外连接;

如果想查询的数据为两张表的交集数据使用等值连接和内连接(推荐);

如果查询的数据是一张表的全部数据和领一张表的交集数据则使用外连接;

mysql关联分组查询,Mysql 分组查询/子查询/关联查询【总结】相关推荐

  1. MySQL基础——数据库和SQL概述\MySQL基本使用\DQL语言学习\条件查询\排序查询\常见函数\分组查询\连接查询\子查询\分页查询\联合查询

    本文详细讲解了MySQL中DQL语言,也就是数据查询语句的使用.全文3w余字,是对学习MySQL知识的整理总结,因为篇幅较长,MySQL基础知识余下部分发表在余下博客中 DML语言学习\插入数据\删除 ...

  2. MySQL核心查询-排序 分组 聚合 多表查询 合并查询 子查询

    目录 一.单表查询 排序 聚合函数 分组 limit关键字 二.SQL约束 主键的自增 DELETE和TRUNCATE对自增长的影响 三.多表查询 外键约束 删除外键约束 多表查询的分类 内连接查询 ...

  3. mysql 分组联合查询_【MySQL】-2 函数、分组、子查询、联合查询

    函数 Mysql的函数特性没有SQL可移植性强. 大多数情况下支持的函数: 处理文本串的函数: RTrim():处理列值右边的空格 LTrim():处理列值左边的空格 Trim():处理列值的左右两边 ...

  4. MySQL(八)子查询和分组查询

    一.子查询 1.子查询(subquery):嵌套在其他查询中的查询. 例如:select user_id from usertable where mobile_no in (select mobil ...

  5. 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询

    约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...

  6. mysql 连边聚合_MySQL分组,聚合函数,连表查询,子查询

    >>>分组: group by + group_concat 分组:类似于将一个班级的学生,按照性别或其他条件,分成若干个组,最终以小组为单位显示,如上图中,以post字段对表进行分 ...

  7. mysql 子查询分组_mysql之子查询与分组查询

    有时候需要对查询结果进行分组,以便于我们对分组后的数据进行计算,可以使用数据分组操作 数据分组查询 group by 需要注意的是group by只是创建分组.并不能保证分组里面的数据排序.如果需要排 ...

  8. mysql 子表 关联查询语句_MySQL-基本查询语句及方法,连表和子查询

    一.基本查询语句 create table emp( id intnotnull unique auto_increment, name varchar(20) notnull, sex enum(' ...

  9. mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...

    比如当前有如下的消息表(messages)及示例数据: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_ ...

  10. mysql 子表 关联查询语句_MySQL基本SQL语句之单表查询、多表查询和子查询

    一.简单查询: 基本语法:SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * FR ...

最新文章

  1. c#自定义控件窗体Click无法点击Lable的处理解决方案
  2. mysql获取多层嵌套json_使用两个mySQL查询来创建嵌套的JSON数组
  3. IDEA 启动 Tomcat 乱码 解决办法
  4. Docker 原理、学习教程
  5. jmeter服务器性能资源监控部署
  6. 发布代码小助手V2.1发布了——Code2HTML工具
  7. mysql 刘道成视频教程 第4-8课 --- 数据类型
  8. Spring AOP配置
  9. 无悔入华夏怎么一直显示服务器,无悔入华夏祭祀玩法怎么玩 无悔入华夏祭祀怎么触发?...
  10. 熟悉 CMake (三)—— 配置 opencv3
  11. CQUOJ月赛(5月)H题:zzblack与斐波那契数列
  12. Access to the path Library\UnityAssemblies\UnityEngine.xml is denied.
  13. 设计模式那点事读书笔记(3)----建造者模式
  14. SQL 日期函数的使用方法
  15. android 平板重装系统,平板电脑系统重装方法
  16. vue.js ui框架_定制的第一个Vue.js电子商务UI框架
  17. 谈谈如何写好一份简历
  18. 休问情怀谁得似——冰雪小五台苦旅记(十完结篇)
  19. Linux 查看quota状态,Linux命令之quota详解
  20. 截取固定大小图片css,css-使不同大小的图片在固定大小的容器中居中

热门文章

  1. 无线网络安全技术基础
  2. silverlight 初始页面进行安装主应用(初始安装xap,本地加载xap),实现silverlight程序成桌面应用程序。
  3. 采用 Python 机器学习预测足球比赛结果
  4. Ant 执行 YUICompressor
  5. 开天辟地-Go语言的见面仪式
  6. Nvidia GPU Architecture--Fermi架构笔记
  7. ZT: 排名前50个常用软件下载(带序列号)
  8. QuartZ 配置第一次不执行后续正常执行
  9. 项目立项,项目经理需要做什么
  10. 老男孩LINUX50期_陈桂林决心书