重新学习数据库(3)

单元概述

通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行过程,理解子查询的含义,掌握单行子查询和多行子查询的使用

测试数据脚本:

drop TABLE emp;
drop TABLE dept;
drop TABLE salgrade;
create table dept
(
deptno integer(4) not null,
dname varchar(14),
loc varchar(13)
);
alter table dept add constraint pk_dept primary key (deptno);
create table emp
(
empno integer(4) not null,
ename varchar(10),
job varchar(9),
mgr integer(4),
hiredate date,
sal decimal(7,2),
comm decimal(7,2),
deptno integer(2)
);
alter table emp add constraint pk_emp primary key (empno);
alter table emp add constraint fk_deptno foreign key (deptno) references dept (deptno);
create table salgrade
(
grade integer(1),
losal decimal(7,2),
hisal decimal(7,2)
);
insert into DEPT (DEPTNO, DNAME, LOC) values (10, ‘ACCOUNTING’, ‘NEW YORK’);
insert into DEPT (DEPTNO, DNAME, LOC) values (20, ‘RESEARCH’, ‘DALLAS’);
insert into DEPT (DEPTNO, DNAME, LOC) values (30, ‘SALES’, ‘CHICAGO’);
insert into DEPT (DEPTNO, DNAME, LOC) values (40, ‘OPERATIONS’, ‘BOSTON’);
insert into SALGRADE (GRADE, LOSAL, HISAL) values (1, 700, 1200);
insert into SALGRADE (GRADE, LOSAL, HISAL) values (2, 1201, 1400);
insert into SALGRADE (GRADE, LOSAL, HISAL) values (3, 1401, 2000);
insert into SALGRADE (GRADE, LOSAL, HISAL) values (4, 2001, 3000);
insert into SALGRADE (GRADE, LOSAL, HISAL) values (5, 3001, 9999);
— 下面要特别注意,%d-%m-%Y 里的 d 和 m 一定要小写
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, ‘SMITH’, ‘CLERK’, 7902, STR_TO_DATE(’17-12-1980′, ‘%d-%m-%Y’), 800.00, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, ‘ALLEN’, ‘SALESMAN’, 7698, STR_TO_DATE(’20-02-1981′, ‘%d-%m-%Y’), 1600.00, 300.00, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, ‘WARD’, ‘SALESMAN’, 7698, STR_TO_DATE(’22-02-1981′, ‘%d-%m-%Y’), 1250.00, 500.00, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, ‘JONES’, ‘MANAGER’, 7839, STR_TO_DATE(’02-04-1981′, ‘%d-%m-%Y’), 2975.00, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, ‘MARTIN’, ‘SALESMAN’, 7698, STR_TO_DATE(’28-09-1981′, ‘%d-%m-%Y’), 1250.00, 1400.00, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, ‘BLAKE’, ‘MANAGER’, 7839, STR_TO_DATE(’01-05-1981′, ‘%d-%m-%Y’), 2850.00, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, ‘CLARK’, ‘MANAGER’, 7839, STR_TO_DATE(’09-06-1981′, ‘%d-%m-%Y’), 2450.00, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, ‘SCOTT’, ‘ANALYST’, 7566, STR_TO_DATE(’19-04-1987′, ‘%d-%m-%Y’), 3000.00, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, ‘KING’, ‘PRESIDENT’, null, STR_TO_DATE(’17-11-1981′, ‘%d-%m-%Y’), 5000.00, null, 10);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, ‘TURNER’, ‘SALESMAN’, 7698, STR_TO_DATE(’08-09-1981′, ‘%d-%m-%Y’), 1500.00, 0.00, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, ‘ADAMS’, ‘CLERK’, 7788, STR_TO_DATE(’23-05-1987′, ‘%d-%m-%Y’), 1100.00, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, ‘JAMES’, ‘CLERK’, 7698, STR_TO_DATE(’03-12-1981′, ‘%d-%m-%Y’), 950.00, null, 30);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, ‘FORD’, ‘ANALYST’, 7566, STR_TO_DATE(’03-12-1981′, ‘%d-%m-%Y’), 3000.00, null, 20);
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, ‘MILLER’, ‘CLERK’, 7782, STR_TO_DATE(’23-01-1982′, ‘%d-%m-%Y’), 1300.00, null, 10);

高级查询单元练习:

  1. 查询部门20的员工,每个月的工资总和及平均工资。
    SELECT SUM(sal),AVG(sal)
    FROM emp
    WHERE deptno = 20;
  2. 查询工作在CHICAGO的员工人数,最高工资及最低工资。
    SELECT COUNT(*),MAX(sal),MIN(sal)
    FROM emp e,dept d
    WHERE e.deptno = d.deptno
    AND d.loc = ‘CHICAGO’;
  3. 查询员工表中一共有几种岗位类型。
    SELECT COUNT(DISTINCT job)
    FROM emp;

select job
from emp
group by job;

  1. 查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
    SELECT d.deptno,d.dname,COUNT(*),MAX(e.sal),MIN(e.sal),SUM(e.sal),AVG(e.sal)
    FROM emp e
    JOIN dept d
    ON e.deptno=d.deptno
    GROUP BY deptno;
  2. 查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
    select d.deptno,d.dname,e.job,count(*),max(e.sal),min(e.sal),sum(e.sal),avg(e.sal)
    from emp e,dept d
    where e.deptno=d.deptno
    group by d.deptno,d.dname,e.job;
  3. 查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
    SELECT COUNT(*),m.empno,m.ename
    FROM emp e
    LEFT outer JOIN emp m
    ON e.mgr=m.empno
    GROUP BY m.empno;

  4. 查询部门人数大于2的部门编号,部门名称,部门人数。
    SELECT d.deptno,d.dname,COUNT()
    FROM emp e,dept d
    WHERE e.deptno = d.deptno
    GROUP BY d.deptno
    HAVING COUNT(
    )>2;

