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

 記錄每個員工每段時期的職位名稱!但請注意,周期與第五張表是不同的,因為在同一職位上你也是會漲工資的嘛

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM