数据库系统原理:不相关子查询

yumo6664周前 (04-05)技术文章16

数据查询是数据库的核心操作。SQL语言允许多层嵌套查询,也叫子查询。它使用户可以用多个简单的查询构成复杂的查询,从而增强SQL的查询能力。

嵌套查询有两种形式,相关子查询和不相关子查询。

学习SQL的不相关子查询。

一、子查询分类

把一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句的条件中的查询称为嵌套查询(子查询) 。

从上图可以看出,图中的查询要查找的是“选了c2这门课的学生的姓名”。

SQL的结构化就体现在嵌套上。

子查询的嵌套可以用多个简单的查询构成复杂的查询,从而增强SQL的查询和表达能力,并且提高程序的可读性。

子查询可分成不相关子查询和相关子查询两类。

子查询的查询条件不依赖于父查询,这类子查询称为不相关子查询(也叫一般子查询),不相关子查询一般使用谓词in。

如果子查询的查询条件依赖于外层父查询的某个属性值,称这类查询为相关子查询。相关子查询一般使用谓词exists。

上图的示例表示“选了c2这门课的学生的学号”作为子查询的结果、然后去用学号获得学生的姓名。

二、不相关子查询

不相关子查询的执行过程:

执行顺序由里往外,先执行内层的子查询,将子查询的结果作为外层父查询的条件。根据子查询的结果再执行父查询。

例1: 查询有一门课程成绩等于95分的学号和姓名。

(1)采用多表等值连接实现

Select S.sno,sname

From S, SC

Where S.sno=SC.snoand grade=95

该查询需要S表、SC表两张表,多表连接有一个等值条件即“S表的学号等于SC表的学号”,另外一个选择条件是“成绩是95” ,输出的列的学号和姓名。

(2)采用不相关子查询实现

Select sno,sname

From s

Where sno in(Select sno

From SC

Where grade = 95

子查询实现:首先在SC表中查找“成绩是95分”的学生的学号,再用这些学号到S表中去获得这些学生的姓名。这样的形式就是不相关子查询、用谓词in来实现的。

不相关子查询有以下的特点:

①能独立运行,子查询条件不依赖父查询;

②只能运行一次;(执行一次,获得结果,就完成任务了。)

③先执行子查询。(先执行内部的子查询,后执行外部的查询。)

例2:查询选修了课程名为DB"的学号和姓名。

(1)用多表连接查询来实现

Select S.sno,sname

From S, SC, C

Where S.sno=SC.sno and C.cno=SC.cno and cname= 'DB';

由于课程名在表C中、姓名在表S中选课信息在表SC中,所以该多表连接查询涉及的表有三个,即表S、表SC、表C。有三个表的时候的多表连接需要有两个连接条件,即“S表的学号等于SC表的学号”、“C表的课程号等于SC表的课程号”,一个选择条件是“课程名为DB”,输出的列有两列、学号和姓名。

(2)用不相关子查询实现

Select sno,sname

From s

Where sno in

Select sno

From Sg

Where cno in

Select cno

From C

Where cname= 'DB’));

使用不相关子查询实现,是分了三步:

首先在C表中找出课程名为‘DB’的课程号;

然后,用DB的课程号在SC表中找出选修了该课程的学生的学号;

③最后在S表中取出学号和姓名。

首先执行的是最内侧的子查询,然后是中间的查询,最后是最外侧的查询。

通过不相关子查询,可以看到结构化的特征,程序的可读性也得到提高。

三、总结

在SQL语言中,允许使用多层嵌套查询构成复杂的查询,从而增强SQL的查询能力。以层层嵌套的方式来构造程序正是SQL中“结构化”的含义所在。

不相关子查询是较简单的一类子查询,使用谓词“in”来实现

相关文章

数据库系统原理:数据独立性

数据库系统的三级模式和两级映像使数据具有独立性。数据库系统三个抽象级间通过两级映像进行相互转换,使得数据库的三级模式形成一个统一整体,从而保证了数据的独立性。数据独立性是指应用程序与数据间相互独立,不...

数据库的存储原理

1. 数据存取在数据库管理系统中,数据的存取过程为:应用程序通过 DML 向 DBMS 发出存取请求,如 SELECT 语句;对命令进行语法检查,正确后检查语义和用户权限(通过数据字典 DD),并决定...

DeepSeek本地RAG知识库(17):向量数据库原理讲解(小白也能懂)

大家好!我是程序员寒山。近日很多小伙伴问,为什么要用向量数据库?它到底是怎么存储数据的?今天就给大家揭秘一下向量数据库,看看它有什么神奇的地方?一、什么是向量数据?——菜谱变"坐标"说向量数据库前,首...

面试官:说一下数据库事务的实现原理

#数据库事务的实现原理是什么样的?#什么是数据库事务?数据库事务的四大特性?数据库事务隔离级别?数据库事务的实现原理?一、什么是数据库事务?数据库事务是指作为一个不可分割的操作单元执行的一系列数据库操...

数据库系统原理:外键约束

关系数据库中最重要的约束是实体完整性和参照完整性。在SQL中,参照完整性称为外键约束。学习SQL中参照完整性的实现方法。一、参照完整性定义外键约束指参照完整性检查。根据参照完整性规则,依赖关系中外键或...

数据库加密技术原理与实践

1、数据库加密概述数据库加密是指对存储在数据库中的敏感数据进行编码处理的过程,目的是防止未经授权的访问和数据泄露。加密后的数据即使被未授权的第三方获取,也无法理解其原始含义,从而保护数据的机密性数据库...