sql - where子句和join的区别
问题描述
我对 SQL 很陌生,目前是我一生中第一次使用 joins。我现在想弄清楚的是试图找出查询之间的区别。
查询一:
SELECT name
FROM actor
JOIN casting ON id = actorid
where (SELECT COUNT(ord) FROM casting join actor on actorid = actor.id AND ord=1) >= 30
GROUP BY name
查询 2:
SELECT name
FROM actor
JOIN casting ON id = actorid
AND (SELECT COUNT(ord) FROM casting WHERE actorid = actor.id AND ord=1)>=30)
GROUP BY name
所以我认为这样做
FROM casting join actor on actorid = actor.id
在子查询中是一样的
FROM casting WHERE actorid = actor.id.
但显然不是。谁能帮我解释一下为什么?
编辑:如果有人想知道:查询基于来自http://sqlzoo.net/wiki/More_JOIN_operations的问题 13
解决方案
在第二个查询中,您的嵌套查询actor.id
从其根查询中获取并仅计算结果。在第一个查询中,您的嵌套查询会计算所有参与者的结果,而不仅仅是指定的参与者。
推荐阅读
- c# - 在 C# 代码中获取 Windows 默认邮件客户端的 smtp 详细信息
- javascript - Vue 3 在挂载之前访问 DOM 元素
- php - d3.js - PHP 数组格式
- sql - 从规则表中检索记录
- r - 如何从 R-shiny 的模式屏幕中捕捉事件?
- javascript - Javascript 为 in 预定义的局部变量
- node.js - 是否可以在 expo 托管应用程序中使用 node.js 标准库,例如“crypto”?
- python - 如何解析超过一个月的天数?
- c# - (Raspbian + C# + Mono) 'System.Device.Gpio.Drivers.LibGpiodDriver' 的类型初始化程序引发异常
- android - 在 API30 (Android 11) 或更高版本中从文档的内容 URI 即(MediaStore.Files 表中的元数据)获取真实路径