#查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门? SELECT e.empno,e.ename,d.dname, e.sal+IFNULL(e.comm,0),s.grade, FLOOR(DATEDIFF(NOW(),e.hiredate)/365), t.empno AS mgrno,t.ename AS mname,t.dname AS edname FROM t_emp e LEFTJOIN t_dept d ON e.deptno=d.deptno LEFTJOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal LEFTJOIN (SELECT e1.empno,e1.ename,d1.dname FROM t_emp e1 JOIN t_dept d1 ON e1.deptno=d1.deptno ) t ON e.mgr=t.empno;
外连接的注意事项
内连接只保留符合条件的记录,所以查询条件写在 ON 子句和 WHERE 子句中的效果是相同的。
但是外连接里,条件写在 WHERE 子句里,不符合条件的记录是会被过滤掉的,而不是保留下来。
ON 子句无论成立还是不成立,里面的值会都会被保留
写在 WHERE 里面会被过滤掉。
1 2 3 4 5
SELECT e.empno,e.ename,d.dname FROM t_emp e LEFTJOIN t_dept d ON e.deptno=d.deptno WHERE e.deptno=10