资源描述
第 三 章 数 据 库 语 言 SQL 概 述 SQL的 发 展1974年 , 由 Boyce和 Chamberlin提 出19751979, IBM San Jose Research Lab的关 系 数 据 库 管 理 系 统 原 型 System R实 施 了这 种 语 言SQL-86是 第 一 个 SQL标 准SQL-89、 SQL-92(SQL2)、 SQL-99(SQL3) 概 述 现 状大 部 分 DBMS产 品 都 支 持 SQL, 成 为 操 作数 据 库 的 标 准 语 言有 方 言 , 支 持 程 度 不 同 数 据 定 义 ( DDL)定 义 、 删 除 、 修 改 关 系 模 式 ( 基 本 表 )定 义 、 删 除 视 图 ( View)定 义 、 删 除 索 引 ( Index) 数 据 操 纵 ( DML)数 据 查 询数 据 增 、 删 、 改 数 据 控 制 ( DCL)用 户 访 问 权 限 的 授 予 、 收 回概 述 SQL的 功 能 交 互 式 SQL一 般 DBMS都 提 供 联 机 交 互 工 具用 户 可 直 接 键 入 SQL命 令 对 数 据 库 进 行 操 作由 DBMS来 进 行 解 释概 述 SQL的 形 式 嵌 入 式 SQL能 将 SQL语 句 嵌 入 到 高 级 语 言 ( 宿 主 语 言 )使 应 用 程 序 充 分 利 用 SQL访 问 数 据 库 的 能 力 、宿 主 语 言 的 过 程 处 理 能 力一 般 需 要 预 编 译 , 将 嵌 入 的 SQL语 句 转 化 为宿 主 语 言 编 译 器 能 处 理 的 语 句概 述 SQL的 形 式 数 据 定 义Create、 Drop、 Alter 数 据 操 纵数 据 查 询 : Select数 据 修 改 : Insert、 Update、 Delete 数 据 控 制Grant、 Revoke概 述 SQL的 动 词 数 据 查 询 是 数 据 库 应 用 的 核 心 功 能 基 本 结 构Select A1, A2, ., AnFrom r1, r2, ., rmWhere PA1, A2, ., An(p(r1 r1 . rm)数 据 查 询Select Where From Select语 句 的 含 义 对 From 子 句 中 的 各 关 系 , 作 笛 卡 儿积 ( ) 对 Where 子 句 中 的 逻 辑 表 达 式 进 行 选择 ( ) 运 算 , 找 出 符 合 条 件 的 元 组 根 据 Select 子 句 中 的 属 性 列 表 , 对 上述 结 果 作 投 影 ( ) 操 作 Select语 句 的 含 义 结 果 集查 询 操 作 的 对 象 是 关 系 , 结 果 还 是 一 个 关系 , 是 一 个 结 果 集 , 是 一 个 动 态 数 据 集 Select子 句 对 应 于 关 系 代 数 的 投 影 ( ) 运 算 , 用以 列 出 查 询 结 果 集 中 的 期 望 属 性 SQL具 有 包 的 特 性 Select 子 句 的 缺 省 情 况 是 保 留 重 复 元组 ( ALL ) , 可 用 Distinct 去 除 重复 元 组Select Distinct sdept From StudentSelect All sdept From Student 去 除 重 复 元 组 :费 时 需 要 临 时 表 的 支 持Select子 句 重 复 元 组 Select子 句 *与 属 性 列 表 星 号 * 表 示 所 有 属 性 星 号 * : 按 关 系 模 式 中 属 性 的 顺 序 排 列 ,并 具 有 一 定 的 逻 辑 数 据 独 立 性显 式 列 出 属 性 名 : 按 用 户 顺 序 排 列Select * From StudentSelect Student.*, cno, gradeFrom Student, SCWhere Student.sno = SC.sno Select子 句 更 名 为 结 果 集 中 的 某 个 属 性 改 名 使 结 果 集 更 具 可 读 性Select sno as stu_no, cno as course_no, gradeFrom SCSelect sno, sname, 2001 - sage as birthdayFrom Student Where 子 句 where子 句 对 应 与 关 系 代 数 中 的 选 择 () 查 询 满 足 指 定 条 件 的 元 组 可 以 通 过 Where子句 来 实 现 使 where子 句 中 的 逻 辑 表 达 式 返 回 True值 的元 组 , 是 符 合 要 求 的 元 组 , 将 被 选 择 出 来 Where 子 句 运 算 符 比 较 : 、 、 =、 =、 、 not + 确 定 范 围 :Between A and B、 Not Between A and B 确 定 集 合 : IN、 NOT IN 字 符 匹 配 : LIKE, NOT LIKE 空 值 : IS NULL、 IS NOT NULL 多 重 条 件 : AND、 OR、 NOT Where 子 句 Like 字 符 匹 配 : Like、 Not Like 通 配 符 % 匹 配 任 意 字 符 串 _ 匹 配 任 意 一 个 字 符 大 小 写 敏 感 Where 子 句 Like例 : 列 出 姓 张 的 学 生 的 学 号 、 姓 名 。Select sno, snameFrom StudentWhere sname LIKE 张 % Where 子 句 Like例 : 列 出 张 姓 且 单 名 的 学 生 的 学 号 、 姓 名 。Select sno, snameFrom StudentWhere sname LIKE 张 _ _ Where 子 句 转 义 符 escape 例 : 列 出 课 程 名 称 中 带 有 _的 课 号 及 课名 。 Select cno, cnameFrom CourseWhere cname LIKE %_% escape From 子 句 From子 句 对 应 与 关 系 代 数 中 的 笛 卡 儿 积( ) 列 出 将 被 扫 描 的 关 系 ( 表 )例 : 列 出 所 有 学 生 的 学 号 、 姓 名 、 课 号 、 成 绩 。Select Sudent.sno, sname, SC.cno, gradeFrom Student, SCWhere Student.sno = SC.sno From 子 句 元 组 变 量 为 From 子 句 中 的 关 系 定 义 元 组 变 量 方 便 关 系 名 的 引 用 在 同 一 关 系 的 笛 卡 儿 积 中 进 行 辨 别例 : 列 出 与 95001同 岁 的 同 学 的 学 号 ,姓 名 ,年 龄Select T.sno,T.sname,T.sageFrom Student as T,Student as SWhere S.sno = 95001 ANDT.sage = S.sage Order By子 句 指 定 结 果 集 中 元 组 的 排 列 次 序 耗 时 ASC( 缺 省 ) 、 DESC、 未 选 中 的 属 性 例 : 列 出 CS系 中 的 男 生 的 学 号 、 姓 名 、 年 龄 , 并 按年 龄 进 行 排 列 ( 升 序 )Select sno, sname,sageFrom StudentWhere sdept = CSOrder By sage ASC SQL的 集 合 操 作 SQL的 结 果 集 是 “ 包 ” 多 个 Select 语 句 的 结 果 可 以 进 行 集 合 操 作 ,使 结 果 为 “ 集 合 ” ( default) SQL-92支 持 参 加 集 合 操 作 的 关 系 ( 结 果 集 ) 必 须 是 相容 的 SQL的 集 合 操 作 相 容 属 性 个 数 必 须 一 致 对 应 的 类 型 必 须 一 致 属 性 名 无 关 最 终 结 果 集 采 用 第 一 个 结 果 的 属 性 名 缺 省 为 自 动 去 除 重 复 元 组除 非 显 式 说 明 ALL Order By放 在 整 个 语 句 的 最 后 SQL的 集 合 操 作 并 union( 并 , 对 应 与 关 系 代 数 的 ) , 标 准SQL都 支 持 的 采 用 集 合 的 观 点 , 合 成 多 个 查 询 的 结 果select - without - order by . UNION ALL select - without - order by . UNION ALL select - without - order by . ORDER BY integer ASC | DESC , . 例 : 查 询 计 算 机 系 的 学 生 或 者 年 龄 不 大 于 19岁的 学 生 , 并 按 年 龄 倒 排 序 。SQL的 集 合 操 作 并 intersect( 交 , 对 应 与 关 系 代 数 的 ) , 并 不是 所 有 的 DBMS都 支 持 例 : 查 询 计 算 机 系 的 学 生 并 且 年 龄 不 大 于 19岁 的 学 生 , 并 按 年 龄 倒 排 序 。SQL的 集 合 操 作 交 except( 差 , 对 应 与 关 系 代 数 的 ) , 并 不 是所 有 的 DBMS都 支 持 例 : 查 询 计 算 机 系 的 男 生 。SQL的 集 合 操 作 差 数 据 定 义 语 言 ( Data Definition Language)Create、 Drop、 Alter定 义 一 组 关 系 ( 基 本 表 ) 、 说 明 各 关 系 的 信 息 各 关 系 的 模 式 各 属 性 的 值 域 完 整 性 约 束 索 引 安 全 性 和 权 限数 据 定 义 语 言 ( DDL) 字 符 型 char(n) 、 varchar(n) 数 值 型 integer、 smallint numeric(p,d) real、 double、 float(n) 日 期 /时 间 型 date timeDDLSQL中 的 域 类 型 域 定 义 语 句 ( SQL-92支 持 )需 重 复 使 用 的Create Domain stu_name varchar(20)Create Domain zip_code char(6)DDLSQL中 的 域 类 型 Create Table r (A1D1, A2D2, , AnDn,)其 中 :r 关 系 名 ( 表 名 ) 、 Ai 关 系 r 的 一 个 属 性 名Dn 属 性 Ai域 值 的 域 类 型主 键 声 明 : primary key (Aj1 , Aj2 , , Ajvm )DDLSQL的 模 式 定 义 Create Domain stu_name varchar(20)Create Table Student (sno char(10) primary key(sno) ,sname stu_name ,sage smallint,ssex char(1),sdept char(2)DDLSQL的 模 式 定 义 Create Table Course (cno char(10) primary key (cno) ,cname varchar(20) ,credit smallint )Create Table SC (sno char(10) not null ,cno char(10) not null ,grade smallint,primary key (sno, cno)DDLSQL的 模 式 定 义 用 SQL删 除 关 系 ( 表 )将 整 个 关 系 模 式 ( 表 结 构 ) 彻 底 删 除表 中 的 数 据 也 将 被 删 除Drop Table rDrop Table student;DDL删 除 表 结 构 Drop 删 除 表 中 的 某 属 性去 除 属 性 及 相 应 的 数 据Alter Table r Drop ADDL修 改 模 式 Alter 增 加 表 中 的 属 性向 已 经 存 在 的 表 中 添 加 属 性allow null已 有 的 元 组 中 该 属 性 的 值 被 置 为 NullAlter Table r Add A DAlter Table student phone char(16);DDL修 改 模 式 Alter 属 性 的 默 认 值用 户 不 提 供 某 属 性 的 值 时 , 默 认 值 被 使 用 初 始 值 TimeStampDDL中 :ModifyDate char(30) Default TimeStamp;Alter Table student Add ID integer Default AutoIncrement;DDL Default Value 定 义 一 个 新 的 域 ( 用 户 定 义 的 域 )需 要 重 复 使 用 的 域必 须 具 有 相 同 类 型 的 属 性Create Domain As ;Create Domain datelog As char(30) default timestamp 域 的 删 除Drop Domain datelog各 DBMS的 方 法 是 不 同 的 Restrict/Cascade使 用 该 域 的 属 性 的 处 理DDL 域 定 义 索 引 是 一 种 数 据 结 构 , 是 对 照 表 、 指 针 表 索 引 是 为 了 加 速 对 表 中 元 组 的 检 索 而 创 建 的 一 种分 散 存 储 结 构 ( B树 )索 引 是 对 表 而 建 立 的 , 由 除 存 放 表 的 数 据 页 面 以 外的 索 引 页 面 组 成索 引 是 把 双 刃 剑 , 减 慢 更 新 的 速 度 索 引 不 是 SQL标 准 的 要 求DDL 索 引 Index 索 引 的 种 类聚 簇 索 引 ( Clustered Index)非 聚 簇 索 引 ( Non-Clustered Index)DDL 索 引 Index 聚 簇 索 引 ( Clustered Index)表 中 的 元 组 按 聚 簇 索 引 的 顺 序 物 理 地 存 放根 级 页 面 -中 间 层 页 面 -叶 级 页 面 ( 数 据 页 面 )一 个 表 中 只 能 有 一 个 聚 簇 索 引更 新 的 复 杂 性 , 需 要 大 量 的 临 时 空 间DDL 索 引 Index 非 聚 簇 索 引 ( Non-Clustered Index)表 中 元 组 存 储 的 物 理 顺 序 与 索 引 的 顺 序 无 关叶 级 索 引 页 面 是 指 向 数 据 页 面 的 指 针每 个 表 可 有 多 个 非 聚 簇 索 引DDL 索 引 Index CREATE UNIQUE CLUSTERED | NONCLUSTEREDINDEX index-name On TableName(Column,Column,)Create Index YearIndex On Movie(year);Create Clustered Index SnoIndex On student(sno) ;Drop Index YearIndex;DDL 索 引 Index 查 询 与 更 新 的 评 估查 询 多 ?更 新 多 ? 索 引 的 覆 盖Where表 达 式Where表 达 式 的 顺 序 索 引 越 多 越 好 吗 ? 了 解 优 化 器DDL 索 引 的 使 用 数 据 添 加用 SQL的 插 入 语 句 , 向 数 据 库 表 中 添 加 数 据按 关 系 模 式 的 属 性 顺 序Insert Into Student Values ( 95001 , 张 三 ,27, M, CS )按 指 定 的 属 性 顺 序 , 也 可 以 只 添 加 部 分 属 性 ( 非Null属 性 为 必 需 )Insert Into Student ( sno, sname, sage)Values ( 95002 , 李 四 , 26 ) 把 一 列 中 的 值 进 行 聚 合 运 算 , 返 回 单 值 的 函 数 五 个 预 定 义 的 聚 合 函 数 平 均 值 : Avg 总 和 : Sum 最 小 值 : Min 最 大 值 : Max 计 数 : Count Count(*)、 Count(Distinct)数 值聚 合 函 数 Group By将 查 询 结 果 集 按 某 一 列 或 多 列 的 值 分 组 , 值 相 等的 为 一 组 , 一 个 分 组 以 一 个 元 组 的 形 式 出 现只 有 出 现 在 Group By子 句 中 的 属 性 , 才 可 出 现 在Select子 句 中例 : 统 计 各 系 学 生 的 人 数 。Select sdept, count(*) as stu_countFrom StudentGroup By sdept聚 合 函 数 Having针 对 聚 合 函 数 的 结 果 值 进 行 筛 选 ( 选 择 ) , 它 作 用 于分 组 计 算 结 果 集跟 在 Group By子 句 的 后 面 , 没 有 Group By则 针 对 全 表例 : 列 出 具 有 两 门 ( 含 ) 以 上 不 及 格 的 学 生 的 学 号 、 不及 格 的 课 目 数 。Select sno, count(sno) From SCWhere grade = 2聚 合 函 数 Having 与 Where的 区 别Where 决 定 哪 些 元 组 被 选 择 参 加 运 算 , 作 用 于 关 系 中的 元 组Having 决 定 哪 些 分 组 符 合 要 求 , 作 用 于 分 组聚 合 函 数 的 条 件 关 系 必 须 用 Having, Where中 不 应 出现 聚 合 函 数 聚 合 函 数 聚 合 函 数 忽 略 NullCount: 不 计Sum: 不 将 其 计 入Avg: 具 有 Null 的 元 组 不 参 与Max / Min: 不 参 与例 : Select count(sdept) From StudentSelect Avg(sage) From Student聚 合 函 数 Null 子 查 询 是 嵌 套 在 另 一 查 询 中 的 Select-From-Where 表 达 式 ( Where/Having)SQL允 许 多 层 嵌 套 , 由 内 而 外 地 进 行 分 析 , 子 查询 的 结 果 作 为 父 查 询 的 查 找 条 件可 以 用 多 个 简 单 查 询 来 构 成 复 杂 查 询 , 以 增 强SQL的 查 询 能 力子 查 询 中 不 使 用 Order By 子 句 , Order By子句 只 能 对 最 终 查 询 结 果 进 行 排 序子 查 询 ( Subquery ) 返 回 单 值 的 子 查 询 , 只 返 回 一 行 一 列父 查 询 与 单 值 子 查 询 之 间 用 比 较 运 算 符 进 行 连 接运 算 符 : 、 =、 =、 =、 、 例 : 找 出 与 95001同 龄 的 学 生Select *From StudentWhere sage = ( Select sage From Student Where sno = 95001 )子 查 询 单 值 比 较 子 查 询 返 回 多 行 一 列运 算 符 : In、 All、 Some(Any)、 Exists子 查 询 多 值 标 量 值 与 子 查 询 返 回 集 中 的 某 一 个 相 等 , true IN 被 用 来 测 试 多 值 中 的 成 员例 : 查 询 选 修 C01课 程 的 学 生 的 学 号 、 姓 名 。Select sno,snameFrom StudentWhere sno IN ( Select sno From SCWhere cno = C01 )子 查 询多 行 一 列子 查 询 多 值 成 员 In 例 : 查 询 选 修 了 数 据 库 的 学 生 的 学 号 和 姓 名Select sno,snameFrom StudentWhere sno IN ( Select sno From SC Where cno IN ( Select cnoFrom CourseWhere cname = 数 据 库 )子 查 询 多 值 成 员 In 多 值 比 较 : 多 行 一 列 父 查 询 与 多 值 子 查 询 之 间 的 比 较 需 用 All来 连 接 标 量 值 s比 子 查 询 返 回 集 R中 的 每 个 都 大 时 , sAll R 为True All表 示 所 有 all、 all、 =all、 all all 等 价 于 not in例 : 找 出 年 龄 最 小 的 学 生Select * From Student Where sage Some R为 True 或 s Any R为 True Some(早 期 用 Any)表 示 某 一 个 ,只 要 有 一 个 即 返 回 真 some、 some、 =some、 some = some 等 价 于 in、 some 不 等 价 于 not in 子 查 询 多 值 比 较 Some/Any 例 : 找 出 不 是 最 小 年 龄 的 学 生Select * From studentWhere sage some ( Select sage From Student )子 查 询 多 值 比 较 例 : 找 出 具 有 最 高 平 均 成 绩 的 学 号 及 平 均 成 绩Select sno ,avg(grade)From SC Group By sno Having avg(grade) = all (Select avg(grade) From SC Group By sno) 子 查 询 多 值 比 较 Exists + 子 查 询 用 来 判 断 该 子 查 询 是 否 返 回 元 组当 子 查 询 的 结 果 集 非 空 时 , Exists为 True当 子 查 询 的 结 果 集 为 空 时 , Exists为 False不 关 心 子 查 询 的 具 体 内 容 , 因 此 用 Select *子 查 询 存 在 判 断 Exists 具 有 外 部 引 用 的 子 查 询 , 称 为 相 关 子 查 询( Correlated Queries)外 层 元 组 的 属 性 作 为 内 层 子 查 询 的 条 件子 查 询 相 关 子 查 询 例 : 列 出 选 修 了 C01课 程 的 学 生 的 学 号 、 姓 名Select sno,snameFrom StudentWhere Exists ( Select * From SC Where SC.sno = Student.sno And cno = C01)子 查 询 Correlated & Exists 例 : 列 出 得 过 100分 的 学 生 的 学 号 、 姓 名Select sno,snameFrom StudentWhere Exists ( Select * From SCWhere SC.sno = Student.sno Andgrade = 100)子 查 询 Correlated & Exists 例 : 查 询 选 修 了 C01课 程 的 学 生 的 系 主 任Select managerFrom departmentWhere Exists ( Select * From studentWhere sdept = department.depid And Exists ( Select *From SCWhere SC.sno = student.sno Andcno = C01)子 查 询 Correlated & Exists 例 : 列 出 没 有 选 C01课 程 的 学 生 的 学 号 、 姓 名Select sno,snameFrom StudentWhere Not Exists ( Select * From SCWhere SC.sno = Student.sno Andcno = C01)子 查 询 Correlated & Not Exists 例 : 查 询 选 修 了 所 有 课 程 的 学 生 的 姓 名 (ForAll)Select snameFrom StudentWhere Not Exists ( Select * From CourseWhere Not Exists ( Select *From SCWhere Student.sno = SC.sno AndSC.cno = Co)这 门 课 他 没 选这 样 的 课 是 不 存 在 的子 查 询 Correlated & Not Exists SQL-92支 持 多 列 的 成 员 资 格 测 试 ( ASA7.0不 支 持 )例 : 找 出 同 系 、 同 年 龄 、 同 性 别 的 学 生Select *from Student as TWhere ( T.sdept,T.sage,T.ssex) IN ( Select From student as SWhere S.sno T.sno ) 子 查 询 多 列 元 组 的 比 较 SQL-92允 许 在 From中 使 用 查 询 表 达 式必 须 为 其 取 名例 : 查 询 平 均 成 绩 大 于 75分 的 学 号 、 姓 名 、 平 均 成 绩 Select stu_no,sname,avg_gradeFrom Student, (Select sno,avg(grade)From SCGroup By sno ) as S (stu_no,avg_grade)Where Student.sno = S.stu_no Andavg_grade 75派 生 关 系 NULL表 示 数 据 的 缺 失 一 个 确 实 存 在 , 但 我 们 不 知 道 的 值 对 本 实 体 此 数 值 无 意 义 , 可 能 是 设 计 上 的 失 误是 SQL的 关 键 字 , 用 于 任 何 类 型 描 述 缺 失 的 值UNKONW是 三 值 逻 辑 的 一 个 真 值 (True/False/Unkonw)空 值 和 连 接 NULL的 运 算 法 则对 NULL值 和 其 他 任 何 值 作 算 术 运 算 时 ,结 果 为 NULL对 NULL值 和 其 他 任 何 值 作 比 较 时 , 结 果为 UNKOWNIs Null / Is Not Null空 值 和 连 接 Unkown视 True为 1, False为 0, Unkown为 1/2AND: 取 小OR: 取 大NOT: 取 1的 补真 值 表 不 必 死 记 硬 背空 值 和 连 接 关 系 的 连 接连 接 操 作 是 以 两 个 关 系 为 输 入 、 将 另 一 个 关 系 作 为 结果 返 回笛 卡 儿 积 、 条 件 连 接 、 自 然 连 接 、 外 连 接自 然 连 接 ( Natural ) : 连 接 条 件 是 两 个 关 系 中 具 有 公 共 名 字 的 所 有 属 性对 均 相 等 , 不 需 要 其 他 条 件 对 每 个 相 等 属 性 对 之 一 进 行 投 影 ( 去 除 重 复 属 性 ) Student Natural Join SC Student SC 关 系 的 连 接内 连 接 ( Inner Join) : 它 是 条 件 连 接 , 要 求 参 加 连 接 的 关 系 中 至 少 有 一对 元 组 满 足 连 接 要 求 , 才 能 生 成 连 接 关 系 可 以 是 等 值 连 接 , 也 可 以 是 不 等 值 连 接 新 的 关 系 的 属 性 集 是 参 加 连 接 的 关 系 的 属 性 的 组合 , 不 去 除 重 复 属 性 Inner是 缺 省 的 连 接 方 式 也 可 以 用 笛 卡 儿 积 + 选 择 的 方 法 实 现 Student Inner Join SC on Student.sno = SC.sno 关 系 的 连 接外 连 接 ( Outer Join ) :它 是 条 件 连 接 , 且 条 件 是 必 需 的 。若 一 个 关 系 中 的 元 组 在 另 一 个 关 系 中 没 有 相 匹 配 的元 组 , 则 这 些 元 组 会 在 连 接 结 果 中 出 现 , 并 在 另 一个 关 系 的 其 他 属 性 位 置 上 放 上 Null, 而 不 是 像 Inner 那 样 被 忽 略 。新 的 关 系 的 属 性 集 是 参 加 连 接 的 关 系 的 属 性 的 组 合 ,不 去 除 重 复 属 性有 左 外 连 接 、 右 外 连 接 、 全 外 连 接 关 系 的 连 接左 外 连 接 ( Left Outer Join ) :Select *From ( Student Left Outer Join SCon Student.sno = SC.sno) 右 外 连 接 ( Right Outer Join ) :Select *From ( Student Right Outer Join SCon Student.sno = SC.sno) 全 外 连 接 ( Full Outer Join ) :Select *From ( Student Full Outer Join SCon Student.sno = SC.sno) 数 据 库 的 修 改数 据 库 修 改 包 括 插 入 数 据 、 修 改 数 据 、 删 除 数 据数 据 删 除 ( Delete) 只 能 对 整 个 元 组 操 作 , 不 能 只 删 除 某 些 属 性 上 的 值 只 能 对 一 个 关 系 起 作 用 , 若 要 从 多 个 关 系 中 删 除 元 组 ,则 必 须 对 每 个 关 系 分 别 执 行 删 除 命 令Delete From r Where P 从 关 系 r 中 删 除 满 足 P的 元 组 , 只 是 删 除 数 据 , 而 不是 定 义 删 除 单 个 元 组例 : 删 除 学 号 为 95001的 学 生 的 选 课 信 息Delete From SCWhere sno = 95001 删 除 多 个 元 组例 : 删 除 选 课 而 未 参 加 考 试 的 学 生 的 选 课 信 息Delete From SCWhere grade is null 删 除 整 个 关 系 中 的 所 有 数 据例 : 删 除 所 有 学 生 的 选 课 信 息Delete From SC 数 据 插 入 ( Insert)单 行 插 入 : 一 次 只 插 入 一 个 元 组例 : 新 增 一 个 学 生 信 息Insert Into StudentValues ( 98001, Gloria,25, F, CS)多 行 插 入 : 插 入 一 个 集 合例 :给 CS系 的 学 生 开 设 必 修 课 C05, 建 立 选 课 信 息Insert Into SCSelect sno,cno,nullFrom Student,CourseWhere sdept = CS andcno = C05 数 据 更 新 ( Update)改 变 符 合 条 件 的 某 个 ( 某 些 ) 元 组 的 属 性 值例 : 将 95001学 生 转 入 MA系Update StudentSet sdept = MAWhere sno = 95001例 : 所 有 学 生 年 龄 加 1Update StudentSet sage = sage + 1 数 据 更 新 ( Update)例 : 将 选 修 C05课 程 的 学 生 的 成 绩 改 为 该 课 的 平 均成 绩 Update SCSet grade = (Select avg(grade)From SCWhere cno = C05)Where cno = C05先 计 算 avg, 再 做 Update 视 图 ( View)是 从 一 个 或 几 个 基 本 表 ( 或 视 图 ) 中 导 出 的 虚 表数 据 库 中 只 保 存 它 的 定 义是 RDBMS提 供 给 用 户 以 多 种 角 度 观 察 数 据 库 中数 据 的 重 要 机 制创 建 视 图 、 删 除Create View v as Drop View v例 : 计 算 机 系 的 花 名 册Create View CS_Stu asSelect sno,sname,ssexFrom StudentWhere sdept = CS 视 图 ( View)视 图 名 可 以 出 现 在 任 何 关 系 名 可 以 出 现 的 地 方例 : 列 出 计 算 机 系 的 男 生Select sno,snameFrom CS_StuWhere ssex = M 例 : 建 立 学 生 平 均 成 绩 视 图Create View avg_grade(sno,avg) asSelect sno,avg(grade)From SCGroup By sno 视 图 ( View)例 : 找 出 平 均 成 绩 大 于 等 75的 学 生Select *From avg_gradeWhere avg = 75注 意 : 此 例 的 使 用 方 法 是 非 标 准 的 。 视 图 ( View)视 图 的 更 新 : 单 表 、 原 始 属 性 构 成 的 视 图 可 以 更新 ( 像 基 本 表 那 样 更 新 )由 多 表 构 成 的 视 图 由 很 大 的 限 制视 图 中 的 非 原 始 属 性 也 不 能 更 新例 : Update avg_gradeSet avg = 100Where sno = 95001avg不 是 原始 属 性 视 图 ( View) 视 图 的 作 用简 化 用 户 的 操 作不 同 的 用 户 可 从 不 同 的 角 度 看 待 同 一 数 据支 持 一 定 的 逻 辑 数 据 独 立 性数 据 的 安 全 性 数 据 定 义 语 言 ( Data Definition Language)Create、 Drop、 Alter定 义 一 组 关 系 ( 基 本 表 ) 、 说 明 各 关 系 的 信 息 各 关 系 的 模 式 各 属 性 的 值 域 完 整 性 约 束 索 引 安 全 性 和 权 限 各 关 系 在 磁 盘 上 的 物 理 存 储 结 构数 据 定 义 语 言 ( DDL) SQL中 的 域 类 型字 符 型 char(n) varchar(n)数 值 型 int smallint numeric(p,d) real、 double float(n)日 期 /时 间 型 date time 域 定 义 语 句 ( SQL-92支 持 )需 重 复 使 用 的Create Domain stu_name varchar(20)Create Domain zip_code char(6) SQL的 模 式 定 义Create Table r (A1D1, A2D2, , AnDn,)其 中 : r 关 系 名 ( 表 名 ) Ai 关 系 r 的 一 个 属 性 名 D n 属 性 Ai域 值 的 域 类 型主 键 声 明 : primary key (Aj1 , Aj2 , , Ajvm )校 验 声 明 : check (逻 辑 表 达 式 ) ExamplesCreate Domain stu_name varchar(20)Create Table Student ( sno char(10) not null , sname stu_name ,sage smallint,ssex char(1),sdept char(2),primary key (sno),check(ssex in (M, F) Create Table Course (cno char(10) not null ,cname varchar(20) ,credit smallint,primary key (cno)Create Table SC (sno char(10) not null ,cno char(10) not null ,grade smallint,primary key (sno, cno),check(grade =0 and grade =100) 用 SQL删 除 关 系 ( 表 )将 整 个 关 系 模 式 ( 表 结 构 ) 彻 底 删 除Drop Table r 用 SQL删 除 表 中 的 某 属 性去 除 属 性 及 相 应 的 数 据Alter Table r Drop A 用 SQL增 加 表 中 的 属 性向 已 经 存 在 的 表 中 添 加 属 性已 有 的 元 组 中 该 属 性 的 值 被 置 为 NullAlter Table r Add A D 数 据 添 加用 SQL的 插 入 语 句 , 向 数 据 库 表 中 添 加 数 据按 关 系 模 式 的 属 性 顺 序Insert Into Student Values ( 95001 , 张 三 ,27, M, CS )按 指 定 的 属 性 顺 序 , 也 可 以 只 添 加 部 分 属 性 ( 非Null属 性 为 必 需 )Insert Into Student ( sno, sname, sage)Values ( 95002 , 李 四 , 26 ) NullNull是 unknown与 Null的 比 较 都 返 回 unknown(unknown or unknown) unknown(true and unknown) unknown(false and unknown) = false(unknown and unknown) = unknown 练 习 针 对 学 生 -课 程 体 系 , 作 SQL查 询列 出 各 系 的 学 生 数 ( 人 数 多 的 排 在 前 面 )找 出 各 科 成 绩 均 在 85分 以 上 ( 含 ) 的 学 生 的学 号 、 姓 名找 出 有 三 门 课 程 的 成 绩 在 75分 以 下 的 学 生 的学 号 、 姓 名列 出 数 据 库 成 绩 的 前 五 名 学 生 的 学 号 、 姓 名 、成 绩
展开阅读全文