首先我们要了解一下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)
相关推荐
Win10/Win11共享打印机0x00000709终极修复指南:从注册表到LPD协议的全面解决方案
本文提供了Win10/Win11共享打印机0x00000709错误的终极修复指南,涵盖从注册表修改到LPD协议的全面解决方案。通过详细分析错误根源、基础修复四步法、高阶LPD协议方案及企业级深度修复策略,帮助用户彻底解决打印机共享问题,提升局域网打印效率。
SQL语句嵌套与EXISTS谓词
数据库的课讲到了EXISTS谓词,老师用了很长时间来讲,但发现同学们都不是很理解。我看了一会书又经过了一些思考,初窥了一些端倪。首先我们要了解一下SQL语句的执行过程。 SELECT 字段FROM 表名WHERE 条件表达式 那它们是按什么顺序执行呢?分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM
深入浅出:UE4类型系统完整构建过程详解
UE4的类型系统是一个复杂但设计精巧的架构,它通过静态代码生成和运行时构建的完美配合,实现了强大的反射功能。理解这个过程不仅有助于解决开发中的问题,也能让你更好地利用UE4的各种高级特性。就像建造一栋大楼需要经过设计、备料、框架、装修、验收等多个阶段,UE4类型系统的构建也是一个多阶段、精细化的过程。每个阶段都有其特定的职责,共同协作完成从源代码到运行时对象的转换。
SQL语句嵌套时的执行顺序
1.原语句:SELECT ID,NAME,STATES,(SELECT STATES FROM ITEM WHERE ID=T.ITEM_ID) AS ITEM_END_FLAGFROM RESULT TWHERE 1=12.ITEM表中实际没有STATES列,但执行时语句却没报错,并且ITEM_END_FLAG列的结果与STATES列结果相同;3.通过SQL SERVER的“原执行计划”工具发...
【实战解析】RTL8306MB交换芯片驱动开发中的RMII接口调试陷阱
本文深入剖析了RTL8306MB交换芯片驱动开发中RMII接口的典型调试陷阱。通过一个工业网关项目的实战案例,揭示了因硬件原理图设计疏忽导致TX_EN与CRS_DV信号线错接,从而引发网络“哑火”的根本原因。文章详细展示了使用示波器从时钟、数据到控制信号的系统性排查方法,并总结了关键的设计警示与自查清单,为嵌入式网络开发中的软硬件协同调试提供了宝贵经验。
大数据 DataX-Web 详细安装教程
大数据 DataX-Web 详细安装教程
sql 语句 嵌套子查询 执行顺序分析
--创建测试数据create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')insert into Student values('02' , N'钱电...
7 series FPGAs Transceiver Wizard IP核使用和测试
学习FPGA一段时间了,前面一直没有系统的总结,这学期把在项目中用到的IP核和一些调试过程中遇到的问题总结一下发出来,坚持下去,一起进步! 今天总结一下的GTH核的使用和测试。 软件版本:Vivado 2017.4 IP核版本:7 Series FPGAs Transceivers Wizard (3.6) FPGA:xc7vx690tfft1927 实现功能: 四路光纤数据接收,由于GTX IP...
sql专题 之 sql的执行顺序
存储与生成:虚拟表通常不存储实际数据,而是基于其他表或查询动态生成;结果集是查询执行后实际返回的数据集合。持久性虚拟表可以存储在数据库中供后续查询重用结果集通常是临时的,一旦查询完成就会被释放。用途虚拟表常用于简化复杂查询、提高查询可读性和可维护性;结果集则是查询执行后的直接输出,用于数据处理和展示。
蛋白组学/磷酸化蛋白组学分析笔记-2
如何校正蛋白丰度?磷酸化组学质谱下机处理。
深入解析Incapsula reese84的生成机制与绕过策略
本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。
mysql sql先后执行_mysql sql执行顺序
mysql> explain select * from (select * from ( select * from test where id=1) a) b;+----+-------------+------------+------+---------------+------+---------+------+------+-------------+| id | select...
基于 Simulink 的**单相全桥 LLC 谐振双向 DC-DC 变换器(带软开关特性)**实战教程
原边(Primary):全桥逆变电路(4个 MOSFET/IGBT),将直流斩波为高频方波。变压器:提供电气隔离和电压变比。副边(Secondary):全波或全桥整流电路(同步整流或二极管)。
case的执行顺序 & 嵌套使用
我们先来看一下表中数据的情况: select * from PRODUCTINFO PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPERATION ORIGIN PID0001 T恤 25.62 100 衣服 促销产品 北京 PID0002...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
antd 嵌套子表格_MySQL 基本语句九 Subquery 子查询
Subquery 子查询可以嵌套在select,where,from语句中Subquery 子查询解决query依赖问题-子查询能嵌套在Select,insert,update,or delete 语句中或者其他的子查询语句里面,也就是所谓的嵌套。子查询支持32层嵌套。-子查询也可以使用>< OR =在 IN ANY ALL字查询语句里面总体来说,以下情况都可以使用子查询:用where...
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
sql执行机制
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp38 sql执行机制 1.对于普通的sql语句只有where条件的执行机制 首先我们要了解一下SQL语句的执行过程。SELECT字段FROM表名WHERE条件表达式那它们是按什么顺序执行呢? 分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
地表最强系列之Hive的高级查询语句
SELECT基础 SELECT用于映射符合指定查询条件的行 Hive SELECT是数据库标准SQL的子集 1.使用方法类似于MySQL 2.关键字和MySQL一样,不区分大小写 3.limit子句 4.where子句 5.运算符、like、rlike 6.group by子句 7.having子句 Hive的语句的书写顺序 (1)select (2)from (3)join on (4) where (5)group by (6)having (7)distribute by/cluster by (
311



被折叠的 条评论
为什么被折叠?



