SQL语句表连接之外连接(左外,右外)

 1 # 外连接示例。左外连接时,左表所有记录保持,右表无法匹配时出NULL值匹配
 2 SELECT e.empno,e.ename,d.dname FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno;
 3 # 查询每个部门的名称和人数
 4 SELECT d.dname,COUNT(e.deptno) FROM t_dept d LEFT JOIN t_emp e ON d.deptno=e.deptno GROUP BY d.deptno;
 5 # 查询每个部门的名称和人数,如果临时员工,部门名称用NULL代替
 6 (SELECT d.dname,COUNT(e.deptno) FROM t_dept d LEFT JOIN t_emp e ON d.deptno=e.deptno GROUP BY d.deptno) UNION
 7 (SELECT d.dname,COUNT(*) FROM t_dept d RIGHT JOIN t_emp e ON d.deptno=e.deptno GROUP BY e.deptno);
 8 # 查询每名员工的编号、姓名、部门、月薪、工资等级、工龄、上司编号、上司姓名、上司部门
 9 SELECT e.empno,e.ename,d.dname,e.sal+IFNULL(e.comm,0),s.grade,FLOOR(DATEDIFF(NOW(),e.hiredate)/365),z.mgrno,z.mname,z.mdname
10 FROM t_emp e LEFT JOIN t_dept d ON d.deptno=e.deptno 
11 LEFT JOIN t_salgrade s ON e.sal BETWEEN s.losal AND s.hisal 
12 LEFT JOIN (SELECT e.empno mgrno,e.ename mname,d.dname mdname FROM t_emp e JOIN t_dept d ON d.deptno=e.deptno) z ON e.mgr=z.mgrno;
13 # 外链接中ON会保留左表全部,WHERE按条件筛选
14 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;

 

posted @ 2020-03-15 21:11  萌新想吃鱼  阅读(807)  评论(0)    收藏  举报