Mysql之外连接

引出

在这里插入图片描述

完成上面的需求
其实我们只能写出
SELECT dname,ename,job 
		FROM emp,dept
		WHERE emp.detno=dept.deptno
		ORDER BY dname
因为我们要根据匹配条件筛选,这样就把那些没有人的部门其实已经筛选掉了
后半部分的显示出那些没有员工的部门做不到,40号部门就没有员工
那么怎么操作呢?-外连接可以解决

我们的dept表
在这里插入图片描述

简单介绍

在这里插入图片描述

外连接分为左外连接和右外连接,计算没有匹配也能显示左表或右表
举例说明吧
在这里插入图片描述

-- stu表
CREATE TABLE stu(
	id INT,
	`name` VARCHAR(32));

INSERT INTO stu VALUES (1,'jack'),(2,'tom'),(3,'kitty'),(4,'nono')
SELECT * FROM stu 
-- exam表
CREATE TABLE exam (
	id INT,
	grade INT)
INSERT INTO exam VALUES (1,56),(2,76),(11,8)
SELECT * FROM exam
-- 使用左连接,显示所有人成绩,没有成绩也要显示姓名id
-- 没学外连接前实现不了
SELECT stu.id,`name`,grade
	FROM stu,exam
	WHERE stu.id=exam.id
-- 使用左外连接 
SELECT stu.id,`name`,grade
	FROM stu LEFT JOIN exam
	ON stu.id=exam.id
	-- 就是把两表间的 ,换成LEFT JOIN,然后WHERE换成ON
-- 使用右外连接(显示所有成绩,没有名字匹配,名字栏显示空)
SELECT stu.`id`,`name`,grade
	FROM stu RIGHT JOIN exam
	ON stu.id=exam.id

左连接效果
在这里插入图片描述
右连接效果
在这里插入图片描述

练习

在这里插入图片描述

-- 1.左外连接实现	
SELECT emp.deptno,dname,job,ename
	FROM dept LEFT JOIN emp
	ON dept.deptno=emp.deptno
	ORDER BY deptno
-- 2.右外连接实现
SELECT emp.`deptno`,dname,job,ename
	FROM emp RIGHT JOIN dept
	ON dept.`deptno`=emp.`deptno`
	ORDER BY deptno

==易错:1.WHERE 没有换成ON 2.LEFT JOIN是左表全显示,RIGHT是右表全显 ==

其实下图这种就叫内连接,内连接还是比较多用的,按照场景使用-当然最多使用还是 FROM WHERE
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值