这到底是什么 SQL 语句

2021-07-12 21:32:24 +08:00
 movq

有点看不懂下面的第一段语句。

SELECT 后面不是接一个 output 吗?为什么可以在里面再写一个 SELECT ?

SELECT (SELECT S.name FROM student AS S
	WHERE S.sid = E.sid) AS sname
   
FROM enrolled as E
WHERE cid='15-455'

第二段语句和第一段语句的效果是一样的,但是第二段就很好理解。把第二个 SELECT 的 output 作为 input 传递给 IN 函数。

SELECT name FROM student

WHERE sid IN ( 
	SELECT sid FROM enrolled
    WHERE cid = '15-445'
)

这里面是原始表格:

5630 次点击
所在节点    程序员
33 条回复
akira
2021-07-12 21:47:32 +08:00
SELECT 后面不是接一个 output 吗?为什么可以在里面再写一个 SELECT ?
把第二个 SELECT 的 output 作为 input 传递给 IN 函数。

你自己的这 2 句话,再琢磨琢磨?
xcstream
2021-07-12 22:04:30 +08:00
结果可以作为一个表
WalkerCeng
2021-07-12 22:05:56 +08:00
建议复习一下 MySQL
movq
2021-07-12 22:06:41 +08:00
@akira 你的意思是第一个 query 里面,括号包着的那个部分,作为一个 output,传递给括号外面的 SELECT 吗?
movq
2021-07-12 22:06:56 +08:00
@WalkerCeng 正在从 0 开始学
JamesMackerel
2021-07-13 00:55:16 +08:00
关键字:子查询
Rocketer
2021-07-13 01:08:35 +08:00
各个部分皆可子查询,只要输出的结果符合那个部分的格式即可
xiangyuecn
2021-07-13 09:00:31 +08:00
select (select count(...) from A ...) from B ... 这种写法 我这用的非常多 简直到了出神入化的境界🐶😂 通用性极强 基本上无法用其他写法来改写 否则要么看不懂要么性能极低
l0ve1o24
2021-07-13 09:07:44 +08:00
@xiangyuecn 可以用外连接,然后 sum(case when A.id is not null then 1 else 0) ,我记得这样好像速度会快一点
css3
2021-07-13 09:12:27 +08:00
发帖格式点赞,楼主需要看下 sql 最基础的语法
dk7952638
2021-07-13 09:18:22 +08:00
@xiangyuecn 这种写法可读性差,但性能真的比 join 要高很多
qwer666df
2021-07-13 09:18:22 +08:00
子查询的基操, 好几种变换格式, 贴个链接: https://www.cnblogs.com/CL-King/p/13730529.html
aguesuka
2021-07-13 09:24:35 +08:00
https://docs.oracle.com/cd/E11882_01/server.112/e41084/expressions013.htm#SQLRF52093
Scalar Subquery Expressions

这是为什么 SQL 没有静态安全的万恶之源之一
xiangyuecn
2021-07-13 09:42:23 +08:00
@l0ve1o24 #9 @dk7952638 #11 子查询是多个结果的聚合查询(留意我那个是 count,实际操作中是很多个带 count 的子查询),基本上无法用简单的 join 来改写,强行 join 结果集必然指数级暴增
onionKnight888
2021-07-13 10:11:52 +08:00
我们业务系统如果用 oracle 的话,基本上都是这种子查询
chanchan
2021-07-13 10:27:41 +08:00
垃圾 DSL 确实恶心
aliveyang
2021-07-13 11:09:20 +08:00
你把他看作程序一步一步执行就行了,只要格式输出符合,怎么玩都可以
sytnishizuiai
2021-07-13 11:35:54 +08:00
这种可以写的,而且有时候情况复杂的时候还不得不这么写。

不过你的问题描述的仔细,格式真不错,我之前提问,描述的没你直观。
hanssx
2021-07-13 11:39:35 +08:00
确实有点反直觉,第 1 个是相关子查询,第 2 个是不相关子查询,如果相关子查询没优化的情况下,效率应该比不相关子查询低?
way2explore2
2021-07-13 11:50:25 +08:00
SUBQuery liao jie yi xia

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX