数据库原理第三(1)章课件.pptVIP

  • 3
  • 0
  • 约2.06万字
  • 约 82页
  • 2019-08-04 发布于山东
  • 举报
第三章 关系数据库语言SQL (续) 概述 SQL的数据定义 SQL的数据操纵 SQL的视图定义 SQL的数据控制 嵌入式SQL 联接查询(1 of 8) 联接查询:涉及至少两个表的查询。 SQL中没有专门的JOIN命令,而是通过SELECT语句中的WHERE子句来达到联接运算的目的,因此更加灵活、简便。 联接查询(2 of 8) 联接条件的一般格式为: [〈表名1〉.]〈列名1〉〈比较运算符〉[〈表名2〉.]〈列名2〉 其中:比较运算符主要有:=、、、=、= 和!=;联接谓词中的列名称为联接字段。联接条件中,联接字段类型必须是可比的,但联接字段不一定是同名的。 Example--联接查询(7 of 8) 例4:(外部连接)查询每个学生及其选修课程的情况包括没有选修课程的学生 SELECT Student.Sno,Sname,Ssex,Sage,Sdept, Cno,Grade FROM Student,SC WHERE Student.Sno = SC.Sno(*); Example--联接查询(8 of 8) S1 A 1 CS 20 S2 B 1 CS 21 S3 C 0 MA 19 嵌套查询(子查询) 概述 带有IN谓词的子查询 带有比较运算符的子查询 带有ANY或ALL谓词的子查询 带有EXISTS谓词的子查询 嵌套查询(子查询) 嵌套查询(子查询) 嵌套查询由内向外处理 SQL允许多层嵌套 嵌套查询中最常用的谓词是IN 嵌套查询层次分明、容易理解 嵌套查询的分类 不相关子查询:子查询的查询条件不依赖于父查询 由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 相关子查询:子查询的查询条件依赖于父查询 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表; 然后再取外层表的下一个元组; 重复这一过程,直至外层表全部检查完为止。 带IN谓词的子查询(3 of 5) 带IN谓词的子查询(5 of 5) 用连接查询实现本例: 带有比较运算符的子查询(1 of 2) 当能确切知道内层查询返回单值时,可用比较运算符(,,=,=,=,!=或 ) 与ANY或ALL谓词配合使用 带有比较运算符的子查询(2 of 2) 又看例1:查询与A在同一个系学习的学生 带有ANY或ALL谓词的子查询 (1 of 5) 谓词语义 ANY:某一个值 ALL:所有值 使用ANY 或ALL谓词时必须同时使用比较运算符 带有ANY或ALL谓词的子查询(2 of 5) 例1: 查询其他系中比IS系某一学生年龄小的学生姓名和年龄 带有ANY或ALL谓词的子查询(3 of 5) 例1’: 查询其他系中比IS系某一学生年龄小的学生姓名和年龄 用集函数: 带有ANY或ALL谓词的子查询(4 of 5) 例2:查询其他系中比IS系所有学生年龄都小的学生姓名和年龄 带有ANY或ALL谓词的子查询(5 of 5) 带有EXISTS谓词的子查询(1 of 15) EXISTS谓词与NOT EXISTS谓词 不同形式的查询间的替换 用EXISTS/NOT EXISTS实现全称量词 用EXISTS/NOT EXISTS实现逻辑蕴函 带有EXISTS谓词的子查询(2 of 15) EXISTS谓词 存在量词? ? 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false” 若内层查询结果非空,则返回真值 若内层查询结果为空,则返回假值 带有EXISTS谓词的子查询(3 of 15) 例1:查询所有选修了1号课程的学生姓名 带有EXISTS谓词的子查询(4 of 15) 例1:查询所有选修了1号课程的学生姓名 带有EXISTS谓词的子查询(5 of 15) 例2:查询没有选修1号课程的学生姓名 带有EXISTS谓词的子查询(6 of 15) 不同形式的查询间的替换 一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换 所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换。 带有EXISTS谓词的子查询(7 of 15) 例:再看“查询与A在同一个系学习的学生” 带有EXISTS谓词的子查询(8 of 15) 用

文档评论(0)

1亿VIP精品文档

相关文档