`
luotiangang
  • 浏览: 26466 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL语句嵌套与EXISTS谓词

阅读更多
首先我们要了解一下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)
分享到:
评论
1 楼 cc.square 2011-11-28  
恩,谢谢讲解

相关推荐

    SQL语句嵌套查询

    以下是关于SQL语句嵌套查询的一些详细说明,以及与题目相关的实例。 1、返回一个值的子查询 这种类型的子查询用于比较单个值。例如: (1)查询与“李勇”同一个系的所有学生学号和姓名,我们可以通过以下方式实现...

    【3.18数据库作业8】SQL练习8 – SELECT(嵌套查询EXISTS、集合查询、基于派生表的查询)

    -带有EXISTS谓词的子查询 -集合查询 -基于派生表的查询 -Select总结 下午上次课学到了嵌套查询-3 今天我们来看一下 带有EXISTS谓词的子查询 3/20 15:30 EXISTS谓词: 存在量词 ∃ 带有EXISTS谓词的子查询不返回任何...

    sql数据库的嵌套查询

    在SQL数据库中,嵌套查询,也称为子查询或内部查询,是一种将一个SELECT-FROM-WHERE语句嵌入到另一个查询语句中的查询方式。嵌套查询允许我们在查询中引用另一个查询的结果,增强了SQL语言处理复杂查询的能力。接...

    第三章SQL数据查询嵌套查询优秀文档.ppt

    此外,嵌套查询还可以使用NOT EXISTS谓词来确定某个条件是否不成立。 例如,下面是一个使用NOT EXISTS谓词的嵌套查询: SELECT Sname FROM Student WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Sno= ...

    SQLSserver2008 上

    第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ... 17、利用T-SQL语句修改视图

    浅析SQL中WHERE EXISTS子查询.pdf

    SQL(Structured Query Language)是一种功能强大、通用的关系数据库语言,而SQL语言的核心是SELECT语句,其中WHERE子句的条件表达式表现得灵活而复杂,和谓词DISJunctive所形成的嵌套查询也成为部分人理解的难点。...

    数据库sql语句精华

    数据库SQL语句是数据库管理的核心,它用于创建、更新、查询和操纵数据库中的数据。以下是一些关于SQL语句的重点知识: 1. **定义表**: 使用`CREATE TABLE`语句来创建一个新的表,例如: ```sql CREATE TABLE ...

    SQL嵌套查询

    - **带有EXISTS谓词的子查询** #### 七、具体案例分析 ##### 1. 带有IN谓词的子查询示例 查询与“刘晨”在同一个系学习的学生: ```sql SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN ( SELECT Sdept ...

    sql数据库的嵌套查询.pdf

    在SQL数据库中,嵌套查询是一种强大的工具,它允许在一个查询内部嵌套另一个查询,以实现更复杂的逻辑和数据检索。...理解并熟练掌握嵌套查询的使用,对于提升数据库查询效率和编写高效SQL语句至关重要。

    SQL语言中差运算与除运算实现的几种方法.pdf

    具体实现方法包括使用NOT EXISTS谓词、使用自连接以及使用嵌套查询等。例如,要找出选修了2号课程和5号课程的学生学号,可以使用如下SQL语句: *** *** ***o IN ('2号', '5号') AND NOT EXISTS ( SELECT * FROM ...

    实验4 数据库的嵌套查询实验(2学时).doc

    本实验的目的是使学生进一步掌握 SQL Server 查询分析器的使用方法,加深 SQL 语言的嵌套查询语句的理解,学会用谓词:NOT IN、比较运算符(&gt;,&lt;,&gt;=,,!=,=,),any/all,Not exists 等。 实验内容: 本实验的主要...

    数据库的嵌套查询实验报告.doc

    数据库的嵌套查询是SQL语言中的一个重要概念,它允许在一个查询语句中嵌入另一个查询语句,以实现更复杂的查询逻辑。实验报告中的内容详细介绍了四种不同类型的嵌套查询:带IN谓词的子查询、带比较运算的子查询、带...

    实验06_嵌套查询1

    实验总结与思考部分提出了三个问题,涉及ANY、ALL与聚集函数的关系,EXISTS谓词的逻辑判断,以及嵌套查询与连接查询的相互转换。ANY和ALL与聚集函数(如MAX、MIN)的关系在于它们可以用来比较单个值与一组值中的最大...

    数据库的嵌套查询实验报告.pdf

    数据库的嵌套查询是SQL语言中的一个重要概念,它允许在一个查询语句中嵌入另一个查询,以实现更复杂的检索逻辑。本实验报告主要探讨了四种类型的嵌套查询:使用IN、比较运算符、ANY或ALL以及EXISTS谓词的子查询。 ...

    SQL数据的查询和更新实验报告报告.pdf

    【SQL数据查询与更新实验报告】的实验主要涵盖了SQL语言中的关键操作,旨在让学生熟练掌握对数据库进行数据查询和更新的方法。以下是对实验内容的详细解释: ### 1. SQL数据查询 #### 1.1 单表查询 - **查询所有列...

    含有全部值语义的SQL查询.pdf

    然而,当需要表达“全部值语义”(即查询全部相关值)时,标准SQL语句的构建通常变得非常复杂,需要使用NOT EXISTS谓词构建多层次的嵌套查询。这样的查询不仅编写起来困难,而且容易出错。为了帮助理解和学习者更...

    数据库中的数据查询:相关语句+对应答案

    #### 四、带有EXISTS谓词的子查询 此类查询利用EXISTS来判断外层查询的条件是否满足内层查询的结果。 ##### 3-1 选修特定课程的学生 **SQL语句**: ```sql SELECT s_no, s_name FROM students WHERE EXISTS ...

    数据库原理与应用实验报告嵌套查询.pdf

    实验目的是让学生理解和掌握嵌套查询的含义和分类,了解其求解方法,并通过实际操作来练习使用IN谓词、比较运算符(如=, &lt;, &gt;等)、ANY或ALL谓词以及EXISTS谓词的子查询。 在实验中,使用了三个数据库表:学生表...

    精通SQL--结构化查询语言详解

    1.5.3 sql语句的结构 13 .1.5.4 sql的优点 13 1.5.5 sql的执行 14 1.6 sql环境 15 1.6.1 环境 15 1.6.2 sql的层次结构 15 1.6.3 客户程序和服务程序系统 17 1.6.4 sql环境中对象的命名规则 18 第2章 主要的...

Global site tag (gtag.js) - Google Analytics