通过对MySQL语句执行顺序来理解EXISTS的用法

今天也是肥头宝的学渣进阶学习之路呢!

这几天一直在学习子查询,果不其然开始了懵逼之旅,层层嵌套,千层套路。今天则是卡在了EXISTS相关子查询里了,嘤嘤嘤。
然后弹幕推荐看了个视频语句执行顺序讲解,突然有种豁然开朗的感觉,所以今天也动动笔(键盘)总结一下吧。

还是昨天那两张表:
员工表(包含员工ID、员工名、部门ID)
部门表(包含部门ID、部门名字)
要查询有员工的部门(有的部门没有员工),用EXISTS或者IN可以实现,语法如下:

【用EXISTS】

SELECT department_name
FROM departments d
WHERE EXISTS(
	SELECT * 
	FROM employees e
	WHERE  e.department_id=d.department_id

【用IN】

SELECT department_name
FROM departments d
WHERE d.department_id IN (
	SELECT department_id
	FROM employees)

可以通过语句的执行顺序来理解(中间省略了该案例没涉及到的其他步骤):
→from子句组装度来自不同数据源的数据;
→where子句基于指定的条件对记录行进行筛问选;
→select 集合输属出。

1、先执行FROM字句,把departments表里数据逐行传递(用这个词可以吗?)到where语句里;
2、执行where语句过滤,若where后面为1,则输出需要select的字段,否则就继续执行departments表里其他行的数据;
3、输出查询到where为1的所有内容(即满足where条件的)

如:当d.department_id=1时,把该数据传递到子查询里,在e表里(子查询首先执行的语句),如果e.department_id也有为1的值,则子查询为真,筛选条件成立,输出d.department_id=1的department_name,然后继续d.department_id=2继续传递数据。
(我在说什么。。。。)

大概就是这么个意思吧。描述功底太太渣了!以后有更好的描述再重新再写写最后一段吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值