首先我们要了解一下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)
分享到:
相关推荐
以下是关于SQL语句嵌套查询的一些详细说明,以及与题目相关的实例。 1、返回一个值的子查询 这种类型的子查询用于比较单个值。例如: (1)查询与“李勇”同一个系的所有学生学号和姓名,我们可以通过以下方式实现...
-带有EXISTS谓词的子查询 -集合查询 -基于派生表的查询 -Select总结 下午上次课学到了嵌套查询-3 今天我们来看一下 带有EXISTS谓词的子查询 3/20 15:30 EXISTS谓词: 存在量词 ∃ 带有EXISTS谓词的子查询不返回任何...
在SQL数据库中,嵌套查询,也称为子查询或内部查询,是一种将一个SELECT-FROM-WHERE语句嵌入到另一个查询语句中的查询方式。嵌套查询允许我们在查询中引用另一个查询的结果,增强了SQL语言处理复杂查询的能力。接...
此外,嵌套查询还可以使用NOT EXISTS谓词来确定某个条件是否不成立。 例如,下面是一个使用NOT EXISTS谓词的嵌套查询: SELECT Sname FROM Student WHERE NOT EXISTS ( SELECT * FROM SC WHERE SC.Sno= ...
第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ... 17、利用T-SQL语句修改视图
SQL(Structured Query Language)是一种功能强大、通用的关系数据库语言,而SQL语言的核心是SELECT语句,其中WHERE子句的条件表达式表现得灵活而复杂,和谓词DISJunctive所形成的嵌套查询也成为部分人理解的难点。...
数据库SQL语句是数据库管理的核心,它用于创建、更新、查询和操纵数据库中的数据。以下是一些关于SQL语句的重点知识: 1. **定义表**: 使用`CREATE TABLE`语句来创建一个新的表,例如: ```sql CREATE TABLE ...
- **带有EXISTS谓词的子查询** #### 七、具体案例分析 ##### 1. 带有IN谓词的子查询示例 查询与“刘晨”在同一个系学习的学生: ```sql SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN ( SELECT Sdept ...
在SQL数据库中,嵌套查询是一种强大的工具,它允许在一个查询内部嵌套另一个查询,以实现更复杂的逻辑和数据检索。...理解并熟练掌握嵌套查询的使用,对于提升数据库查询效率和编写高效SQL语句至关重要。
具体实现方法包括使用NOT EXISTS谓词、使用自连接以及使用嵌套查询等。例如,要找出选修了2号课程和5号课程的学生学号,可以使用如下SQL语句: *** *** ***o IN ('2号', '5号') AND NOT EXISTS ( SELECT * FROM ...
本实验的目的是使学生进一步掌握 SQL Server 查询分析器的使用方法,加深 SQL 语言的嵌套查询语句的理解,学会用谓词:NOT IN、比较运算符(>,<,>=,,!=,=,),any/all,Not exists 等。 实验内容: 本实验的主要...
数据库的嵌套查询是SQL语言中的一个重要概念,它允许在一个查询语句中嵌入另一个查询语句,以实现更复杂的查询逻辑。实验报告中的内容详细介绍了四种不同类型的嵌套查询:带IN谓词的子查询、带比较运算的子查询、带...
实验总结与思考部分提出了三个问题,涉及ANY、ALL与聚集函数的关系,EXISTS谓词的逻辑判断,以及嵌套查询与连接查询的相互转换。ANY和ALL与聚集函数(如MAX、MIN)的关系在于它们可以用来比较单个值与一组值中的最大...
数据库的嵌套查询是SQL语言中的一个重要概念,它允许在一个查询语句中嵌入另一个查询,以实现更复杂的检索逻辑。本实验报告主要探讨了四种类型的嵌套查询:使用IN、比较运算符、ANY或ALL以及EXISTS谓词的子查询。 ...
【SQL数据查询与更新实验报告】的实验主要涵盖了SQL语言中的关键操作,旨在让学生熟练掌握对数据库进行数据查询和更新的方法。以下是对实验内容的详细解释: ### 1. SQL数据查询 #### 1.1 单表查询 - **查询所有列...
然而,当需要表达“全部值语义”(即查询全部相关值)时,标准SQL语句的构建通常变得非常复杂,需要使用NOT EXISTS谓词构建多层次的嵌套查询。这样的查询不仅编写起来困难,而且容易出错。为了帮助理解和学习者更...
#### 四、带有EXISTS谓词的子查询 此类查询利用EXISTS来判断外层查询的条件是否满足内层查询的结果。 ##### 3-1 选修特定课程的学生 **SQL语句**: ```sql SELECT s_no, s_name FROM students WHERE EXISTS ...
实验目的是让学生理解和掌握嵌套查询的含义和分类,了解其求解方法,并通过实际操作来练习使用IN谓词、比较运算符(如=, <, >等)、ANY或ALL谓词以及EXISTS谓词的子查询。 在实验中,使用了三个数据库表:学生表...
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章 主要的...