select d.deptno,d.dname,count()
from emp e
right outer join dept d
on e.deptno=d.deptno
group by d.deptno,d.dname
having count(
)>2;
2. 查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序
SELECT d.deptno,d.dname,COUNT(),AVG(sal)
FROM emp e,dept d
WHERE e.deptno = d.deptno
GROUP BY d.deptno
HAVING COUNT(
)>2 AND AVG(sal)>2000
ORDER BY COUNT(*) ASC;

select d.deptno,d.dname,count(),avg(e.sal)
from emp e
right outer join dept d
on e.deptno=d.deptno
group by d.deptno,d.dname
having avg(e.sal)>2000 and count(
)>2
order by count(*);

  1. 查询入职日期最早的员工姓名,入职日期
    SELECT ename,hiredate
    FROM emp
    WHERE hiredate = (SELECT MIN(hiredate) FROM emp);
  2. 查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称
    SELECT e.ename,e.sal,d.dname
    FROM emp e,dept d
    WHERE e.deptno = d.deptno
    AND e.sal>(SELECT sal FROM emp WHERE emp.ename = ‘SMITH’)
    AND d.loc = ‘CHICAGO’;
  3. 查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期
    SELECT ename,hiredate
    FROM emp
    WHERE hiredate

Original: https://www.cnblogs.com/Aegeansea666/p/16484422.html
Author: Aegeansea666
Title: 重新学习数据库(3)

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

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

(0)

大家都在看

  • 删除IIS日志

    如果服务器IIS访问量比较大,那么IIS日志一定时间后会变的很大,这时候需要手动清理一下。 日志目录可以在IIS中找到。 Original: https://www.cnblogs…

    技术杂谈 2023年5月31日
    091
  • 期末代码

    使用Java的输入输出流将一个文本文件的内容按行读出,每读出一行,就顺序添加行号,并写入到另一个文件中。 import java.io.*; public class E { pu…

    技术杂谈 2023年6月21日
    093
  • SpringBoot集成JWT(极简版)

    SpringBoot集成JWT(极简版) 在WebConfig配置类中设置接口统一前缀 import org.springframework.context.annotation….

    技术杂谈 2023年7月11日
    086
  • java内存区域模型和详解

    一,概述 java虚拟机运行时数据区模型图: 主要包括:程序计数器,java虚拟机栈,本地方法栈,java 堆,方法区(元空间)。 其中堆和方法区由所有线程共享的数据区;程序计数器…

    技术杂谈 2023年7月11日
    084
  • JSON数据传输大法第一式——用OADate处理日期格式

    JSON作为一种轻量级的数据交换格式,通常采用完全独立于编程语言的文本格式来存储和表示数据。它的层次结构简洁清晰,易于人们的阅读和编写,此外机器编写和生成也会变得容易,可以有效地提…

    技术杂谈 2023年5月30日
    0138
  • 什么是CLI?

    命令行界面(英语:command-line interface,缩写]:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接…

    技术杂谈 2023年5月31日
    0101
  • acme.sh官方中文说明文档

    转载自:https://github.com/acmesh-official/acme.sh/wiki/说明 acme.sh 实现了 acme 协议, 可以从 letsencryp…

    技术杂谈 2023年5月30日
    0104
  • PyQt5 焦点控制

    ################################ PyQt5中文网 – PyQt5全套视频教程 # https://www.PyQt5.cn/ # 主讲: 村长 #…

    技术杂谈 2023年5月31日
    0128
  • 19. 二叉搜索树的插入删除修剪

    title: 二叉搜索树的插入删除修剪 📃 题目一描述 题目链接:701. 二叉搜索树中的插入操作 🔔 解题思路 递归法: 明确BST插入可以不用改变树的结构,所以找到对应的子节点…

    技术杂谈 2023年7月24日
    084
  • flowable 流程的表单设计器 动态表单 ExtJs GridPanel 动态生成表单

    Original: https://www.cnblogs.com/rgqancy/p/15943810.htmlAuthor: 任国强Title: flowable 流程的表单设…

    技术杂谈 2023年6月1日
    0110
  • 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈…

    技术杂谈 2023年5月31日
    0112
  • Java中如何通过try优雅地释放资源?

    时间紧迫,长话短说,今天,小明给大家同步一个知识点,使用 try-with-resources来优雅地关闭资源。 1. 背景 其实,在JDK 7就已经引入了对 try-with-r…

    技术杂谈 2023年7月24日
    088
  • Bootstrap表单

    Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) -> 这个不好看,都是手机版了,PC版占一排不好看; 内联表单 -> 我相信这个才是你想要的,PC版响…

    技术杂谈 2023年5月31日
    095
  • ES5 数据属性描述符和存取描述符

    一、数据属性描述符 对象是一个属性集合,对象的基本特征是属性名(name)和属性值(value)。ES5 增加了属性描述符,可以更细腻的控制属性的不同操作。属性描述符有 confi…

    技术杂谈 2023年6月1日
    095
  • 编程初学者如何使用搜索引擎

    或许你会认为这篇文章的内容极为基础。事实上,我也是这么觉得的。但从很多同学的留言来看,还是有必要简单地科普一下,分享我的一点”搜索”经验。 如果你在学习编程…

    技术杂谈 2023年7月25日
    091
  • 日常白痴_Date的比较及增减操作

    一直以来,获取日期都是用new Date(),再不然,顶多用个SimpleDateFormat规范一下格式忽然遇到需求,需要对日期增加和比较大小的时候,就又懵住了,唉,每天都为自己…

    技术杂谈 2023年7月25日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球