数据库原理与应用 第3章关系数据库标准语言SQL(3)
第3章 关系数据库的标准语言SQL 数据库原理及应用讲义
3.2.1 基本表的定义
1. 数据类型
由于基本表的每个属性都有自己的数据类型,所以首先要讨论以下 SQL 所支持的数据类 型。各个厂家的 SQL 所支持的数据类型不完全一致。为了满足数据库在各方面应用的要求, 本书介绍 SQL-99 规定的主要与定义数据类型。
⑴ 数值型 INTEGER 定义数据类型为整数类型,它的精度(总有效位)由执行机构确定。
(2) <基本表名>:规定了所定义的基本表的名字,在一个数据库中不允许有两个基本表 同名。
(3) <列名>:规定了该列(属性)的名称。一个表中只有一列组成,且不能有两列同名。
(4) <列数据类型>:规定了该列的数据类型。即前面介绍的数据类型。
(5) <列完整性约束>:是指对某一列设置的约束条件。该列上的数据必须满足。最常见
【例 3.3】在 Employee 表中增加一个 Birth 列(出生) ALTER TALBEETIME NULL;
【例 3.4】修改 Employee 表中 Marry 列为 BOOLEAN ALTER TALBE Employee MODIFY Marry BOOLEAN;
现在各大数据库厂商提供不同版本的 SQL。这些版本的 SQL 不但都包括原始的 ANSI 标准,而且还在很大程度上支持新推出的 SQL-92 标准。另外它们均在 SQL2 的基础上作了 修改和扩展,包含了部分 SQL-99 标准。这使不同的数据库系统之间的互操作有了可能。
3.1.1 SQL的特点
SQL 语言之所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合的、通 用的、功能极强的、简学易用的语言。其主要特点包括:
2. 基本表的定义
《数据库应用》全套PPT电子课件教案-第三章(关系数据库标准语言SQL)
库文件。
16
第3章 关系数据库标准语言SQL
3.3 数据查询
SQL的核心是查询。SQL的查询命令也称作SELECT命令,它 的基本形式由SELECT-FROM-WHERE查询块组成,多个查 询块可以嵌套执行。SQL查询命令格式:
DISTINCT短语的作用是去掉查询结果中的重复值.
19
第3章 关系数据库标准语言SQL
SELECT * FROM 仓库 其中“*”是通配符,表示所有属性,即字段,这里的命令 等同于:
SELECT 仓库号,城市,面积 FROM 仓库 SELECT DISTINCT 仓库号 FROM 职工 WHERE 工资 > 1210
SQL语言是当前最为成功、应用最为广泛的关 系数据库语言,其主要特点包括:
1. SQL语言非常简洁 2. 综合统一 3. 高度非过程化 4. 面向集合的操作方式 5. 以同一种语法结构提供两种使用方式
4
第3章 关系数据库标准语言SQL
3.1.2 SQL语言功能概述
SQL功能可分为四大部分:数据定义功能、数据 控制功能、数据查询功能和数据操纵功能。
21
第3章 关系数据库标准语言SQL
匹配串中可包含如下四种通配符: _(下划线):匹配任意一个字符。 %(百分号):匹配0个或多个字符。 [ ]:匹配[ ]中的任意一个字符。如[abcd]表示匹配a、b、
c和d中的任何一个。 [^]:不匹配[ ]中的任意一个字符。如[abcd]表示不匹配
a、b、c和d。
SELECT 职工号,城市 FROM 仓库,职工 WHERE ( 面积 > 400) AND
数据库系统原理与应用 目录
5.3 完整性
第6章 数据库的事务处理与数据恢复
6.1 事务管理的基本概念 6.2 并发控制
6.3 数据库恢复
第7章 SQL Server 2000
7.1 SQL Server 2000的安装 7.2 SQL Server 2000的管理工具
7.3 SQL Server 2000数据库对象的操作
第9章 数据库应用程序开发
9.1 数据库应用程序设计方法 9.2 数据库应用程序的体系结构
9.3 数据库与应用程序的接口
9.4 数据库应用程序开发
3.1 SQL概述 3.2 数据定义 3.3 数据查询 3.4 数据更新
3.5 视图
3.6 数据控制
第4章 关系数据库设计理论
4.1 数据依赖 4.2 范式 4.3 关系模式的分解
第5章 数据库安全性和完整性
5.1 数据库的安全性 5.2 SQL Server数据库的安全性
7.4 SQL Server 2000数据库管理 7.5 SQL Server 2000程序设计 7.6 SQL Server 2000安全性管理 7.7 链接服务器
第8章 数据库设计
8.1 数据库设计概述 8.2 需求分析
8.3 概念结构设计
8.4 逻辑结构设计 8.5 数据库的物理设计 8.6 数据库实施 8.7 数据库运行与维护
21世纪高职高专新概念教材
数据库系统原理与应用
目录
第1章 数据库基本知识 第2章 关系数据库
数据库原理与系统开发教程第03章 关系数据库标准语言SQL
3.1.2 SQL的基本概念
SQL
基本表 1
视图 1
视图 2
外模式
基本表 2
基本表 3
模式 基本表 4
存储文件 1
存储文件 2
内模式
2020年4月15日
北京电子科技学院计算机系 张克君
3.1.3 SQL的特点
❖ SQL是一种非过程化的语言,它允许在高层数据结构上操作,而不是对单个记
录进行操作。用户在使用SQL的过程中,完全不用考虑数据的存储格式、数据
其语句包括动词INSERT、UPDATE和DELETE,分别用于添加、修改和删除表中的行 ,也称为动作查询语言。
2020年4月15日
北京电子科技学院计算机系 张克君
3.1 SQL概述
SQL包含以下6个部分
❖ 4.数据控制语言(Data Control Language,DCL) 它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对
产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计 算机系统上,具有良好的可移植性。 SQL是一种交互式查询语言,允许用户直接查询存储数据,但它不是完整的程 序语言,如它没有DO或FOR 类似的循环语句,但它可以嵌入另一种语言中, 也可以借用VB、C、Java等语言,通过调用级接口(Call Level Interface) 直接发送到数据库管理系统。SQL基本上是域关系演算,但可以实现关系代数 操作。
其语句也称为“数据检索语句”,用于从表中获得数据,保留字SELECT是DQL( 也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE、ORDER BY、GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。 ❖ 3.数据操作语言(Data Manipulation Language,DML)
数据库原理与应用第3章 关系数据库标准语言SQL-PPT精品课件
1.假如要建立一个数据库,如何建立? 2.数据库名字是什么? 3.可以不可以使用一张表来存放这些数据?为什么?好处和坏 处各是什么? 4.要不要规范化,如何规范化? 5.缺省值如何设置? 6.完整性如何设置? 7.最后结果应该是怎么样的?
1、有关数据表的操作,包括表的创建、修改、删除和建立索引等操 作以及表中数据维护的有关操作和方法; 基本掌握在SQL Server中使用SQL语句对表的操作和表的数据操作, 包括创建表、删除表、对表中字段建立索引、向表中增加数据、修 改数 据、删除数据等。 2、如何从SQL Server中中使用SELECT语句查询数据的方法; 基本掌握单表查询、连接查询、嵌套查询和集合查询,使用SELECT 语句的条件子句、排序子句和分组子句。 3、视图的概念和优点,并结合实例介绍了在SQL Server中如何实现 创建、修改和管理视图; 掌握在SQL Server中如何创建、修改和管理视图。
1.选择数据库
2.选Байду номын сангаас新建查询
直接点击
3.3.1 基本表的定义和维护功能
1. 定义基本表 定义基本表语句的一般格式为: CREATE TABLE 〈 表名〉(
〈列名〉〈数据类型〉[〈列级完整性约束条件〉] [,列名〉〈数据类型〉[〈列级完整性约束条件〉]] [,…n] [,〈表级完整性约束条件〉][,…n] );
CREATE TABLE Student ( Sno char(10) NOT NULL UNIQUE, Sname char(20) UNIQUE, Ssex char(1) default '男', Sage int default 20, Sdept char(15) )
第三章 关系数据库标准语言-SQL
3.3 查询
【例5】查询选修了课程的学生人数。 解: SELECT COUNT (DISTINCT S#) FROM SC 【例6】统计C810号课程的学生平均成绩。 解: SELECT AVG G) AVG(G FROM SC =‘C810 C810’; WHERE C# = C810 ;
22
3.3 查询
4.数据分组查询
使用聚合函数可以实现对关系中的所有查 询的元组进行聚合运算,但在实际应用中,经 常要将查询的结果分组,然后再对每个分组进 行统计。这时就可以利用SELECT语句提供的 GROUP BY子句和HAVING短语来实现分组统计。
23
3.3 查询
【例7】查询选修了3门以上4学分课程的学生的学号。 解: SELECT S# FROM SC WHERE CR =‘4’ = 4 GROUP BY S# COUNT( )>3 HAVING COUNT(*)>3;
⑵删除索引
DROP INDEX <索引名>
9
3.2 数据定义
【例1】建立一个学生关系Student Student,由学号Sno 、姓名 Student Sno Sdept五个属 Sname 、性别Ssex 、年龄Sage 、所在系Sdept Ssex Sage Sdept 性组成,其中学号不能为空且值是唯一的。 解:CREATE TABLE Student CREATE (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(2), Sage INT, Sdept CHAR(15));
18
3.3 查询
【例1】查询全体学生的姓名,学号,所在系。 解: SELECT SN,S#,SD SN,S#, S; FROM S; 【例2】查询考试成绩不及格的学生的学号。 解: SELECT DISTINCT S# FROM SC G<60; WHERE G<60; 【例3】查询计算机系或信息系年龄在20岁以下的学生姓名。 解: SELECT SN FROM S WHERE (SD=‘计算机’ OR SD=‘信息’) AND SA<20; (SD SD ) SA<20
(数据库原理与应用课件)第三章关系数据库标准语言
准
语
言 ❖若一个记录有相关记录,那么便不能在主表中
SQL
更改其主键值;
第 四
15.创建关系
章
关
系 数
NorthWind数据库
据
库
标
产品
准
语
言
订单
客户
SQL
第 四 章
关 系 数 据 库 标 准 语 言
SQL
第
16.导入数据
四 章
关
系
数 据
库 标 准 语 言
SQL
演示导入Excel数据到数据库表向导…
据
库 标
❖ 3.1.2 SQL的特点
准
语 言
❖ 3.1.3 SQL的基本概念
SQL
第 四
3.1 SQL概述
章
关
系
❖ 3.1.1 SQL 的产生与发展
数
据 库
SQL :1974年提出,86年公布标准以来,不断发展
标
准 语
❖ 3.1.2 SQL的特点
言
SQL
❖ 3.1.3 SQL的基本概念
第 四
SQL标准的进展过程
第 四
3.面向集合的操作方式
章
关 系
❖ 非关系数据模型采用面向记录的操作方式,操
数 作对象是一条记录
据
库 ❖ SQL采用集合操作方式
标
准
➢ 操作对象、查找结果可以是元组的集合
语
言
➢ 一次插入、删除、更新操作的对象可以是元
SQL
组的集合
第
四
4.以同一种语法结构提供多种使用方式
章
关
系 ❖ SQL是独立的语言
SELECT
数据库第三章关系数据库标准语言SQL
数据库第三章关系数据库标准语言SQL第三章关系数据库标准语言SQL习题1.试述SQL语言的特点。
2.试述SQL的定义功能。
3.用SQL语句建立第二章习题5中的4个表。
4.针对上题中建立的4个表试用SQL语言完成第二章习题5中的查询。
5.针对习题3中的4个表试用SQL语言完成下列各项操作:(1)找出所有供应商的姓名和所在城市。
(2)找出所有零件名称、颜色、重量。
(3)找出使用供应商SI所供应零件的工程号码。
(4)找出工程项目J2使用的各种零件的名称及其数量。
(5)找出上海厂商供应的所有零件号码。
(6)找出使用上海产的零件的工程名称。
(7)找出没有使用天津产的零件的工程号码。
(8)把全部红色零件的颜色改成蓝色。
(9)由S5供给J4的零件P6改为由S3供应,请做必要的修改。
(10)从供应商关系中见风删除S2的记录,并从供应情况关系中删除相应的记录。
6.什么是基本表?什么是视图?两者的区别和联系是什么?7.试述视图的优点。
8.所有的视图是否都可以更新?为什么?9.哪类视图是可以更新的?哪类视图是不可以更新的?各举一例说明。
10.试述某个你熟悉的实际系统中对视图更新的规定。
11.请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。
针对该视图完成下列查询:(1)找出三建工程项目使用的各种零件代码及其数量。
(2)找出供应商S1的供应情况。
12.针对习题3建立的表,用SQL语言完成以下各项操作:(1)把对表S的INSERT权限授予用户张勇,并允许他在将此权限授予其他用户。
(2)把查询SPJ表和修改QTY属性的权限授给用户李天明。
13.在嵌入式SQL中是如何区分SQL语句和主语言语句的。
14.在嵌入式SQL中是如何解决数据库工作单元与源程序工作单元之间通信的?15.在嵌入式SQL中是如何协调SQL语言的集合处理方式和主语言的单记录处理方式的?参考答案1.答:(1)综合统一。
第3章 关系数据库标准语言SQL
3.1 SQL概述
关系数据库语言(Structured Query Language, SQL)是一种标准数据库语言,从对数据库的随机查 询到数据库的管理和程序的设计,几乎无所不能,而 且书写非常简单,使用方便。
3.1.2 SQL的组成
1. 数据定义(主要用于定义数据库的逻辑结构,包括定义基 本表、索引和视图三个部分)
例 对学生表Student,按姓名sname升序建立索引,索引名 为stusname。 CREATE INDEX stusname ON Student (sname); 例 对选修表SC,按学号sno升序和课程号cno降序建立唯一 性索引。索引名为scno。 CREATE UNIQUE INDEX scno ON SC(sno ASC, cno DESC); 例如,要在Student表的Sname列上建立一个聚簇索引,并 按升序排列的命令为: CREATE Cluster INDEX Student ON Student(Sname); 例 在学生表中按学号建立索引。 CREATE UNIQUE INDEX ST ON STUDENTS (SNO ASC)
說明:<表名>是所要建立的基本表的名字。在同一个数据库 中可以建立多个基本表,但表不能同名。一个基本表中至少 由一个或多个属性列组成。对于同一表中的各列要有不同的 <列名>,并要指明<数据类型>等。 在建表时还可以定义有关的完整性约束。完整性约束有两个 层次,即针对表中某一列的【列级完整性约束】和针对表的 【表级完整性约束】(方括号表示任选项)。用户可以根据 实际需要对于每列指明列级完整性约束,如用来指明该列的 值是否允许为空值(NULL)、值是否唯一(UNIQUE)等; 也可以对表指明表级完整性约束,如用来指明该表的主码 (PRIMARYKEY)、外码(FOREGIN KEY)和被参照关系 (REFERENCES)等。这些完整性约束将存入系统的数据 字典中。当用户对表进行数据更新时,由DBMS自动检查用 户操作是否违背所定义的完整性约束。
数据库系统原理第三章关系数据库标准语言-SQL
2019/12/23
数据库系统数据库系统
2
第三章 关系数据库标准语言——SQL
86年10月 成为美国国家标准 87年 国际标准化组织(ISO)采纳为国际标准 89年 ISO推出SQL89 92年 ISO推出SQL2 99年 ISO推出SQL3
二、SQL的主要特点 1、一体化:两方面 集DDL、DML、DCL为一体 实体和联系都是关系,因此每种操作只需一种操作符
Base table B1
Base table Base table
B2
B3
Base table B4
模式
2019/12/23
Stored file S1
Stored file S2
内模式
SQL支持的三级模式结构
数据库系统数据库系统
5
第三章 关系数据库标准语言——SQL
说明: 基本表是独立存在的表。一个关系对应一个表。一个( 或多个)表对应一个存储文件,每个表可有若干索引,这 些索引也可放在存储文件中。
数据操纵: INSERT,DELETE,UPDATE
数据控制: GRANT,REVOKE
6、支持三级模式结构
视图
外模式
基本表(的集合) 模式
存储文件和索引 内模式
2019/12/23
数据库系统数据库系统
4
第三章 关系数据库标准语言——SQL
用户 SQLView V1 V Nhomakorabeaew V2
外模式
2019/12/23
数据库系统数据库系统
3
第三章 关系数据库标准语言——SQL
2、高度非过程化语言 (WHAT HOW )
3、面向集合的操作方式(一次一集合)
数据库技术及应用-第三章 关系数据库标准语言SQL
第三章关系数据库标准语言SQL本章介绍结构化查询语言(Structured Query Language,SQL)的基本概念与特点、SQL的数据定义、数据查询、数据操作、数据控制等功能及基本操作命令。
主要内容☐3.1 SQL的基本概念及特点☐3.2 SQL的数据定义语言☐3.3 SQL的数据查询语言☐3.4 SQL的数据操纵语言☐3.5 视图3.1 SQL的基本概念与特点☐ 3.1.1 SQL的基本概念⏹SQL是数据库中使用的标准数据查询语言。
⏹SQL是一种资料库查询和程式设计语言,用于存取资料以及查询、更新和管理关联式资料库系统。
SQL是在1974年由Boyce和Chamberlin提出的,并在IBM公司研制的关系数据库管理系统原型System R上实现。
SQL由于其使用方便、功能丰富、语言简洁、容易掌握等特点,很快得到推广和应用。
⏹美国国家标准局(ANSI)与国际标准化组织(ISO)已经制订了SQL标准。
SQL标准从1986年公布以来随着数据库技术的发展不断发展,不断丰富。
3.1.2 SQL的功能☐(1)数据定义语言(Data Definition Language,DDL)⏹创建、修改或删除数据库中各种对象,包括模式、基本表、视图、索引等结构。
☐(2)数据查询语言(Data Query Language,DQL)⏹按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,完成用户需要的各种查询功能,但并不改变数据库中数据。
☐(3)数据操纵语言(Data Manipulation Language,DML)⏹用于完成数据更新工作,包括对已经存在的数据库进行记录的插入、删除、修改等操作。
☐(4)数据控制语言(Data Control Language,DCL)⏹用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视。
3.1.3 SQL数据库的体系结构☐SQL语言支持关系数据库三级模式结构,但术语与传统的关系模型术语不同。
第3章 关系数据库标准语言SQL(3)
1. 修改某一个元组的值
[例3.73] 将学生201215121的年龄改为22岁 UPDATE Student SET Sage=22 WHERE Sno=' 201215121 ';
An Introduction to Database System
An Introduction to Database System
1. 插入元组
❖ 语句格式
INSERT INTO <表名> [(<属性列1>[,<属性列2 >…)] VALUES (<常量1> [,<常量2>]… );
❖ 功能
将新元组插入指定表中
An Introduction to Database System
FROM Student
GROUP BY Sdept;
An Introduction to Database System
插入子查询结果(续)
❖ 关系数据库管理系统在执行插入语句时会检查所 插元组是否破坏表上已定义的完整性规则
实体完整性 参照完整性 用户定义的完整性
NOT NULL约束 UNIQUE约束 值域约束
插入元组(续)
❖ VALUES子句
提供的值必须与INTO子句匹配
值的个数 值的类型
An Introduction to Database System
插入元组(续)
[例3.69]将一个新学生元组(学号:201215128;姓名:陈冬; 性别:男;所在系:IS;年龄:18岁)插入到Student表中。 INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215128','陈冬','男','IS',18);
数据库原理三章关系数据库标准语言SQL
▪ 教师编号(teacher_no) ▪ 所上课程(course_kc) ▪ 是否专业课(course_zy) ▪ 课时数(course_ks) ▪ 班级号(classe_number) ▪ 总人数(total_number)
3、命令方式下管理数据表
❖ 在T-SQL中,用于创建数据表的语句是CREATE TABLE,该语句的基本语法格式为:
练习1:在数据库student中创建stu_info表,表中包括:学 号、姓名、出生年月、性别、地址、电话号码、邮编,所在 系代号,每月生活补贴等。
USE student
CREATE TABLE stu_info ( 学号 char(10) NOT NULL PRIMARY KEY,
姓名 char(8) NOT NULL, 出生年月 datetime NULL, 性别 char(2) NOT NULL default('女'), 地址 char(20), 电话号码 char(12), 邮编 char(6), 系代号 tinyint, 每月生活补贴 money ) go
MAXSIZE = unlimited,FILEGROWTH = 1MB )
2)命令方式修改数据库
主要内容: ❖ 增加或删除数据文件 ❖ 改变数据文件的大小和增长方式 ❖ 增加或删除日志文件 ❖ 改变日志文件的大小和增长方式 ❖ 增加或删除文件组
语法格式
Alter database database_name {add file <filespec>[,…n] [to filegroup filegroupname] |add log file <filespec>[,…n] |remove file logical_file_name [with delete] |modify file <filespec> |modify name=new_databasename |add filegroup filegroup_name |rup_name |modify filegroup filegroup_name }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[例51]查询既选修了课程1又选修了课程2的学生(即查询选修课 程1的学生集合与选修课程2的学生集合的交集)。
一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式 的子查询等价替换,但是所有带IN谓词、比较运算符、ANY和 ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。 如例39可以用带EXISTS谓词的子查询替换:
SELECT * FROM Student S1 WHERE EXISTS ( SELECT * FROM Student S2 WHERE S2.Sdept=S1.Sdept AND S2.Sname=‘刘晨’);
数据库原理及应用
Principle and Application of Database
第三章 关系数据库标准语言SQL(续)
1/20
学习目标
掌握嵌套查询(重点+难点) 掌握集合查询(重点) 进一步理解SELECT语句的一般格式(重点)
2/20
3.4
数据查询
嵌套查询:一个SELECT语句称为一个查询块,将一个查询块 嵌套在另一个查询块的WHERE子句或HAVING子句条件中的查 询称为嵌套查询。其中外层查询块称为父查询,内层查询块称 为子查询,子查询中不能使用ORDER BY子句。嵌套查询增强 了SQL的查询能力,以层层嵌套的方式来构造程序正是SQL结 构化的含义所在。 例如:
6/20
[例42]查询其他系中比计算机科学系某一学生年龄小的学生姓 名和年龄:
SELECT Sname,Sage FROM Student WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept=‘CS’) AND Sdept <> ‘CS’;
带有比较运算符的子查询 [例41]找出每个学生超过他所有选修课程平均成绩的课程号。
SELECT Sno,Cno FROM SC x WHERE Grade >= (SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);
本例子查询的查询条件依赖于父查询,这类子查询称为相关子 查询,整个查询语句称为相关嵌套查询。子查询是求一个学生 所有选修课程的平均成绩,至于是哪个学生,则要看x.Sno, 该值是与父查询相关的。求解过程由外向内反复求值。
对集合操作的排序:ORDER BY子句用数字指定排序属性,只
用于对最终查询结果排序,不能对中间结果排序。如:
错误:SELECT * FROM Student WHERE Sdept=‘IS’ ORDER BY Sno UNION SELECT * FROM Student WHERE Sage<=19 ORDER BY Sno; 正确:SELECT * FROM Student WHERE Sdept=‘IS’ UNION SELECT * FROM Student WHERE Sage<=19 ORDER BY 1;
SELECT Sname /*外层查询或父查询*/ FROM Student WHERE Sno IN (SELECT Sno /*内层查询或子查询*/ FROM SC WHERE Cno=‘2’);
3/20
Hale Waihona Puke [例39]查询与“刘晨”在同一个系学习的学生。
SELECT * FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname=‘刘晨’);
本例子查询的查询条件不依赖于父查询,称为不相关子查询, 整个查询称为不相关嵌套查询,其求解方法是由里向外处理, 即先求子查询,其结果用于建立父查询的查找条件。 本例也可以用自身连接来完成:
SELECT S1.* FROM Student S1,Student S2 WHERE S1.Sdept=S2.Sdept AND S2.Sname=‘刘晨’;
本查询也可以用聚集函数来实现:
SELECT Sname,Sage FROM Student WHERE Sage < (SELECT MAX(Sage) FROM Student WHERE Sdept=‘CS’) AND Sdept <> ‘CS’;
7/20
[例43]查询其他系中比计算机科学系所有学生年龄都小的学生 姓名和年龄:
SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=1);
本查询也可以用连接查询实现:
SELECT Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND Cno=1;
13/20
集合查询:SELECT语句的查询结果是元组的集合,所以多个 SELECT 语 句 的 结 果 可 进 行 并 UNION 、 交 INTERSECT 和 差 EXCEPT等集合操作。注意,参加集合操作的各结果表的列数 必须相同且对应列的数据类型也必须相同。 [例48]查询IS系的学生及年龄不大于19岁的学生。
9/20
[例44]查询所有选修了1号课程的学生姓名。 思路:本查询涉及Student和SC表,首先在Student表中依次取 每个元组的Sno值,用此值去检查SC表,若SC表中存在这样的 元组,其Sno值等于此Student.Sno值,并且其Cno=1,则取此 Student.Sname送入结果关系。 用相关嵌套查询
SELECT Sno FROM SC WHERE Cno=1 INTERSECT SELECT Sno FROM SC WHERE Cno=2; 或:SELECT Sno FROM SC WHERE Cno=1 AND Sno IN (SELECT Sno FROM SC WHERE Cno=2);
可见,实现同一个查询可以有多种方法,当然不同的方法其执 行效率可能会有差别,甚至会差别很大,这些将涉及到数据库 性能的优化技术。
4/20
[例40]查询选修了课程名为“信息系统”的学生学号和姓名。
SELECT Sno,Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname=‘信息系统’));
8/20
使用聚集函数实现子查询能够减少比较次数,比直接用ANY或 ALL查询效率要高。 ANY、ALL与聚集函数的对应关系如下:
带有EXISTS谓词的子查询:EXISTS代表存在量词。一个带 有EXISTS谓词的子查询不返回任何数据,只产生逻辑true或 false。若内层查询结果非空,则外层WHERE子句返回真值, 否则返回假值。EXISTS子查询的目标列通常都用* ,给出列名 无实际意义。使用NOT EXISTS的情况与EXISTS相反。
(SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=o));
由此可知,使用EXISTS或NOT EXISTS可以实现带全称量词 的查询。
12/20
[例47]查询至少选修了200215122选修的全部课程的学生学号。 思路:题意可以表达为:查询学号为x的学生,对任何一门课程 y,只要学生200215122选修了课程y,则x也选修了y。 用p表示谓词 “学生200215122选修了课程y”,q表示谓词 “学 生x选修了课程y”,则上述查询为:(y)pq≡y(p∧q),即 表达语义:不存在这样的课程y,学生200215122选修了,而学 生x没有选。
SELECT DISTINCT Sno FROM SC X WHERE NOT EXISTS (SELECT * FROM SC Y WHERE Y.Sno= 200215122 AND NOT EXISTS (SELECT * FROM SC Z WHERE Z.Sno=X.Sno AND o=o));
SELECT Sno FROM SC WHERE Cno=1 UNION SELECT Sno FROM SC WHERE Cno=2;
14/20
[例50]查询IS系的学生与年龄不大于19岁的学生的交集(即查询 计算机系中年龄不大于19岁的学生)。
SELECT * FROM Student WHERE Sdept=‘IS’
SELECT * FROM Student WHERE Sdept=‘IS’ UNION SELECT * FROM Student WHERE Sage<=19; 或 SELECT DISTINCT * FROM Student WHERE Sdept=‘CS’ OR Sage<=19;
[例49]查询选修了课程1或者选修了课程2的学生。
5/20
带有ANY或ALL谓词的子查询:子查询返回单值时可以用比较 运算符,如例39,由于一个学生只能在一个系学习,所以内查 询的结果是一个值,可以用=代替IN:
SELECT * FROM Student WHERE Sdept= (SELECT Sdept FROM Student WHERE Sname=‘刘晨’);
当子查询返回多值时要用ANY或ALL谓词,语义是:
>(>=) ANY >(>=) ALL <(<=) ANY <(<=) ALL =ANY =ALL !=ANY !=ALL 大于(大于等于)子查询结果中的某个值 大于(大于等于)子查询结果中的所有值 小于(小于等于)子查询结果中的某个值 小于(小于等于)子查询结果中的所有值 等于子查询结果中的某个值 等于子查询结果中的所有值(通常没有实际意义) 不等于子查询结果中的某个值 不等于子查询结果中的任何一个值