注册 登录
编程论坛 SQL Server论坛

询问一个关于SELECT执行过程的语句

luxuluxu 发布于 2010-07-16 12:04, 1083 次点击
SORRY小弟分数不够 请见谅




SELECT 表1.* FROM 表1,表2 WHERE 表1.字段1 = 表2.字段1
 
--------------
我在网上搜索到这个解释

分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段。最后形成一张我们要的虚表。  
其它的先不说了,只说WHERE。  
wHERE关键字后面的是条件表达式。如果学过C语言等编程语言就会知道,条件表达式计算完成后,会有一个返回值,即非0或0,非0即为真(true),0即为假(false)。同理WHERE后面的条件也有一个返回值,真或假,来确定接下来执不执行SELECT。  


问:

根据上面的解释 select语句执行的过程是 分析器检查第一个关键词是否为select 如果是select跳转到from关键词 并且把from后面跟随的表名对应的表装入内存,装入后跳转到where关键字 先对两表进行笛卡尔积 并生成一个两表对应关系的虚表
但是后面是如何执行的


--------------

我主要是想知道 相对来说更深层的select执行过程

我不清楚后续的执行过程,还请各位讲解一下。

其包括生成虚表后 where的判断条件如何筛选出虚表中匹配的数据 以及select是如何识别并且选择出匹配数据的对应元祖以及字段的
6 回复
#2
qingshuiliu2010-07-16 12:14
where 语句是做筛选的,不会返回任何值的。
select 命令是从表(可能和其他表联合起来的表)中获取数据
#3
luxuluxu2010-07-16 12:25
- - 谢谢楼上的 但是这些我已经明了

我只是想知道一个完整的工作流程
#4
cnfarer2010-07-16 20:26
似乎可能像LZ所说的那样去做,但事实上并非如此.
数据库管理系统处理SELECT语句时,首先要分析该语句,并结合统计信息,决定是否对语句进行优化,如何优化.得到一个执行计划,然后才执行查询过程.(查询就相对简单了)

[ 本帖最后由 cnfarer 于 2010-7-16 20:27 编辑 ]
#5
gameohyes2010-07-16 21:36
我主要是想知道 相对来说更深层的select执行过程

例如:select * from (select * from bbsUsers) u
实例上加上你的理解然后再去想下运算符的优先级.
#6
jmchang2010-07-17 16:40
不懂啊。真难。
#7
dearwolf41282010-07-19 11:43
生成笛卡儿积后再根据where条件语句把符合条件的记录保存下来,不符合的删除,最后形成你需要的表
1