外连接:
左外:SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
左表记录无论是否满足条件都会查询出来,而右表只有满足条件才能出来。左表中不满足条件的记录,右表部分都为NULL
左外自然:SELECT * FROM 表1 别名1 NATURAL LEFT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
右外:SELECT * FROM 表1 别名1 RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
右表记录无论是否满足条件都会查询出来,而左表只有满足条件才能出来。右表中不满足条件的记录,左表部分都为NULL
右外自然:SELECT * FROM 表1 别名1 NATURAL RIGHT OUTER JOIN 表2 别名2 ON 别名1.xx=别名2.xx;
全外连接(FULL OUTER JOIN,但mysql不支持):可以使用UNION来完成全连接。
# 外连接
# 外连接有一主一次,左外即左表为主
# 即emp为主,那么主表中所有的记录无论满足不满足条件,都打印出来
# 当不满足条件时,右表部分使用NULL来补位
SELECT e.ename,e.sal,IFNULL(d.dname,'无部门') AS dname
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;
SELECT e.ename,e.sal,d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;
# 全外连接
SELECT e.ename,e.sal,d.dname
FROM emp e LEFT OUTER JOIN dept d
ON e.deptno=d.deptno
UNION
SELECT e.ename,e.sal,d.dname
FROM emp e RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;