MySQL自连接和内连接和外连接_左外连接+右外连接
创始人
2024-01-25 17:21:15
0

自连接:将一张表看作两张表

在这里插入图片描述

练习:查询员工id,员工姓名及其管理者的id和姓名select emp.employee_id,emp.last_name,mgr.employee_id,mgr.last_name
from employees emp,employees mgr
where emp.manager_id = mgr.employee_id;

内连接

只是把左表和右表满足连接条件的数据查出来,其它的数据都没有要!!!

select employee_id,department_name
from employees e join departments d
on e.`department_id`=d.`department_id`

外连接

JOIN … ON

左外连接 left join…on

左外连接,左表和右表满足条件的数据,和左表中不满足条件的数据!!!

练习:查询所有员工的last_name,department_name信息select last_name,department_name 
from employees e left join departments d
on e.`department_id`=d.`department_id`;

右外连接 right join … on

右外连接,右表和左表满足条件的数据,和右表中不满足条件的数据!!!

练习:查询所有员工的last_name,department_name信息select last_name,department_name 
from departments d right join employees e
on e.`department_id`=d.`department_id`;

七种 SQL JOINS 的实现

在这里插入图片描述

UNION的使用

合并查询结果

  • 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。
  • 合并时,两个表对应的列数和数据类型必须相同,并且相互对应。
  • 各个SELECT语句之间使用UNION或UNION ALL关键字分隔。

UNION操作符
UNION 操作符返回两个查询的结果集的并集,去除重复记录。

UNION ALL操作符
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

注意:执行UNION ALL语句时所需要的资源比UNION语句少。
如果明确知道合并数据后的结果数据不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率

1、内连接(两表只要满足条件的)
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;

2、左外连接(左和右满足条件的,和左中不满足条件的)
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;

3、右外连接(右和左满足条件的,和右中不满足条件的)
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

4、在左外连接的基础上,右表取null值(满足条件的肯定不是null,我们不取)
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL

5、在右外连接的基础上,我们取左表的null值
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL

6、右外连接取左表null值,和左外连接合并UNION ALL
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #没有去重操作,效率高
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

7、
在这里插入图片描述

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL

相关内容

热门资讯

社保缴纳比例是硬性规定吗202...   现在的社保也就是现在的五险,很多人都还不知道今年缴纳的比例是多少,其实社保每年都是会做出调整的,...
房贷利率调整对已购房还贷的影响...   现在生活质量提升了,很多人都买了自己的房子,都会选择贷款买房,毕竟买房不是一笔小的数目,但是在贷...
人均纯收入和人均可支配收入是什...   人均可支配收入和人均纯收入是现在人们用来衡量收入水平的一个标准,虽然名字上特别相近,但是两者是有...
乐享百万太平洋保险范围都是什么...   保险对一个家庭来说是很重要的,毕竟买了有些保险看病住院几乎不花什么钱,好处是不少的,毕竟小钱能得...
全国哪些省社保联网了,社保联网...   大家应该都有听到说社保要全国联网吧,社保是我们生活中离不开的,很多的医院报销或者一些福利待遇,都...
申请低保需要什么材料,低保怎么...   全国人口有这么多的人,当然大家的家庭状况是不一样的,有富的有贫穷的,这是会有差距的。但是,有些人...
外省医保异地可以报销吗,医保异...   人都会难免会有生病的时候,谁也不能保证自己会一直不会生病的。要是生病了,买药和住院都是一笔钱,有...
怎么查生育津贴的进度?生育津贴...   生育保险大家在社保里面都有缴纳,是可以享受到里面的福利的,只要是符合生育津贴的领取标准就可以进行...
给别人寄东西怎么寄?快递哪个便...   现在国内的物流平台非常多,每家的收费情况都是不一样的。现在大家都喜欢网购,可以说物流这个行业近几...
民政网申请疫情补助申请材料及流...   近两年来,疫情肆虐,有很多行业都做不下去了,失业的人也是非常多的,影响范围比较大,国家也是相关的...