- ~
查找各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號dept_nospa
CREATE TABLE `dept_manager` ( `dept_no` char(4) NOT NULL, `emp_no` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`));
select d.dept_no,s.* from salaries s,dept_manager d where s.emp_no = d.emp_no and s.to_date = '9999-01-01' and d.to_date = '9999-01-01'
查找全部已經分配部門的員工的last_name和first_namecode
CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`));
法1:12MSblog
select e.last_name,e.first_name,d.dept_no from dept_emp d inner join employees e on d.emp_no = e.emp_no;
法2:19MSrem
select e.last_name,e.first_name,d.dept_no from dept_emp d left outer join employees e on d.emp_no = e.emp_no;
查找全部員工的last_name和first_name以及對應部門編號dept_no,也包括展現沒有分配具體部門的員工it
CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`dept_no`)); CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`));
select e.last_name,e.first_name,d.dept_no from employees e left outer join dept_emp d on e.emp_no = d.emp_no; 注意: INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。 LEFT JOIN 會讀取左邊數據表的所有數據,即使右邊表無對應數據。 RIGHT JOIN 會讀取右邊數據表的所有數據,即使左邊表無對應數據。 注意on與where有什麼區別,兩個錶鏈接時用on,在使用left jion時,on和where條件的區別以下: 一、on條件是在生成臨時表時使用的條件,它無論on中的條件是否爲真,都會返回左邊表中的記錄。 二、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不爲真的就所有過濾掉。