MySQL练习-employees数据库

安装一个数据库示例——employees

使用工具为Navicat——(ctrl + q: 打开新查询窗口

ctrl + r: 运行当前窗口内的所有语句)

参考http://www.cnblogs.com/chenyucong/p/5734800.html


该数据库中有6张关联,记录的数据为某一公司9个部门所有员工的薪资(包括离职员工),以下为关系图。

第一张表:departments

记录的是9个部门的部门编号和部门名称

第二张表:dept_emp

部门员工数据,员工id和部门id,其实时间和结束时间(注:9999的意思就是仍在职)

统计一下这张表的数据量,331603条记录

SELECT COUNT(*) FROM dept_emp

再统计一下员工id(emp_no)的去重数量,300024条记录

SELECT COUNT(DISTINCT emp_no)
FROM dept_emp

差异3W条,为什么?有重复出现的员工id,我们尝试把重复出现员工id筛选出来

SELECT emp_no
FROM dept_emp
GROUP BY emp_no
HAVING COUNT(emp_no)>1

好了,现在有了那近3W个有重复值的员工id,但我们仍然不清楚重复的原因,现在需要跟着重复员工id把完整的信息筛选出来

SELECT *
FROM dept_emp
WHERE emp_no IN (SELECT emp_no
FROM dept_emp
GROUP BY emp_no
HAVING COUNT(emp_no)>1
)

现在结果很明确,他们是调部门了!所以该表记录是数据真实含义是每个员工在每个部门所待的时间跨度。

但同时,也存在一个有趣的现象,就是没有一个员工是调过两次部门的,证明如下

SELECT *
FROM dept_emp
WHERE emp_no IN (SELECT emp_no
FROM dept_emp
GROUP BY emp_no
HAVING COUNT(emp_no)>2
)

这个现象我们看看能不能在接下的表中又所发现

第三张表:dept_manger

同第二张表结构差不多,每个部门的每个经理的任职时期,总共就24个人,每个部门至少有过两个经理。

SELECT COUNT(DISTINCT emp_no) AS manger_sum
from dept_manager
GROUP BY dept_no

第四张表:employees

员工信息表,emp_no是唯一键值,

统计结果与表二得出的数据一致。

SELECT COUNT(*)
FROM employees;

第五张表:salaries

记录每个员工每段时期的薪资!

第六张表:title

记录每个员工每段时期的职位名称!但请注意,周期与第五张表是不同的,因为在同一职位上你也是会涨工资的嘛

时间: 2024-10-10 09:18:36

MySQL练习-employees数据库的相关文章

实验十--- MySQL过程式数据库对象

实验十 MySQL过程式数据库对象 一.  实验内容: 1. 存储过程的创建和调用 2. 存储函数的创建和调用 3. 触发器的创建和触发 4. 事件的创建和修改 一.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary(员工薪水情况表). 二.  实验步骤:(要求创建成功后,必须调用或触发) 1.   创建存储过程,使用Employees表中的员工人数来初

mysql/sqlser/oracle数据库驱动的写法

oracle数据库:  driver="oracle.jdbc.driver.OracleDriver" url = "jdbc:oracle:thin:@地址:端口:数据库名" mysql数据库: driver="com.mysql.jdbc.Driver" url = "jdbc:mysql://地址:端口/数据库名?user=root&password=root&useUnicode=true&charac

mysql基础和数据库的优化

Mysql基础... 4 Mysql介绍... 4 登录mysql mysql –u root –p[掌握]... 4 SQL语言... 4 DCL. 4 grant. 4 revoke. 4 DDL. 4 建库... 4 删库... 4 建表... 4 看表结构... 5 删表... 5 修改表... 5 DML[重点]... 5 增加... 5 删除... 5 修改... 5 查看... 5 排序... 5 总数... 5 求和... 5 平均... 6 最大... 6 最小... 6 表连

Java 调用Mysql dump 备份数据库

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); try { String name = sdf.format(new Date()); String filePath = System.getProperty("user.dir") + "//" + name + ".sql"; // 系统执行器 Runtime rt = Runtime.getRu

mySQL (关系型数据库管理系统)

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件. MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. MySQL所使用的 SQL 语言是用于访问

180多个数据库版本一键切换,PHPWAMP8.8.8.8(支持切换任意数据库,全面支持mysql等常见数据库)

PHPWAMP8.8.8.8版本支持一键切换数据库的PHP集成环境,纯绿色 支持切换任意数据库,默认全面支持mysql等常见数据库) 最新最旧版本的数据库都可以切换,同时运行不同版本的数据库! 完美兼容任何集成环境,多开,群开无压力,满足各种变态测试! 只需点击相关设置,切换你想要的任意版本即可,真正的一键自定义! 在一键自定义同时,完美兼顾用户的自主修改,各种DIY自定义 1.支持一键自定义设置MYSQL版本,180多个MYSQL历史版本随意切换! 2.优化旧版本的"700多个PHP版本随意切

mysql for linux 数据库的安装过程

mysql for linux 数据库的安装过程 l  安装版本:mysql-advanced-5.6.12-linux-glibc2.5-x86_64.tar.gz ,此版本是绿色版本,只需要将其解压到相关目录即可. PS:此安装方法为不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件 PS:Mysql下载地址:http://pan.baidu.com/s/1eQJhoLO 1.创建mysql用户/账号 [[email protected] ~]#  groupad

使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MySQL Workbench建立数据库,建立新的表,为表添加数据. 点击上图中的“加号”图标,新建一个连接, 如上图,先输入数据库的账号密码,帐号默认为root,填好密码后 点击“OK”,连接就建立好了,建立完成后,会出现一个长方形的框框,双击它,出现下图所示页面 点击图中的红圈里的按钮,新建一个Schema,即数据库(个人理解..),修改一下Name 的值,如  mydat

mysql导入导出数据库(转)

很多时候,我们的数据开发都会用到很多开发利器,比如powerdesigner, navicat等这些软件,虽然好用,但是要收费,在公司里面是禁止使用盗版软件的,怕罚款各方面的,所以我们也不敢直接在公司的机子上装破解版,这个时 候,如果我们要导入或者导出sql语句怎么办,虽然也有免费的软件如mysql-workbench的存在,但是不好用啊,操作复杂麻烦,要说好处吧,个 人觉得就是记住密码和ip地址用户名这些方便咯,当然实际上它还是很强大的. 好吧,言归正传,其实,最简单的方法,就是直接使用mys