优化网站页面,php班级网站建设,公司注册商标的流程及资料,专业装修的商铺首先我们要了解一下SQL语句的执行过程。 SELECT 字段 FROM 表名 WHERE 条件表达式 那它们是按什么顺序执行呢#xff1f;分析器会先看语句的第一个词#xff0c;当它发现第一个词是SELECT关键字的时候#xff0c;它会跳到FROM关键字#xff0c;然后通过FROM关键字找到表名并…首先我们要了解一下SQL语句的执行过程。 SELECT 字段 FROM 表名 WHERE 条件表达式 那它们是按什么顺序执行呢分析器会先看语句的第一个词当它发现第一个词是SELECT关键字的时候它会跳到FROM关键字然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字如果找不到则返回到SELECT找字段解析如果找到WHERE则分析其中的条件完成后再回到SELECT分析字段。最后形成一张我们要的虚表。 其它的先不说了只说WHERE。 WHERE关键字后面的是条件表达式。如果学过C语言等编程语言就会知道条件表达式计算完成后会有一个返回值即非0或0非0即为真(true)0即为假(false)。同理WHERE后面的条件也有一个返回值真或假来确定接下来执不执行SELECT。 例: SELECT * FROM STUDENT WHERE SNO 1; 分析器先找到关键字SELECT然后跳到FROM关键字将STUDENT表导入内存并通过指针p1找到第一条记录接着找到WHERE关键字计算它的条件表达式如果为真那么把这条记录装到一个虚表当中p1再指向下一条记录。如果为假那么p1直接指向下一条记录而不进行其它操作。一直检索完整个表关把虚表返回给用户。 再说EXISTS谓词EXISTS谓词也是条件表达式的一部分。当然它也有一个返回值(true或false)。 例: SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE SC.Sno Student.Sno AND SC.Cno 1); 这是一个SQL语句的嵌套使用但和上面说的SQL语句的执行过程也是相同的。嵌套的意思也就是说当分析主SQL语句(外面的那个SELECT我们权且先这么叫它)到WHERE关键字的时候又进入了另一个SQL语句中。那么也就是说分析器先找到表Student并装入内存一个指针(例如p1)指向Student表中的第一条记录。然后进入WHERE里分析里面的SQL语句再把SC表装入内存另一个指针(例如p2)指向SC表中的第一条记录分析WHERE后面的条件表达式依次进行分析最后分析出一个虚表2也就变成 SELECT Sname FROM Student WHERE EXISTS 虚表2 如果虚表为空表EXISTS 虚表2 也就为false不返回到SELECT而p1指向下一条记录。如果虚表2不为空也就是有记录那么EXISTS 虚表2 为true同返回到SELECT并把p1指向的记录添加到主SQL语句的虚表1当中。这也是为什么嵌套的SQL语句SELECT 后面为一般为*的原因因为它EXISTS返回的只是真或假字段的名没有意义用*就行当然用别的也不会错。 注意这里虽然嵌套的SQL语句分析完了但主SQL语句只执行了一遍也就是说p1指向Student的第一条记录p1还要再指向Student表的下一条记录并分析这样又进入了嵌套中的SQL语句同上面说的一样分析。当p1也到了Student表的结尾整个SQL语句结束。返回虚表1Sname这一列。 嵌套就像: for(int i 0,i n, i) for(int j 0, j n, j) http://blog.csdn.net/java166/article/details/4089728转载于:https://www.cnblogs.com/bulemaple/articles/2830996.html