Upload
thomas-baxter
View
44
Download
8
Embed Size (px)
DESCRIPTION
数据库原理与应用. 11 – SQL 语言 ⑦ 数据修改、视图等 郑捷. 嵌套查询(子查询). 在一个查询中,嵌入另外一个查询,作为外查询的依据或者参与者 根据内外查询的结果和关系,分为 相关与不相关子查询 单值子查询、列表子查询 子表查询 存在查询. 数据库原理与应用. 郑捷. 2. 子查询. ANY、ALL谓词 EXISTS子查询 子表查询 UNION查询 综合使用. ANY(SOME) 、 ALL 谓词. 对于返回列表的子查询,通常使用 IN 谓词配合进行查询 但是有时候可能希望对其每个元素进行判断. - PowerPoint PPT Presentation
Citation preview
数据库原理与应用11 – SQL 语言 ⑦数据修改、视图等
郑捷
数据库原理与应用 2郑捷[email protected] www.lzj.name
嵌套查询(子查询)• 在一个查询中,嵌入另外一个查询,作为外查询
的依据或者参与者• 根据内外查询的结果和关系,分为– 相关与不相关子查询– 单值子查询、列表子查询– 子表查询– 存在查询
数据库原理与应用 郑捷 2
数据库原理与应用 4郑捷[email protected] www.lzj.name
ANY(SOME)、 ALL谓词
• 对于返回列表的子查询,通常使用 IN 谓词配合进行查询
• 但是有时候可能希望对其每个元素进行判断
数据库原理与应用 5郑捷[email protected] www.lzj.name
ANY( SOME)、 ALL谓词
• ANY ( SOME )和 ALL 谓词对列表中的内容进行了修饰,使得之前的比较运算有可能进行。
• ANY 要求比较运算与任一个元素满足条件即可• ALL 要求比较运算与全部元素均满足条件才行• SOME 是 ANY 的同义词
数据库原理与应用 6郑捷[email protected] www.lzj.name
比较运算等价转换关系
• 打叉表示在大部分情况下,这个比较是没有意义的• 注意:以上等价条件是在子查询有结果的情况下。当子查
询没有结果,则情况比较特殊
= <> < >
ANY IN × < MAX > MIN
ALL × NOT IN < MIN > MAX
数据库原理与应用 7郑捷[email protected] www.lzj.name
EXISTS存在子查询
• 有些场合下,我们只需要知道一个查询有没有可返回的记录,而不关心具体内容
• EXISTS 用于判断子查询是否有返回内容。如果有,则整个式子为真,否则为假。直接作为逻辑条件
• 但是返回数量多少、什么内容,一概忽略
数据库原理与应用 8郑捷[email protected] www.lzj.name
EXISTS子查询性质
• EXISTS 子查询基本上都是相关子查询,一般用 SELECT * 方式,因为我们不关心查到什么
• 重点在于:如何构造子查询的 WHERE 、 HAVING字句
• 在不考虑效率、可读性的情况下, EXISTS 子查询可以等价实现几乎所有的查询
数据库原理与应用 9郑捷[email protected] www.lzj.name
子表子查询
• 在 FROM 字句中,被查询的对象可以是另外一个查询结果,叫做子表子查询
• 子表子查询是将子查询的结果作为外查询的数据源
数据库原理与应用 10郑捷[email protected] www.lzj.name
子表子查询要求
• 对于子表子查询,只能是不相关子查询• 子查询作为表参与外查询,必须有别名!!• 往往子查询被作为参与连接的一个部分
数据库原理与应用 11郑捷[email protected] www.lzj.name
UNION查询
• UNION 查询实际上就是将两个查询的结果进行“并”运算
• 要求其连接的两个查询结果集在列属性上一一对应
• 例:找出年龄未知的工程师,以及男性工程师
• 更多情况下, UNION 连接的是无法用相同结构进行查询的几个语句
• UNION 会自动将重复的元组删去,可以用 UNION ALL 来保留重复记录
数据库原理与应用 12郑捷[email protected] www.lzj.name
数据修改、视图等
• 数据的更改– 插入、删除、更新
• 视图– 概念和作用– 创建和使用– 视图的限制
• 索引、约束等的额外说明
数据库原理与应用 13郑捷[email protected] www.lzj.name
数据更新
• 有三种操作
• 插入:添加新记录• 删除:删除原有记录• 更新:修改原记录中指定字段的值
• 数据更新只影响记录,不影响表结构,同时新数据必须满足约束要求
数据库原理与应用 14郑捷[email protected] www.lzj.name
插入语句
• INSERT [INTO] < 表 > [(<字段列表 >)]VALUES(<值列表 >)
• INSERT [INTO] < 表 > [(<字段列表 >)]SELECT 字句
数据库原理与应用 15郑捷[email protected] www.lzj.name
插入数据说明
• 插入的新记录必须满足约束要求• 如果省略字段列表,则系统自动默认按照字段顺序插入
• 值列表必须和字段列表一一对应• 当某个字段没有给出值时,按照字段默认值进行
• 第二种语法将子查询的结果插入表中,可以同时插入多条记录,但是同样必须满足上述要求
数据库原理与应用 16郑捷[email protected] www.lzj.name
插入案例
• 添加新公司• 添加新员工• 安排人员参加项目
• 新建一个表,记录员工的姓名、公司名称和参加的项目数,查询出结果并插入新表
数据库原理与应用 17郑捷[email protected] www.lzj.name
SELECT INTO语句
• SELECT < 字段 > INTO < 新表名 > FROM ......
• 该语句将查询到的结果作为一个新表
数据库原理与应用 19郑捷[email protected] www.lzj.name
删除说明
• 如果没有指定条件,则删除全表所有记录,操作请注意!!
• 删除全部记录后表结构仍存在,只是数据没了• 当表有外键时,删除操作应满足外键要求
数据库原理与应用 20郑捷[email protected] www.lzj.name
外键对删除的影响
• 当两个表之间有外键关系时,对主键表记录的删除可能引起外键表数据违反约束
• 为避免这个情况,在建立外键的时候可以对删除操作进行如下附加说明:– 禁止操作( NO ACTION )
• 禁止操作的进行,报告违反约束– 级联操作( CASCADE )
• 级联删除相关的外键表记录– 置空操作( SET NULL )
• 将外键表相关记录的外键字段设置为空 (NULL)• 在 SQL2000 中不提供
数据库原理与应用 22郑捷[email protected] www.lzj.name
更新数据
• UPDATE <表 >SET <字段 >=<值 > [{,<字段 >=<值 >}][WHERE <条件 >]
数据库原理与应用 23郑捷[email protected] www.lzj.name
更新说明
• 如果没有指定条件,则更新全表的记录• 新数据必须满足约束要求• 新值可以是一个常量,也可以是一个表达式,还
可以是根据原值计算的结果
• 当更新主键字段时,应注意外键的要求。外键对其的约束和删除操作一样
数据库原理与应用 25郑捷[email protected] www.lzj.name
视图
• 视图是从一个或几个基本表或视图导出的表• 它是一个虚表• 数据库只保存视图的定义,而不存放数据,数据
保存在原始的基本表中
• 视图可以被看作是命名了的查询
数据库原理与应用 26郑捷[email protected] www.lzj.name
创建视图
• CREATE VIEW <视图名 >[(<列名列表 >)]AS SELECT ……[WITH CHECK OPTION]
• DROP VIEW < 视图名 >
数据库原理与应用 27郑捷[email protected] www.lzj.name
视图的限制
• SELECT 语句可以是任意合法的查询,不论多复杂都可以
• 在没有 TOP 字句的情况下,不允许出现 ORDER BY字句(仅限 SQL Server )
数据库原理与应用 29郑捷[email protected] www.lzj.name
视图的使用
• 在查询中,可以将视图看作一个表进行使用,对其进行查询
• 这个时候,可以将视图视作一个命名后的子查询• 这也是最常见的用法
• 例:在上面建立的视图基础上进行查询
数据库原理与应用 30郑捷[email protected] www.lzj.name
更新视图
• 可以透过视图进行数据的更新
• 但是有一个明确的限制:只有视图中的数据可以和基本表中的数据一一对应时,才能进行更新
• 例如,之前建立的分组查询的视图是不可更新的,而男员工视图是可以更新的
数据库原理与应用 31郑捷[email protected] www.lzj.name
视图的作用
• 简化用户操作• 提供对数据的不同观察角度• 提供数据的逻辑独立性• 提供更好的安全保护• 有利于更清晰地表达查询
数据库原理与应用 32郑捷[email protected] www.lzj.name
索引
• 索引是对基本表中的数据的一个摘要
• 索引能提高检索数据的效率
• 在设计查询的时候,要注意思考索引起到的作用
数据库原理与应用 34郑捷[email protected] www.lzj.name
预习
• 关系查询处理和查询优化(课本第九章)• 查询优化的概念• 查询的步骤• 查询优化• 代数优化• 物理优化