2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > mysql sql 子查询 执行顺序_MySQL SQL语句执行顺序

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

时间:2023-12-01 16:27:12

相关推荐

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中的全部元组都处理完毕

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。