34
数数数数数数数数 11 – SQL 语语 语语语语 语语语 语语

数据库原理与应用

Embed Size (px)

DESCRIPTION

数据库原理与应用. 11 – SQL 语言 ⑦ 数据修改、视图等 郑捷. 嵌套查询(子查询). 在一个查询中,嵌入另外一个查询,作为外查询的依据或者参与者 根据内外查询的结果和关系,分为 相关与不相关子查询 单值子查询、列表子查询 子表查询 存在查询. 数据库原理与应用. 郑捷. 2. 子查询. ANY、ALL谓词 EXISTS子查询 子表查询 UNION查询 综合使用. ANY(SOME) 、 ALL 谓词. 对于返回列表的子查询,通常使用 IN 谓词配合进行查询 但是有时候可能希望对其每个元素进行判断. - PowerPoint PPT Presentation

Citation preview

Page 1: 数据库原理与应用

数据库原理与应用11 – SQL 语言 ⑦数据修改、视图等

郑捷

Page 2: 数据库原理与应用

数据库原理与应用 2郑捷[email protected] www.lzj.name

嵌套查询(子查询)• 在一个查询中,嵌入另外一个查询,作为外查询

的依据或者参与者• 根据内外查询的结果和关系,分为– 相关与不相关子查询– 单值子查询、列表子查询– 子表查询– 存在查询

数据库原理与应用 郑捷 2

Page 3: 数据库原理与应用

数据库原理与应用 3郑捷[email protected] www.lzj.name

子查询

• ANY 、 ALL 谓词• EXISTS 子查询• 子表查询• UNION 查询• 综合使用

Page 4: 数据库原理与应用

数据库原理与应用 4郑捷[email protected] www.lzj.name

ANY(SOME)、 ALL谓词

• 对于返回列表的子查询,通常使用 IN 谓词配合进行查询

• 但是有时候可能希望对其每个元素进行判断

Page 5: 数据库原理与应用

数据库原理与应用 5郑捷[email protected] www.lzj.name

ANY( SOME)、 ALL谓词

• ANY ( SOME )和 ALL 谓词对列表中的内容进行了修饰,使得之前的比较运算有可能进行。

• ANY 要求比较运算与任一个元素满足条件即可• ALL 要求比较运算与全部元素均满足条件才行• SOME 是 ANY 的同义词

Page 6: 数据库原理与应用

数据库原理与应用 6郑捷[email protected] www.lzj.name

比较运算等价转换关系

• 打叉表示在大部分情况下,这个比较是没有意义的• 注意:以上等价条件是在子查询有结果的情况下。当子查

询没有结果,则情况比较特殊

= <> < >

ANY IN × < MAX > MIN

ALL × NOT IN < MIN > MAX

Page 7: 数据库原理与应用

数据库原理与应用 7郑捷[email protected] www.lzj.name

EXISTS存在子查询

• 有些场合下,我们只需要知道一个查询有没有可返回的记录,而不关心具体内容

• EXISTS 用于判断子查询是否有返回内容。如果有,则整个式子为真,否则为假。直接作为逻辑条件

• 但是返回数量多少、什么内容,一概忽略

Page 8: 数据库原理与应用

数据库原理与应用 8郑捷[email protected] www.lzj.name

EXISTS子查询性质

• EXISTS 子查询基本上都是相关子查询,一般用 SELECT * 方式,因为我们不关心查到什么

• 重点在于:如何构造子查询的 WHERE 、 HAVING字句

• 在不考虑效率、可读性的情况下, EXISTS 子查询可以等价实现几乎所有的查询

Page 9: 数据库原理与应用

数据库原理与应用 9郑捷[email protected] www.lzj.name

子表子查询

• 在 FROM 字句中,被查询的对象可以是另外一个查询结果,叫做子表子查询

• 子表子查询是将子查询的结果作为外查询的数据源

Page 10: 数据库原理与应用

数据库原理与应用 10郑捷[email protected] www.lzj.name

子表子查询要求

• 对于子表子查询,只能是不相关子查询• 子查询作为表参与外查询,必须有别名!!• 往往子查询被作为参与连接的一个部分

Page 11: 数据库原理与应用

数据库原理与应用 11郑捷[email protected] www.lzj.name

UNION查询

• UNION 查询实际上就是将两个查询的结果进行“并”运算

• 要求其连接的两个查询结果集在列属性上一一对应

• 例:找出年龄未知的工程师,以及男性工程师

• 更多情况下, UNION 连接的是无法用相同结构进行查询的几个语句

• UNION 会自动将重复的元组删去,可以用 UNION ALL 来保留重复记录

Page 12: 数据库原理与应用

数据库原理与应用 12郑捷[email protected] www.lzj.name

数据修改、视图等

• 数据的更改– 插入、删除、更新

• 视图– 概念和作用– 创建和使用– 视图的限制

• 索引、约束等的额外说明

Page 13: 数据库原理与应用

数据库原理与应用 13郑捷[email protected] www.lzj.name

数据更新

• 有三种操作

• 插入:添加新记录• 删除:删除原有记录• 更新:修改原记录中指定字段的值

• 数据更新只影响记录,不影响表结构,同时新数据必须满足约束要求

Page 14: 数据库原理与应用

数据库原理与应用 14郑捷[email protected] www.lzj.name

插入语句

• INSERT [INTO] < 表 > [(<字段列表 >)]VALUES(<值列表 >)

• INSERT [INTO] < 表 > [(<字段列表 >)]SELECT 字句

Page 15: 数据库原理与应用

数据库原理与应用 15郑捷[email protected] www.lzj.name

插入数据说明

