多表查询/跨表查询
示例:查询所有的员工姓名及其所在部门的名称
SELECT ename,dname FROM emp,dept WHERE deptId=did;
注意:为了防止出现笛卡尔积,在多表查询的时候,需要添加查询条件
问题:无法查询出部门为NULL的员工,也无法查询出没有员工的部门。
解决:
SQL99中的多表查询:
(1)内连接 INNER JOIN .. ON
SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did;
(2)左外连接 LEFT OUTER JOIN .. ON
SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did;
(3)右外连接 RIGHT OUTER JOIN .. ON
SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;
说明:outer关键字可以省略的;
LEFT连接是以FROM后的表格在左,再去dept查找值
RIGHT连接是JOIN后表格为主,去emp查找对应值
(4)全连接 FULL JOIN
MYSQL 不支持全连接
UNION/UNION ALL
UNION ALL 两组数据出现了相同项不合并
UNION 两组数据出现了相同项进行合并
(SELECT …)UNION(SELECT …);