MySQL的多表查询

224 阅读1分钟

MySQL的查询有很多种,多表查询是复杂查询的一种。 列如我们要查询出所有员工的姓名及其部门名称 我们可以用这一种方法 SELECT ename,dname FROM emp,dept WHERE deptId=did; SELECT emp.ename,dept.dname FROM emp,dept WHERE deptId=did; 但是这种方法无法查询出没有部门的员工,也无法出没有员工的部门 为了解决以上问题,提出了新的多表查询语法 第一种就是 ①内连接 —— inner join SELECT ename,dname FROM emp INNER JOIN dept ON deptId=did; 和前边的查询结果一样 还有 ②左外连接 —— left outer join SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did; 显示左侧表中所有记录,先写哪个表哪个就是左 outer关键字可以省略的 ③右外连接 —— right outer join SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did; 显示右侧表中所有记录,后写哪个表哪个就是右 outer关键字可以省略的 ④全连接——full join 显示左侧和右侧表中所有记录,即使没有对应的 mysql不支持全连接 解决方案:将左外和右外查询的结果联合起来。 union all 联合后,不合并相同的记录 union 联合后,合并相同的记录 SELECT ename,dname FROM emp LEFT OUTER JOIN dept ON deptId=did union SELECT ename,dname FROM emp RIGHT OUTER JOIN dept ON deptId=did;