MySQL中的多表查询

MySQL中的多表查询

单表查询一般不能满足项目的需求,在真实的开发过程中,有很多需求都是要涉及到多表查询,

在此总结一下MySQL中的多表查询:

一、内连接查询

指所有的查询出的结果都能在连接表中有对应的记录;
以员工表和部门表为例:
element表:
img
department表:
img

可以发现在人力资源部没有员工,赵七没有对应的部门,
如果要查询员工姓名和相关部门名称,此时应该使用内连接,关键字(inner join)
在此说一下关联查询sql编写的思路:

  1. 确定所连接的表
  2. ——要查询的字段
  3. ——连接条件和连接方式
select e.empName, d.deptName 
	from t_employee e 
	INNER JOIN t_dept d 
	ON e.dept = d.id;

查询结果:没有赵七
img

内连接的特点:只查询在连接表中能够有对应的记录(就是在员工表中有外键对应)

二、左外连接查询

指以左边的表中的数据为基准,去匹配右面表中的数据,
如果匹配到就显示出来,如果匹配不到就显示为null;
例如:在上一个例子中,我要显示赵七,怎么办???关键字( left outer join)

SELECT e.empName, d.deptName
	from t_employee e
	LEFT OUTER JOIN t_dept d 
	on d.id = e.dept;

查询结果:赵七没有对应部门img

三、右外连接

如:查询所有部门的对应员工。。。关键字( right outer join)

SELECT e.empName, d.deptName
	from t_employee e
	RIGHT OUTER JOIN t_dept d 
	on d.id = e.dept;

查询结果:人力部门没人:
img

四、全外连接

将两张表中的所有字段都查出来,没有对应的值就显示null,
如果要达到全外连接的效果,可以使用union关键字连接左外连接和右外连接。关键字( union)
例如:

select e.empName,d.deptName
     FROM t_employee e 
     left JOIN t_dept d
     ON e.dept = d.id
UNION
select e.empName,d.deptName
     FROM t_employee e 
     RIGHT JOIN t_dept d
     ON e.dept = d.id;

查询结果:
img
如果在oracle中,直接就使用 full outer join 关键字连接两表就行了;

五、自连接查询

自连接:当前表与自身的连接查询, 关键点:虚拟化一张表给别名
例如:查询员工以及他的上司的名称。。。关键字:left join
由于上司也是员工,所以虚拟化出一张上司表

SELECT e.empName, b.empName
     from t_employee e
     LEFT JOIN t_employee b
     ON e.bossId = b.id;

查询结果:
img

猜你喜欢

转载自blog.csdn.net/Xxacker/article/details/85253999