SQLServer(SQL语句嵌套与EXISTS谓词)

SQLServer(SQL语句嵌套与EXISTS谓词),第1张

SQLServer(SQL语句嵌套与EXISTS谓词),第2张

数据库类讨论了EXISTS谓词。老师讲了很长时间,发现学生不太懂。我看了一会儿书,经过一番思考,我窥见了一些端倪。
首先,我们需要了解SQL语句的执行过程。
SELECT字段
FROM table name
WHERE条件表达式
那么它们以什么顺序执行呢?分析器将首先查看语句的第一个单词。当它发现第一个单词是SELECT关键字时,它会跳转到FROM关键字,然后通过FROM关键字找到表名并将表加载到内存中。然后,找到WHERE关键字。如果找不到,请返回选择以查找字段分辨率。如果找到了,分析条件,然后返回选择分析字段。最后形成一个我们想要的虚拟表。
剩下的就不说了,直接说哪里吧。
where关键字后跟一个条件表达式。如果你学过C之类的编程语言,你就会知道,条件表达式计算出来之后,会有一个返回值,即非零或零,真(true),零为假(false)。类似地,WHERE之后的条件也有返回值,true或false,以确定是否执行SELECT next。
示例:
select *
from student
其中sno = ' 1
分析器首先找到关键字SELECT,然后跳转到FROM关键字将STUDENT表导入内存,通过指针p1找到第一条记录,然后找到WHERE关键字计算其条件表达式。如果为真,它将这条记录放入一个虚拟表中,然后p1指向下一条记录。如果为false,p1直接指向下一条记录,不做任何其他操作。始终搜索整个表,并将虚拟表返回给用户。
除了EXISTS谓词之外,EXISTS谓词也是条件表达式的一部分。当然,它也有返回值(真或假)。
示例:
select sname
from student
where exists
(select *
from sc
where sc . SnO = student . SnO and sc . cno = ' 1
这是SQL语句的嵌套使用,但与上面提到的SQL语句的执行过程相同。嵌套意味着当分析WHERE关键字的主SQL语句(外部SELECT,我们先称之为WHERE)时,我们输入另一个SQL语句。也就是说,分析器首先找到表Student并将其加载到内存中,一个指针(如p1)指向Student表中的第一条记录。然后输入在哪里分析里面的SQL语句,然后将SC表加载到内存中。另一个指针(比如p2)指向SC表的第一条记录,分析WHERE后面的条件表达式,依次分析,最后分析一个虚表2。它也变成
SELECT sname
from student
,其中存在虚拟表2
。如果虚拟表是空表,现有的虚拟表2将为false,不会返回select,但p1将指向下一条记录。如果虚拟表2不是空,也就是有记录,那么现有的虚拟表2和真的一样。返回选择并将p1指向的记录添加到主SQL语句的虚拟表1中。(这也是嵌套SQL语句SELECT后面通常跟*的原因,因为它的存在只返回true或false,字段名没有意义。就用*,当然别的都不会错。)
注意,这里虽然分析了嵌套的SQL语句,但是主SQL语句只执行了一次,也就是说p1指向学生的第一条记录,p1要指向学生表的下一条记录并进行分析,这样再次进入嵌套的SQL语句,如上所述进行分析。当p1也到达Student表的末尾时,整个SQL语句结束。返回虚拟表1的1Sname列。
嵌套就像:
for (int i = 0,i < n,++i)
for (int j = 0,j < n,++j)
这是end
最难的是什么时候使用EXISTS。
考大编辑后记:一接触数据库,上面的分析难免有很多不足和错误。请指出他们。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQLServer(SQL语句嵌套与EXISTS谓词)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情