1.下載與安裝
下載地址:https://github.com/datacharmer/test_db
安裝博客:https://blog.csdn.net/appleyuchi/article/details/79439387
2.ER圖
注意:這里使用單下划線表示主鍵,使用雙下划線表示即是主鍵也是外鍵。但是標准情況是使用虛線表示外鍵的,這里要注意一下
3.建表語句

CREATE TABLE employees ( emp_no INT NOT NULL, birth_date DATE NOT NULL, first_name VARCHAR(14) NOT NULL, last_name VARCHAR(16) NOT NULL, gender ENUM ('M','F') NOT NULL, hire_date DATE NOT NULL, PRIMARY KEY (emp_no) ); CREATE TABLE departments ( dept_no CHAR(4) NOT NULL, dept_name VARCHAR(40) NOT NULL, PRIMARY KEY (dept_no), UNIQUE KEY (dept_name) ); CREATE TABLE dept_manager ( dept_no CHAR(4) NOT NULL, emp_no INT NOT NULL, from_date DATE NOT NULL, to_date DATE NOT NULL, KEY (emp_no), KEY (dept_no), FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE, PRIMARY KEY (emp_no,dept_no) ); CREATE TABLE dept_emp ( emp_no INT NOT NULL, dept_no CHAR(4) NOT NULL, from_date DATE NOT NULL, to_date DATE NOT NULL, KEY (emp_no), KEY (dept_no), FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, FOREIGN KEY (dept_no) REFERENCES departments (dept_no) ON DELETE CASCADE, PRIMARY KEY (emp_no,dept_no) ); CREATE TABLE titles ( emp_no INT NOT NULL, title VARCHAR(50) NOT NULL, from_date DATE NOT NULL, to_date DATE, KEY (emp_no), FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, PRIMARY KEY (emp_no,title, from_date) ); CREATE TABLE salaries ( emp_no INT NOT NULL, salary INT NOT NULL, from_date DATE NOT NULL, to_date DATE NOT NULL, KEY (emp_no), FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE, PRIMARY KEY (emp_no, from_date) );
熟悉數據庫
1.部門員工表
我們查看部門員工表的數據量
select count(*) from dept_emp;
使用去重操作之后:
select count(distinct emp_no) from dept_emp;
我們發現有很多數據重復了。那是什么原因造成的呢?
首先我們篩選出這些重復的數據信息:
select *
from dept_emp
where emp_no in (select emp_no
from dept_emp
group by emp_no
having count(emp_no)>1
);
我們可以發現同一個員工有在不同的部門工作的經歷,說明了有331603-300024=31579名員工有調職的經歷
2.薪資表
我們可以看出這里工資記錄是按照“年”為單位進行記錄的。
通過這個表的數據來查詢資歷最高的員工:
select max(a.pnum) max_old_year
from (
select emp_no id,count(emp_no) pnum
from salaries
group by emp_no
) a;
可知該公司干的最久的員工干了18年
問題設計:
查找該公司資歷最老的員工的個人全部數據(salaries表和 employees 表)
參考博客:
http://www.cnblogs.com/stream886/p/6254630.html