数据操作语言:表链接查询(四)

题目

查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门?

1
2
3
4
5
6
7
8
9
10
11
12
13
#查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门?
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 LEFT JOIN t_dept d ON e.deptno=d.deptno
LEFT JOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal
LEFT JOIN
(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;

5

外连接的注意事项

  • 内连接只保留符合条件的记录,所以查询条件写在 ON 子句和 WHERE 子句中的效果是相同的。
  • 但是外连接里,条件写在 WHERE 子句里,不符合条件的记录是会被过滤掉的,而不是保留下来。

6

7

  • ON 子句无论成立还是不成立,里面的值会都会被保留
  • 写在 WHERE 里面会被过滤掉。

8

9

1
2
3
4
5
SELECT
e.empno,e.ename,d.dname
FROM t_emp e LEFT JOIN t_dept d
ON e.deptno=d.deptno
WHERE e.deptno=10