文章目录

  • 一、分组函数(聚合函数)
    • 1、介绍
    • 2、格式
    • 3、常用函数
      • (1).MIN函数、MAX函数
      • (2).SUM函数、AVG函数
      • (3).COUNT函数
    • 4、group by子句
    • 5、having子句
  • 二、子查询(嵌套查询)
    • 1、单行子查询
    • 2、多行子查询

一、分组函数(聚合函数)

1、介绍

分组查询对数据行的集合进行操作并按组给出一个结果

2、格式

select [列名列表,] 分组函数(列)
from 表名
[where 条件语句]
[group by 列]
[having 关于 分组函数(列) 的条件表达式]
[order by 列 | 表达式]

3、常用函数

(1).MIN函数、MAX函数

使用示例

select min(hiredate), max(hiredate)
from emp;

注意点

  • minmax在没有使用group by子句的情况下,不要查询其他列(因为这样没有意义)

(2).SUM函数、AVG函数

使用示例

select max(sal) 最高工资, min(sal) 最低工资, avg(sal) 平均工资, sum(sal) 工资总和
from emp
where job="SALESMAN";-- 发奖金的员工的平均奖金
select avg(comm) from emp;-- 所有员工的平均奖金
select avg(ifnull(comm, 0)) from emp;

注意点

  • 所有聚合函数在有where子句的情况下,where子句会被执行,然后再分组
  • sum函数、avg函数不会对null值进行统计,可以使用ifnull函数强制对空值进行统计

(3).COUNT函数

使用示例

-- 员工人数
select count(*) from emp;-- 拿薪水的员工人数
select count(sal) from emp;-- 拿奖金的员工人数
select count(COMM) from emp;-- 员工的部门数
select count(distinct deptno) from emp;

注意点

  • count不会为null的列进行计数
  • 要消除重复行的计数需要加上关键字distinct

4、group by子句

使用示例

-- 查询所有部门的平均工资,并进行升序排列
select d.dname 部门名称, avg(sal) 部门平均工资
from emp e
join dept d
on e.deptno = d.deptno
group by d.dname
order by 2;-- 按每个部门、每个岗位显示部门名称、岗位、平均工资,并按照平均工资进行升序排列
select d.dname 部门名称, e.job 岗位, avg(e.sal) 平均工资
from emp e
join dept d
on e.deptno = d.deptno
group by d.dname, e.job
order by avg(e.sal);

注意点

  • group by中出现的列,尽可能出现在select中
  • group by中未出现的列,在select中应该使用聚合函数

5、having子句

作用
使用having子句排出组结果

使用示例

-- 查询平均工资大于2900的部门
select d.dname, max(sal)
from emp e
join dept d
on e.deptno = d.deptno
group by d.dname
having max(sal) > 2900--
select job, avg(sal) 平均工资
from emp
where job in ('CLERK', 'SALEMAN', 'MANAGER')
group by job
order by avg(sal);

注意点

  • where子句不能限制分组函数的条件,必须用having子句来限制
  • SQL语句执行顺序:
    select(获取表数据)→where(筛选)→group by(分组)→having(筛选)→select(整理分组后的数据)→order by(排序)

二、子查询(嵌套查询)

1、单行子查询

使用示例

-- 查询比JONES员工工资高的其他员工
select ename
from emp
where sal > (select sal from emp where ename = 'JONES');-- 错误示例
select ename
from emp
where sal > (select sal from emp where ename in ('JONES', 'SCOTT'));

注意点

  • 不能拿单个值和嵌套查询结果的多行值进行大小比较

2、多行子查询

