【心得分享】-- 关系型数据库中七种常见的join(连接)查询

1.1 什么是join查询?

join查询,即连接查询,当我们需要查询两张或两张以上表的关联数据的时候就需要使用连接查询,数据库中的连接查询分为:内连接查询(INNER JOIN)、左外连接查询(LEFT OUTER JOINLEFT JOIN)、右连接查询(RIGHT OUTER JOINRIGHT JOIN)以及全连接查询(FULL OUTER JOIN)。

1.2 内连接、外连接、全连接查询之间的区别是什么?

类型 描述 图示
INNER JOIN 内连接查询,会把关联表中,有关联关系的所有记录查询出来 【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第1张图片
LEFT JOIN 左连接查询,它会以左表为主表,并且会将左表中的所有记录查询出来,如果右表没有与之对应关联数据,则用NULL填充指定字段 【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第2张图片
RIGHT JOIN 右连接查询,它会以右表为主表,并且会将右表中的所有记录都查询出来,如果左表中没有与之对应的关联数据,则用NULL填充左表中的指定字段 【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第3张图片
FULL OUTER JOIN 全连接查询,会将关联表中的所有数据都查询出来 【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第4张图片

1.3 常见的七种join查询

【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第5张图片

1.3.1 使用mysql实现以上七种join查询

部门表

SELECT * FROM tbl_dept;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第6张图片
员工表

SELECT * FROM tbl_emp;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第7张图片

1.3.1.1 内连接查询

#内连接查询 查询两张表都有的记录
SELECT * FROM tbl_dept dept
INNER JOIN tbl_emp emp
ON dept.id=emp.id;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第8张图片

1.3.1.2 左连接查询

#左连接查询  只查询左表中有的记录
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第9张图片

1.3.1.3 右连接查询

#右连接查询
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第10张图片

1.3.1.4 只查询左表中独有的数据

#查询dept表中独有的记录
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE emp.deptId IS NULL;

查询结果:
在这里插入图片描述

1.3.1.5 只查询右表中独有的数据

#查询emp表中独有的记录
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE dept.id IS NULL;

查询结果:
在这里插入图片描述

1.3.1.6 全连接查询

注意:因为mysql不支持full outer join所以通过union实现全连接查询

#把两张表中的记录都查询出来 并进行去重 因为mysql不支持full outer join所以通过union实现全连接查询
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
UNION
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId;

查询结果:
【心得分享】-- 关系型数据库中七种常见的join(连接)查询_第11张图片

1.3.1.7 查询两张表中各自独有的数据

#查询两张表中所有没有关联关系的记录
SELECT * FROM tbl_dept dept
LEFT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE emp.deptId IS NULL
UNION
SELECT * FROM tbl_dept dept
RIGHT JOIN tbl_emp emp
ON dept.id=emp.deptId
WHERE dept.id IS NULL;

查询结果:
在这里插入图片描述

你可能感兴趣的:(mysql,心得分享,开发技巧)