多表查询。笛卡尔积查询,内连接,外连接
如果想查询出每个部门,和每个部门对应的员工的名字。(dept,emp两张表)。
图1笛卡尔积查询
笛卡尔积查询:
将两张表的记录进行一个相乘的操作查询出来的结果就是笛卡尔积查询,如果左表有n条记录,右表有m条记录,笛卡尔积查询出有n*m条记录,其中往往包含了很多错误的数据,所以这种查询方式并不常用。
select * from dept,emp;
图2内连接查询
内连接查询:查询的是左边表和右边表都能找到对应记录的记录
select * from dept,emp where dept.id =emp.dept_id;
select * from dept inner join emp ondept.id=emp.dept_id;(两种写法)
图3左外连接查询
外连接查询:
左外连接查询:在内连接的基础上增加左边表有而右边表没有的记录
select * from dept left join emp ondept.id=emp.dept_id;
图4右外连接查询
右外连接查询:在内连接的基础上增加右边表有而左边表没有的记录
select * from dept right join emp ondept.id=emp.dept_id;
图5全外连接查询
全外连接查询:在内连接的基础上增加左边表有而右边表没有的记录和右边表有而左表表没有的记录
select * from dept full join emp ondept.id=emp.dept_id; -- mysql不支持全外连接
可以使用union关键字模拟全外连接:
select * from dept left join emp on dept.id= emp.dept_id
union
select * from dept right join emp on dept.id= emp.dept_id;