关于sql语言相关子查询的执行顺序的问题

Zoeywoo 2019-05-13 04:09:36
----------------------------------表结构----------------------------------------------------
--学生表tblStudent(编号StuId、姓名Stuname、年龄Stuage、性别Stusex)
--课程表tblCourse(课程编号CourseId、课程名称CourseName、教师编号TeaId)
--成绩表tblScore(学生编号StuId、课程编号CourseId、成绩Score)
--教师表tblTeacher(教师编号TeaId、姓名TeaName)
----------------------------------------------------------------------------------------------
查询所有课程成绩小于60分的同学学号
答案是:
select ts.StuId
from tblStudent ts
where 60>
all(select tc.Score from tblScore tc where tc.StuId=ts.StuId)
----------------------------------------------------------------------------------------------
我的问题是:
我以前看别人说的,sql的执行顺序是
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY
那上面的答案的执行顺序 是不是
from tblStudent ts
where 60>
all
(from tblScore tc
where tc.StuId=ts.StuId
select tc.Score )
select ts.StuId
如果执行顺序是这样的,tblStudent里的StuId是最后去提取的,那在子查询里,ts.StuId又是哪里来的呢?
总之我对这个答案的执行顺序有点疑惑,有谁能帮我理一理这个答案呢?谢谢!!
...全文
535 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2019-05-14
  • 打赏
  • 举报
回复
在select之前,都是整行数据读取,在where里面是整行数据中提取StuId,作为条件使用。
但是最后显示的时候,会从整个数据行中,提取你select中所需要的列

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