mysql sql 子查询 执行顺序_MySQL,SQL语句执行顺序

1.SQL执行顺序:

select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not null

group by考生姓名having max(总成绩) > 600

order by max总成绩

(1). 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据

(2). 执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据

(3). 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组

(4). 计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值

(5). 执行 HAVING 子句, 筛选课程的总成绩大于

600 分的.

(6)执行select 把满足条件的考生姓名和总成绩选出,并给予别名

(7). 执行 ORDER BY 子句, 把最后的结果按

"Max 成绩" 进行排序.

2.子查询:

2.1 不相关子查询

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept IN

(SELECT Sdept

FROM Student

WHERE Sname= ‘ 刘晨 ’);

子查询的查询条件不依赖于父查询

由里向外 逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。

2.2 相关子查询

子查询的查询条件依赖于父查询,首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表,然后再取外层表的下一个元组,重复这一过程,直至外层表全部检查完为止

2.3 执行顺序:

查询选修了课程名为“信息系统”的学生学号和姓名SELECTSno,SnameFROMStudent ③ 最后在Student关系中取出Sno和SnameWHERE Sno IN(SELECTSno ② 然后在SC关系中找出选修了3号课程的学生学号FROMSCWHERE Cno IN(SELECTCnoFROMCourseWHERE Cname=‘信息系统’ ① 首先在Course关系中找出“信息系统”的课程号,结果为3号课程

)

);

3.表连接执行顺序:

首先在表1中找到第一个元组,然后从头开始扫描表2,逐一查找满足连接件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。

表2全部查找完后,再找表1中第二个元组,然后再从头开始扫描表2,逐一查找满足连接条件的元组,找到后就将表1中的第二个元组与该元组拼接起来,形成结果表中一个元组。

重复上述操作,直到表1中的全部元组都处理完毕

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

文章写-发

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值