安裝一個數據庫示例——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
記錄每個員工每段時期的職位名稱!但請注意,周期與第五張表是不同的,因為在同一職位上你也是會漲工資的嘛