• 插入的新记录必须满足约束要求• 如果省略字段列表,则系统自动默认按照字段顺序插入

• 值列表必须和字段列表一一对应• 当某个字段没有给出值时,按照字段默认值进行

• 第二种语法将子查询的结果插入表中,可以同时插入多条记录,但是同样必须满足上述要求

Page 16: 数据库原理与应用

数据库原理与应用 16郑捷[email protected] www.lzj.name

插入案例

• 添加新公司• 添加新员工• 安排人员参加项目

• 新建一个表,记录员工的姓名、公司名称和参加的项目数,查询出结果并插入新表

Page 17: 数据库原理与应用

数据库原理与应用 17郑捷[email protected] www.lzj.name

SELECT INTO语句

• SELECT < 字段 > INTO < 新表名 > FROM ......

• 该语句将查询到的结果作为一个新表

Page 18: 数据库原理与应用

数据库原理与应用 18郑捷[email protected] www.lzj.name

删除

• DELETE [FROM] <表 > [WHERE <条件 >]

Page 19: 数据库原理与应用

数据库原理与应用 19郑捷[email protected] www.lzj.name

删除说明

• 如果没有指定条件,则删除全表所有记录,操作请注意!!

• 删除全部记录后表结构仍存在,只是数据没了• 当表有外键时,删除操作应满足外键要求

Page 20: 数据库原理与应用

数据库原理与应用 20郑捷[email protected] www.lzj.name

外键对删除的影响

• 当两个表之间有外键关系时,对主键表记录的删除可能引起外键表数据违反约束

• 为避免这个情况,在建立外键的时候可以对删除操作进行如下附加说明:– 禁止操作( NO ACTION )

• 禁止操作的进行,报告违反约束– 级联操作( CASCADE )

• 级联删除相关的外键表记录– 置空操作( SET NULL )

• 将外键表相关记录的外键字段设置为空 (NULL)• 在 SQL2000 中不提供

Page 21: 数据库原理与应用

数据库原理与应用 21郑捷[email protected] www.lzj.name

删除案例

• 删除上海公司• 删除新添加的员工• 修改外键,使得北京公司可以被删除

Page 22: 数据库原理与应用

数据库原理与应用 22郑捷[email protected] www.lzj.name

更新数据

• UPDATE <表 >SET <字段 >=<值 > [{,<字段 >=<值 >}][WHERE <条件 >]

Page 23: 数据库原理与应用

数据库原理与应用 23郑捷[email protected] www.lzj.name

更新说明

• 如果没有指定条件,则更新全表的记录• 新数据必须满足约束要求• 新值可以是一个常量,也可以是一个表达式,还

可以是根据原值计算的结果

• 当更新主键字段时,应注意外键的要求。外键对其的约束和删除操作一样

Page 24: 数据库原理与应用

数据库原理与应用 24郑捷[email protected] www.lzj.name

更新案例

• 每个人的工资增加 20%• 上海公司的员工调动到北京公司

Page 25: 数据库原理与应用

数据库原理与应用 25郑捷[email protected] www.lzj.name

视图

• 视图是从一个或几个基本表或视图导出的表• 它是一个虚表• 数据库只保存视图的定义,而不存放数据,数据

保存在原始的基本表中

• 视图可以被看作是命名了的查询

Page 26: 数据库原理与应用

数据库原理与应用 26郑捷[email protected] www.lzj.name

创建视图

• CREATE VIEW <视图名 >[(<列名列表 >)]AS SELECT ……[WITH CHECK OPTION]

• DROP VIEW < 视图名 >

Page 27: 数据库原理与应用

数据库原理与应用 27郑捷[email protected] www.lzj.name

视图的限制

• SELECT 语句可以是任意合法的查询,不论多复杂都可以

• 在没有 TOP 字句的情况下,不允许出现 ORDER BY字句(仅限 SQL Server )

Page 28: 数据库原理与应用

数据库原理与应用 28郑捷[email protected] www.lzj.name

视图案例

• 建立公司代码和员工人数的视图

• 建立男员工的视图

Page 29: 数据库原理与应用

数据库原理与应用 29郑捷[email protected] www.lzj.name

视图的使用

• 在查询中,可以将视图看作一个表进行使用,对其进行查询

• 这个时候,可以将视图视作一个命名后的子查询• 这也是最常见的用法

• 例:在上面建立的视图基础上进行查询

Page 30: 数据库原理与应用

数据库原理与应用 30郑捷[email protected] www.lzj.name

更新视图

• 可以透过视图进行数据的更新

• 但是有一个明确的限制:只有视图中的数据可以和基本表中的数据一一对应时,才能进行更新

• 例如,之前建立的分组查询的视图是不可更新的,而男员工视图是可以更新的

Page 31: 数据库原理与应用

数据库原理与应用 31郑捷[email protected] www.lzj.name

视图的作用

• 简化用户操作• 提供对数据的不同观察角度• 提供数据的逻辑独立性• 提供更好的安全保护• 有利于更清晰地表达查询

Page 32: 数据库原理与应用

数据库原理与应用 32郑捷[email protected] www.lzj.name

索引

• 索引是对基本表中的数据的一个摘要

• 索引能提高检索数据的效率

• 在设计查询的时候,要注意思考索引起到的作用

Page 33: 数据库原理与应用

数据库原理与应用 33郑捷[email protected] www.lzj.name

约束

• 约束是对数据的限制

• 在更新数据的时候,要注意约束的作用

Page 34: 数据库原理与应用

数据库原理与应用 34郑捷[email protected] www.lzj.name

预习

• 关系查询处理和查询优化(课本第九章)• 查询优化的概念• 查询的步骤• 查询优化• 代数优化• 物理优化