说明
子查询返回的记录条数也可以是多条,这时候往往就需要使用多行操作符(inanyall

使用示例

-- 多列相等也可以直接等值判断
select empno, ename, sal
from emo
where (ename, sal) = (select ename, sal from emp where empno = 7902);-- 查询管理者
select ename, sal
from emp
where empno in (select mgr from emp)-- 查询工资比JONES或SCOTT中的某一个大的所有员工
select ename, sal
from emp
where sal > any (select sal from emp where ename in ('JONES', 'SCOTT'));-- 查询工资比JONES或SCOTT中的所有都大的所有员工
select ename, sal
from emp
where sal > all (select sal from emp where ename in ('JONES', 'SCOTT'));-- 查询管理者的姓名和薪水
select ename, sal
from emp e
where empno exists (select mgr from emp m where m.mgr = e.empno)-- 查询不是管理者的员工的姓名和薪水
select ename, sal
from emp e
where empno not exists (select mgr from emp m where m.mgr = e.empno)

注意点

  • 对于anyall,可以近似理解为数学意义上的存在任意
  • 注意null值的处理,要使用exists关键字而不是in关键字

《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·010【高级查询】相关推荐

  1. 阿里云原生数据仓库AnalyticDB MySQL版学习

    阿里云原生数据仓库AnalyticDB MySQL版是融合数据库.大数据技术于一体的阿里云原生企业级数据仓库服务.AnalyticDB MySQL版支持高吞吐的数据实时增删改.低延时的实时分析和复杂E ...

  2. SQL必知必会(第五版)学习笔记

    文章目录 第一课 了解SQL 1.1数据库基础 1.1.1 数据库(database) 1.1.2 表(table) 1.1.3 列和数据类型 1.1.4 行(row) 1.1.5 主键(primar ...

  3. sql必知必会(第四版) 学习笔记二 视图

    本书用到的几个表的建表sql语句如下: --销售产品供应商 CREATE TABLE Vendors (vend_id varchar(20) not null,vend_name varchar(5 ...

  4. sql必知必会(第四版) 学习笔记一

    温习一遍简单的sql语法,把自己掌握还不够的地方,做了些笔记.... 1 去重复关键词,distinct select distinct sname from student; 2 限制结果top的用 ...

  5. 云原生数据仓库AnalyticDB MySQL版用户手册

    控制流函数 - 云原生数据仓库AnalyticDB MySQL版 - 阿里云 [ps:常用的adb函数] 备注:一些mysql函数adb不支持

  6. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

  7. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  8. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. 最新、最全、最详细的 MySQL 数据库学习笔记总结(2021最新版)

    数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统. DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 ...

  10. MySQL语法学习笔记

    MySQL语法学习笔记 学习之道,非尽心竭力者不能进也!我是小七黛,欢迎查看我的笔记,有问题欢迎交流探讨. SQL是一种结构查询语言,用于查询关系数据库的标准语言,包括若干关键字和一致的语法,便于数据 ...

最新文章

  1. 计算机网络管理的常用命令,网络管理常用命令图文详解.pdf
  2. 取代人类医生?AI给你做的诊断你敢信吗
  3. Tensorflow:如何保存/恢复模型?
  4. 汉语转拼音pinyin4j
  5. html text全删,删除没有/ text()。extract()的HTML标记
  6. c++ 一个函数包括多个返回值判断_轻松玩转函数式编程
  7. Oracle基本查询
  8. 我的Android学习之旅--1环境配置
  9. View结合组策略进行应用程序下发
  10. linux双网卡绑定同一IP步骤,linux系统双网卡绑定单个IP地址
  11. 项目以任务还是以功能为中心?
  12. 易语言中动态地址的理解
  13. java thread 线程_Java Thread类简述
  14. Python 如何拆分数据集
  15. 测试后台管理系统思路和方法
  16. 台式计算机cpu允许温度,玩游戏cpu温度多少正常(台式电脑夏季CPU一般温度多少)...
  17. 达芬奇密码--buuctf密码学
  18. 使用Git提交代码时出现Author identity unknow
  19. wamp下载和使用PHPDocumentor
  20. Guacamole会话记录屏幕录像

热门文章

  1. android每秒 1,在Android 5.1中调度每秒的警报
  2. html 空格占位符_HTML常用英文单词,快来背单词吧
  3. 让电脑代码满屏飞_程序员想让你的电脑死机,需要多久?
  4. Javaspring 1-6课 基本概念及第一个Javaspring程序
  5. 推荐几个值得关注的爬虫库
  6. WampServer安装教程
  7. Tutorial of Codeforces Round 729 (Div.2)
  8. Python中Youki使用索引快速为数组或矩阵赋值的技巧
  9. Markdown数学公式、特殊字符、上下标、积分、分式/根式 亲测有效
  10. maven的setting文件简单配置