sql語句真實場景
阿新 • • 發佈:2022-05-16
結合sql練習來看https://wwu.lanzouq.com/itJrv04wtveb
員工表與部門管理者表
員工表包含所有的員工(包括姓名欄位),部門管理表是隻有dept_no,emo_no,from_date(入職日期),to_data(在職日期)
獲取所有非manager的員工emp_no
1.使用兩表查詢
select e.emp_no from employees e where e.emp_no not in (select emp_no from dept_manager) # 0.232秒
2.使用查詢內連線查詢
待續
3.使用外來鍵關聯查詢
SELECT dm.emp_no # 員工表;加個命名欄位就變成了6秒 FROM dept_manager de LEFT JOIN employees dm ON de.emp_no != dm.emp_no # 返回兩表中no並不相等的欄位值
獲取所有員工當前的manager
部門員工和部門領導表
一個部門員工可有多個部門領導表
利用dept_no 關聯兩表之間的資料,
SELECT
de.emp_no,
dm.emp_no manager_no
FROM
dept_emp de
LEFT JOIN dept_manager dm ON de.dept_no = dm.dept_no
WHERE
de.to_date = '9999-01-01'
AND dm.to_date = '9999-01-01'
AND de.emp_no != dm.emp_no
1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