1 / 34

数据库原理与应用

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

Download Presentation

数据库原理与应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 嵌套查询(子查询) • 在一个查询中,嵌入另外一个查询,作为外查询的依据或者参与者 • 根据内外查询的结果和关系,分为 • 相关与不相关子查询 • 单值子查询、列表子查询 • 子表查询 • 存在查询 郑捷 lzj@fjnu.edu.cn www.lzj.name 数据库原理与应用 郑捷 2

  3. 子查询 • ANY、ALL谓词 • EXISTS子查询 • 子表查询 • UNION查询 • 综合使用 郑捷 lzj@fjnu.edu.cn www.lzj.name

  4. ANY(SOME)、ALL谓词 • 对于返回列表的子查询,通常使用IN谓词配合进行查询 • 但是有时候可能希望对其每个元素进行判断 郑捷 lzj@fjnu.edu.cn www.lzj.name

  5. ANY(SOME)、ALL谓词 • ANY(SOME)和ALL谓词对列表中的内容进行了修饰,使得之前的比较运算有可能进行。 • ANY要求比较运算与任一个元素满足条件即可 • ALL要求比较运算与全部元素均满足条件才行 • SOME是ANY的同义词 郑捷 lzj@fjnu.edu.cn www.lzj.name

  6. 比较运算等价转换关系 • 打叉表示在大部分情况下,这个比较是没有意义的 • 注意:以上等价条件是在子查询有结果的情况下。当子查询没有结果,则情况比较特殊 郑捷 lzj@fjnu.edu.cn www.lzj.name

  7. EXISTS存在子查询 • 有些场合下,我们只需要知道一个查询有没有可返回的记录,而不关心具体内容 • EXISTS用于判断子查询是否有返回内容。如果有,则整个式子为真,否则为假。直接作为逻辑条件 • 但是返回数量多少、什么内容,一概忽略 郑捷 lzj@fjnu.edu.cn www.lzj.name

  8. EXISTS子查询性质 • EXISTS子查询基本上都是相关子查询,一般用 SELECT * 方式,因为我们不关心查到什么 • 重点在于:如何构造子查询的WHERE、HAVING字句 • 在不考虑效率、可读性的情况下,EXISTS子查询可以等价实现几乎所有的查询 郑捷 lzj@fjnu.edu.cn www.lzj.name

  9. 子表子查询 • 在FROM字句中,被查询的对象可以是另外一个查询结果,叫做子表子查询 • 子表子查询是将子查询的结果作为外查询的数据源 郑捷 lzj@fjnu.edu.cn www.lzj.name

  10. 子表子查询要求 • 对于子表子查询,只能是不相关子查询 • 子查询作为表参与外查询,必须有别名!! • 往往子查询被作为参与连接的一个部分 郑捷 lzj@fjnu.edu.cn www.lzj.name

  11. UNION查询 • UNION查询实际上就是将两个查询的结果进行“并”运算 • 要求其连接的两个查询结果集在列属性上一一对应 • 例:找出年龄未知的工程师,以及男性工程师 • 更多情况下,UNION连接的是无法用相同结构进行查询的几个语句 • UNION会自动将重复的元组删去,可以用UNION ALL来保留重复记录 郑捷 lzj@fjnu.edu.cn www.lzj.name

  12. 数据修改、视图等 • 数据的更改 • 插入、删除、更新 • 视图 • 概念和作用 • 创建和使用 • 视图的限制 • 索引、约束等的额外说明 郑捷 lzj@fjnu.edu.cn www.lzj.name

  13. 数据更新 • 有三种操作 • 插入:添加新记录 • 删除:删除原有记录 • 更新:修改原记录中指定字段的值 • 数据更新只影响记录,不影响表结构,同时新数据必须满足约束要求 郑捷 lzj@fjnu.edu.cn www.lzj.name

  14. 插入语句 • INSERT [INTO] <表> [(<字段列表>)]VALUES(<值列表>) • INSERT [INTO] <表> [(<字段列表>)]SELECT 字句 郑捷 lzj@fjnu.edu.cn www.lzj.name

  15. 插入数据说明 • 插入的新记录必须满足约束要求 • 如果省略字段列表,则系统自动默认按照字段顺序插入 • 值列表必须和字段列表一一对应 • 当某个字段没有给出值时,按照字段默认值进行 • 第二种语法将子查询的结果插入表中,可以同时插入多条记录,但是同样必须满足上述要求 郑捷 lzj@fjnu.edu.cn www.lzj.name

  16. 插入案例 • 添加新公司 • 添加新员工 • 安排人员参加项目 • 新建一个表,记录员工的姓名、公司名称和参加的项目数,查询出结果并插入新表 郑捷 lzj@fjnu.edu.cn www.lzj.name

  17. SELECT INTO语句 • SELECT <字段> INTO <新表名> FROM ...... • 该语句将查询到的结果作为一个新表 郑捷 lzj@fjnu.edu.cn www.lzj.name

  18. 删除 • DELETE [FROM] <表> [WHERE <条件>] 郑捷 lzj@fjnu.edu.cn www.lzj.name

  19. 删除说明 • 如果没有指定条件,则删除全表所有记录,操作请注意!! • 删除全部记录后表结构仍存在,只是数据没了 • 当表有外键时,删除操作应满足外键要求 郑捷 lzj@fjnu.edu.cn www.lzj.name

  20. 外键对删除的影响 • 当两个表之间有外键关系时,对主键表记录的删除可能引起外键表数据违反约束 • 为避免这个情况,在建立外键的时候可以对删除操作进行如下附加说明: • 禁止操作(NO ACTION) • 禁止操作的进行,报告违反约束 • 级联操作(CASCADE) • 级联删除相关的外键表记录 • 置空操作(SET NULL) • 将外键表相关记录的外键字段设置为空(NULL) • 在SQL2000中不提供 郑捷 lzj@fjnu.edu.cn www.lzj.name

  21. 删除案例 • 删除上海公司 • 删除新添加的员工 • 修改外键,使得北京公司可以被删除 郑捷 lzj@fjnu.edu.cn www.lzj.name

  22. 更新数据 • UPDATE <表>SET <字段>=<值> [{,<字段>=<值>}][WHERE <条件>] 郑捷 lzj@fjnu.edu.cn www.lzj.name

  23. 更新说明 • 如果没有指定条件,则更新全表的记录 • 新数据必须满足约束要求 • 新值可以是一个常量,也可以是一个表达式,还可以是根据原值计算的结果 • 当更新主键字段时,应注意外键的要求。外键对其的约束和删除操作一样 郑捷 lzj@fjnu.edu.cn www.lzj.name

  24. 更新案例 • 每个人的工资增加20% • 上海公司的员工调动到北京公司 郑捷 lzj@fjnu.edu.cn www.lzj.name

  25. 视图 • 视图是从一个或几个基本表或视图导出的表 • 它是一个虚表 • 数据库只保存视图的定义,而不存放数据,数据保存在原始的基本表中 • 视图可以被看作是命名了的查询 郑捷 lzj@fjnu.edu.cn www.lzj.name

  26. 创建视图 • CREATE VIEW <视图名>[(<列名列表>)]AS SELECT ……[WITH CHECK OPTION] • DROP VIEW <视图名> 郑捷 lzj@fjnu.edu.cn www.lzj.name

  27. 视图的限制 • SELECT语句可以是任意合法的查询,不论多复杂都可以 • 在没有TOP字句的情况下,不允许出现ORDER BY字句(仅限SQL Server) 郑捷 lzj@fjnu.edu.cn www.lzj.name

  28. 视图案例 • 建立公司代码和员工人数的视图 • 建立男员工的视图 郑捷 lzj@fjnu.edu.cn www.lzj.name

  29. 视图的使用 • 在查询中,可以将视图看作一个表进行使用,对其进行查询 • 这个时候,可以将视图视作一个命名后的子查询 • 这也是最常见的用法 • 例:在上面建立的视图基础上进行查询 郑捷 lzj@fjnu.edu.cn www.lzj.name

  30. 更新视图 • 可以透过视图进行数据的更新 • 但是有一个明确的限制:只有视图中的数据可以和基本表中的数据一一对应时,才能进行更新 • 例如,之前建立的分组查询的视图是不可更新的,而男员工视图是可以更新的 郑捷 lzj@fjnu.edu.cn www.lzj.name

  31. 视图的作用 • 简化用户操作 • 提供对数据的不同观察角度 • 提供数据的逻辑独立性 • 提供更好的安全保护 • 有利于更清晰地表达查询 郑捷 lzj@fjnu.edu.cn www.lzj.name

  32. 索引 • 索引是对基本表中的数据的一个摘要 • 索引能提高检索数据的效率 • 在设计查询的时候,要注意思考索引起到的作用 郑捷 lzj@fjnu.edu.cn www.lzj.name

  33. 约束 • 约束是对数据的限制 • 在更新数据的时候,要注意约束的作用 郑捷 lzj@fjnu.edu.cn www.lzj.name

  34. 预习 • 关系查询处理和查询优化(课本第九章) • 查询优化的概念 • 查询的步骤 • 查询优化 • 代数优化 • 物理优化 郑捷 lzj@fjnu.edu.cn www.lzj.name

More Related