1. 程式人生 > 其它 >sql語句真實場景

sql語句真實場景

結合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的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