`
gcq04552015
  • 浏览: 463689 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL select查询原理--查询语句执行原则

 
阅读更多
1.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。


1)简单的单表查询

SELECT 字段
FROM 表名
WHERE 条件表达式

那它们是按什么顺序执行呢?分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段。最后形成一张我们要的虚表。
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)

2,两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。

3.多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果.

4.不同类型的连接查询什么时候用

查两表关联列相等的数据用内连接。
左表的连接列是右表的子集时用右外连接。
右表的连接列是左表的子集时用左外连接。
左表的连接列和右表的连接列彼此有交集但彼此互不为子集时候用全外。
求差操作的时候用联合查询。
多个表查询的时候,这些不同的连接类型可以写到一块。
ON只进行连接操作,WHERE只过滤中间表的记录
 
分享到:
评论

相关推荐

    经典SQL语句大全---经典SQL语句大全

    1. **基本查询**:SQL的基本查询包括SELECT语句,用于从表中选择数据。例如,`SELECT * FROM table_name;`将返回表中的所有记录。`*`代表所有列,而`table_name`是你要查询的表名。 2. **选择特定列**:通过指定...

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    - **SQL语句语法**:包括SELECT、INSERT、UPDATE、DELETE等常用语句的使用方法。 - **数据类型**:介绍了SQL Server支持的各种数据类型,如数值类型、字符类型、日期时间类型等。 - **变量与常量**:讲解如何定义...

    数据库系统原理实验报告-SQL查询语句.doc

    "数据库系统原理实验报告-SQL查询语句" 数据库系统原理实验报告-SQL查询语句是关系数据库管理系统的核心组件之一。实验报告的主要目的是让学生熟悉关系数据库标准语言 SQL,並且掌握基本的 SQL 查询语句。 一、...

    sql-map-2.dtd和sql-map-config-2.dtd

    例如,`&lt;sqlMap&gt;`元素用于包含具体的SQL语句,`&lt;select&gt;`、`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`元素则分别用于定义查询、插入、更新和删除操作。通过引入sql-map-2.dtd,XML编辑器可以提供代码补全和错误检查,提高...

    oracle查看执行最慢与查询次数最多的sql语句

    本文将详细介绍如何查看Oracle数据库中执行最慢和查询次数最多的SQL语句,以帮助DBA(数据库管理员)识别潜在的性能瓶颈。 首先,我们来看如何查询执行最慢的SQL语句。在Oracle中,可以使用`v$sqlarea`视图来获取...

    oracle 查看当前会话执行的sql语句

    以上查询可以帮助我们识别出那些执行成本高、磁盘读取频繁或处理大量行的SQL语句,从而进行进一步的优化工作。 通过上述方法,我们可以有效地监控和分析Oracle数据库中的SQL执行情况,这对于提高系统的整体性能具有...

    mybatis直接执行sql语句后续之一

    这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。下面我们将深入探讨MyBatis的SQL执行机制及相关知识点。 首先,MyBatis的核心组件是SqlSessionFactory,它是创建...

    SQL语句练习--数据库

    ### SQL语句练习知识点解析 #### 一、创建数据库与数据表 1. **创建数据库:** - **SQL语句:** `CREATE DATABASE student;` - **知识点解析:** 这条命令用于创建一个新的数据库`student`。在创建数据库时,...

    SQL SERVER 2008 T-SQL 基础

    1. **数据查询**:T-SQL提供了SELECT语句,用于从数据库中检索数据。这包括基本的字段选择、表连接、聚合函数(如COUNT、SUM、AVG、MAX、MIN)以及分组(GROUP BY)和排序(ORDER BY)操作。此外,还有子查询和联接...

    子查询是指一条SELECT语句作为另一条SELECT语句的一部分,外层的SELCT语句称为外部查询,内层的SELECT语句称为内部查询(或子查询)

    子查询是SQL语言中一种重要的查询方式,它允许将一条SELECT语句作为另一条SELECT语句的一部分使用。这种结构化的设计使得数据库查询更为灵活和强大。具体而言,外层的SELECT语句被称为外部查询,而内层的SELECT语句...

    数据库SQL-编辑器编写-SQL-查询语句.docx

    通过本实验,学生将掌握SELECT语句的基本语法和查询条件表示方法、GROUP BY和ORDER BY子句的作用和使用方法、连接查询和子查询的使用方法,以及单个元组及多个元组的插入、修改及删除操作的实现过程。 一、数据库...

    SQL Server 2005 T-SQL Recipes: A Problem-Solution Approach

    - **查询语句**:包括基本的SELECT语句、连接(JOIN)操作、子查询等。 - **数据插入**:使用INSERT语句向表中添加新记录。 - **数据更新**:通过UPDATE语句修改现有记录。 - **数据删除**:利用DELETE语句移除不...

    数据库SQL语言学习

    在SQL查询中,一个SELECT-FROM-WHERE查询语句称为一个查询块;将一个查询块嵌入到另一个查询块的WHERE子句或HAVING子句中,称为嵌套子查询

    java私塾面试题----SQL语句2

    2. **数据查询(SELECT语句)**:这是SQL最常用的部分,用来从数据库中检索数据。例如,`SELECT column1, column2 FROM table_name` 会返回指定列的数据。可以结合WHERE子句过滤结果,如 `WHERE column = value`。 ...

    学习SQL语句之SQL语句大全

     PREPARE --为动态执行准备SQL 语句  EXECUTE --动态地执行SQL 语句  DESCRIBE --描述准备好的查询  ---局部变量  declare @id char(10)  --set @id = '10010001'  select @id = '10010001'  ---全局变量 ...

    00587 Oracle公司内部数据库培训资料-Les01基本SQL SELECT语句(PPT 29页).ppt

    Oracle公司内部数据库培训资料-Les01基本SQL SELECT语句 本资源涉及基本的SQL SELECT语句,主要涵盖了SELECT语句的基本功能、语法、操作符优先级、空值定义等方面的内容。 一、SELECT语句的基本功能 SELECT语句是...

    SAP-ABAP-SQL中的select语句讲解

    ABAP中SQL语法详细介绍,包括基础语法和各种聚合函数,如MAX,MIN,AVG,COUNT,SUM,DIV,MOD,CEIL,FLOOR,DIVSION,ROUND,FOR ALL ENTRIES IN...除了各种聚合函数还有字段拆分,连接,子语句查询,字段类型转换,分情况赋值等

    hibernate执行原生sql语句

    我们也可以使用 `SQLQuery` 对象来执行原生 SQL 语句,该对象提供了多种方法来执行查询,例如 `list()` 方法、`uniqueResult()` 方法等。 例如,我们可以使用以下代码来执行一个原生 SQL 语句: ```java SQLQuery ...

    SQL SERVER 将select数据生成insert语句

    首先,`SELECT INTO` 语句是SQL Server中创建新表并填充数据的一种快速方式。它的基本语法如下: ```sql SELECT column1, column2, ... INTO new_table FROM existing_table WHERE condition; ``` 这个语句会根据...

    第一节 SQL注入的原理-01

    例如,在与用户交互的程序中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为,从而产生了SQL注入漏洞。 SQL注入的原因 SQL注入的原因是由于Web应用程序没有正确地对用户输入进行过滤和转义,导致攻击者...

Global site tag (gtag.js) - Google Analytics