关系数据库标准语言SQL(上).ppt_第1页
关系数据库标准语言SQL(上).ppt_第2页
关系数据库标准语言SQL(上).ppt_第3页
关系数据库标准语言SQL(上).ppt_第4页
关系数据库标准语言SQL(上).ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京信息科技大学 第3章 关系数据库标准语言SQL SQL是Structured Query Language(结构化查 询语言)的缩写。可以说查询是SQL语言 的重要组成部分,但不是全部,SQL还包 含数据定义、数据操纵和数据控制功能等 部分。SQL已经成为关系数据库的标准数 据语言,所以现在所有的关系数据库管理 系统都支持SQL。 北京信息科技大学 学习目标 了解SQL的发展过程和主要功能; 熟练掌握SQL的CREATE TABLE语句和数据完整性 约束的定义方法; 熟练掌握SQL的数据操作语句,深刻理解数据完整 性约束的作用; 熟练掌握SQL SELECT语句,能够运用该语句完成 关系数据库上的各种查询; 理解关系数据库的视图概念,掌握视图的定义和 使用方法。 北京信息科技大学 重点难点 SQL语言本身就是学习数据库的重点,所以 要求学生要熟练掌握,具体就是要熟练掌 握SQL CREATE TABLE语句、SQL INSERT语句 、SQL DELETE语句、SQL UPDATE语句和SQL SELECT语句。 本章学习的难点是CREATE TABLE语句中有 关数据完整性约束的定义,以及SQL SELECT中复杂的连接和嵌套查询。 北京信息科技大学 3.1 SQL语言概述 SQL标准源于1986年10月的ANSI标准 1987年6月正式成为ISO标准 SQL89提出了完整性特征 SQL92标准逐步完善(基本、标准和完全级 ) SQL99增加了面向对象等 最新的标准是2003年发布的SQL2003,几千页 SQL标准只是一个建议标准,主流产品一般也 只达到了基本级的要求 北京信息科技大学 SQL语言的主要特点 SQL是一种一体化的语言 SQL语言是一种高度非过程化的语言 SQL语言非常简洁 SQL语言可以直接以命令方式交互使用 ,也可以嵌入到程序设计语言中以程序 方式使用 北京信息科技大学 样本数据库 图3-1 样本数据库 数据定义功能 与数据完整性约束的实现 北京信息科技大学 SQL中的模式(Schema) 组织数据库对象的一种逻辑结构 把一个数据库中的所有对象按用途划分 为若干集合 默认模式是DBO 北京信息科技大学 模式组织举例 z产品模式 z订购模式 z销售模式 北京信息科技大学 定义模式 模式通常由DBA创建 也可以由得到CREATE SCHEMA授权的用户创建 使用短语AUTHORIZATION owner_name可以指定 模式的管理者(默认是创建者) CREATE SCHEMA schema_name AUTHORIZATION owner_name 北京信息科技大学 删除模式 只有在模式为空、即模式中不包含任何 对象时才可以删除模式。 DROP SCHEMA schema_name 北京信息科技大学 表的定义 一个表由若干列构成,自SQL Server 2005不仅可以 定义实列(简称列,column_definition), 而且还可以定 义虚列(即计算列,computed_column_definition) 理解: CREATE TABLE schema_name.table_name ( | ,.n ) 北京信息科技大学 定义列() CREATE TABLE schema_name.table_name ( | ,.n ) column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 定义列() 列名(column_name)和数据类型()必须指定 ,在SQL Server 2005中可以使用的数据类型如表3-1所示 其他项目是各种约束 column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 是否允许空值约束 空值的概念? column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 关于约束名称 列级约束名,名称可以省略 用于命名主关键字、唯一性或参照完整性约束 省略名称不便于管理相应的完整性约束 column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 主关键字和唯一性约束 PRIMARY KEY:主关键字约束,说明该列是主关键字 UNIQUE:惟一性约束,说明该列取值必须惟一 PRIMARY KEY和UNIQUE约束的区别? column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 参照完整性约束 说明外部关键字,FOREIGN KEY可以省略 什么是外部关键字?外部关键字的作用? schema_name . referenced_table_name ( ref_column ) 指出 参照的表和列,默认模式时schema_name可以省略,列名相同 时( ref_column )可以省略 column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 参照完整性规则 ON DELETE和ON UPDATE说明在执行删除和更新操作时如何处 理参照完整性 删除操作检查的完整性? 更新操作检查的完整性? column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 CHECK约束 用来说明列的取值范围 本约束用逻辑表达式 ( logical_expression )进行说明 如果列值使表达式为真则是合法值,否则就是非法值 column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 字段默认值 用常量表达式(constant_expression)来说明列的默认取值 column_name NULL | NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES schema_name . referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) DEFAULT constant_expression 北京信息科技大学 定义计算列 column_name AS computed_column_expression PERSISTED NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE ON UPDATE NO ACTION | CHECK ( logical_expression ) CREATE TABLE schema_name.table_name ( | ,.n ) 北京信息科技大学 定义计算列 其中column_name给出计算列的列名,computed_column_expression 是对应的计算表达式,PERSISTED说明物理存储计算列的值。 其他选项和定义实列时类似。 column_name AS computed_column_expression PERSISTED NOT NULL CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY REFERENCES referenced_table_name ( ref_column ) ON DELETE NO ACTION | CASCADE ON UPDATE NO ACTION | CHECK ( logical_expression ) 北京信息科技大学 定义表级完整性约束 如果某个完整性约束与多个列相关,则 这样的完整性约束不能定义在单个列上 ,这时候就需要表级完整性约束。 单个列上的完整性约束也可以用表级完 整性约束的形式来定义。 北京信息科技大学 定义表级完整性约束 CONSTRAINT constraint_name PRIMARY KEY | UNIQUE | FOREIGN KEY ( column ,.n ) REFERENCES referenced_table_name ( ref_column ,.n ) ON DELETE NO ACTION | CASCADE | SET NULL | SET DEFAULT ON UPDATE NO ACTION | CASCADE | SET NULL | SET DEFAULT | CHECK ( logical_expression ) CREATE TABLE schema_name.table_name ( | ,.n ) 北京信息科技大学 表定义举例 例1:定义院系表,其中编号为主关键字,名称 应该惟一、并且不允许为空值。 北京信息科技大学 表定义举例 例2:定义学生表,其中规定: 学号列是主关键字; 院系列为计算列(取学号列的第3和第4个字符), 并且院系值参照院系表的编号值(院系表是被参照 表,主关键字是编号;参照表是学生表,外部关键 字是院系),此约束说明一名学生一定属于某个院 系; 姓名列不允许为空值; 性别必须取值“男”或“女”; 学生的学籍状态为正常、留级、休学或退学。 北京信息科技大学 表定义举例 例3:定义教师表,其中规定: 教师编号是主关键字; 院系列为计算列(取教师编号的第1和第2个字 符),并且院系值参照院系表的编号值,此约 束说明一名教师一定属于某个院系; 姓名列不允许为空值; 性别必须取值“男”或“女”; 职称的取值为教授、副教授、讲师或助教。 北京信息科技大学 表定义举例 例4:定义课程表,其中规定: 课程编号是主关键字; 课程名称不允许为空值; 责任教师参照教师表的教师编号值,此约束 说明责任教师一定是已经在编的教师; 学时不允许为空值; 课程性质分为公共基础、专业基础、专业选 修和任意选修。 北京信息科技大学 表定义举例 例5:定义选课表,其中规定: 学号和课程编号两列构成主关键字(需要表级 完整性约束); 学号参照学生表的学号(约束选课的学生必须 存在); 课程编号参照课程表的课程编号(约束被选的 课程必须存在); 考试成绩取值在0100之间,并且默认为空值。 北京信息科技大学 修改表结构 ALTER TABLE schema_name.table_name ALTER COLUMN column_name NULL | NOT NULL | ADD | | | DROP CONSTRAINT constraint_name | COLUMN column_name ALTER COLUMN修改已有列的定义,但是只能修改为兼容数据类 型或重新定义是否允许空值; 北京信息科技大学 修改表结构 ADD添加新列、或新的计算列或表级完整性约束; ALTER TABLE schema_name.table_name ALTER COLUMN column_name NULL | NOT NULL | ADD | | | DROP CONSTRAINT constraint_name | COLUMN column_name 北京信息科技大学 修改表结构 DROP删除指定的完整性约束或指定的列。 ALTER TABLE schema_name.table_name ALTER COLUMN column_name NULL | NOT NULL | ADD | | | DROP CONSTRAINT constraint_name | COLUMN column_name 北京信息科技大学 修改表结构举例 例6:规定学生表的性别字段不允许为空值。 ALTER TABLE 学生 ALTER COLUMN 性别char(2) NOT NULL 是否会影响原先定义在该列上的其他约束? 北京信息科技大学 修改表结构举例 例7:删除课程表中的责任教师列。 如果捆绑了其他对象(如列约束),则需要 先删除捆绑的对象。 北京信息科技大学 修改表结构举例 例8:为课程表增加责任教师列,列描述如下 : 字符类型,长度为6; 允许空值; 外部关键字,参照教师表的教师编号列,当删除被 参照记录时该列置为空值,当修改被参照记录的主 关键字时级联修改参照记录的外部关键字值。 北京信息科技大学 删除表 DROP TABLE schema_name.table_name ,.n 一次可以删除多个表。 不能使用DROP TABLE删除被FOREIGN KEY 约束参照的表。 如果要在同一个 DROP TABLE语句中删除参照 表以及被参照表,则必须先列出参照表。 北京信息科技大学 思考题 在SQL中CREATE SCHEMA是一条什么命令?创建的SCHEMA 是一种什么对象?它有什么作用? 在表中定义约束时,PRIMARY KEY和UNIQUE有什么区别? 在CREATE TABLE命令中哪些内容与定义参照完整性有关?讨 论它们的具体作用。 约束一般定义在列上,为什么还需要表级约束? 定义计算列时选用关键词PERSISTED有什么作用? 计算列是否可以作为参照列(外部关键字)? 如果在定义约束时没有使用CONSTRAINT短语给出约束名,而 事后又要删除该约束应该怎么办? 对已有的表可以进行哪些方面的表结构修改? 数据操作功能 及数据完整性的作用 北京信息科技大学 SQL的数据操作 插入操作及其完整性约束 删除操作及其完整性约束 更新操作及其完整性约束 北京信息科技大学 插入操作及其完整性约束 SQL的插入语句是INSERT,常用格式: INSERT INTO schema_name.table_name ( column_list ) VALUES(expression | DEFAULT | NULL ,.n ) 其中 schema_name指出模式名 table_name指出表名 column_list给出插入操作所涉及列的列表(默认是 表的全部列) expression | DEFAULT | NULL ,.n 给出对应于 column_list的各个列的值 北京信息科技大学 插入院系表的第1个元组(记录) INSERT INTO student.院系(编号,名称,负责人,办公地点 ) VALUES(1,信息管理学院,李嘉,教一楼3层) CREATE TABLE student.院系 (编号 tinyint PRIMARY KEY, 名称 char(30) UNIQUE NOT NULL, 负责人 char(10), 办公地点 char(40) ) 北京信息科技大学 省略列名、插入院系表的第2个元组 INSERT INTO student.院系 VALUES(2,经济管理学院,吴鸿忠,教三楼4层) CREATE TABLE student.院系 (编号 tinyint PRIMARY KEY, 名称 char(30) UNIQUE NOT NULL, 负责人 char(10), 办公地点 char(40) ) 北京信息科技大学 举例 INSERT INTO student.院系 VALUES(2,计算机学院,张秋霞,教二楼3层) CREATE TABLE student.院系 (编号 tinyint PRIMARY KEY, 名称 char(30) UNIQUE NOT NULL, 负责人 char(10), 办公地点 char(40) ) 违背PRIMARY KEY 约束 北京信息科技大学 举例 INSERT INTO student.院系 VALUES(3,经济管理学院,张秋霞,教二楼3层) CREATE TABLE student.院系 (编号 tinyint PRIMARY KEY, 名称 char(30) UNIQUE NOT NULL, 负责人 char(10), 办公地点 char(40) ) 违背UNIQUE约束 北京信息科技大学 举例 INSERT INTO student.院系(编号,负责人,办公地点) VALUES(3,张秋霞,教二楼3层) CREATE TABLE student.院系 (编号 tinyint PRIMARY KEY, 名称 char(30) UNIQUE NOT NULL, 负责人 char(10), 办公地点 char(40) ) 违背NOT NULL约束 北京信息科技大学 举例 CREATE TABLE student.学生 (学号 char(8) PRIMARY KEY, 院系 AS CONVERT(Tinyint,SUBSTRING(学号,3,2) PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号), 姓名 char(10) NOT NULL, 性别 char(2) CHECK (性别=男 OR 性别=女), 生源 char(6), 状态 char(4) CHECK (状态IN(正常,留级,休学,退学) ) 插入学生表的第1个元组。 INSERT INTO student.学生(学号,姓名,性别,生源,状态) VALUES(04014101,曹波,男,湖北,正常) 北京信息科技大学 插入学生表的第2条记录( 指定正确的院系值) 注意:学生表的院系列是计算列,是不能被插入语句操作的。 CREATE TABLE student.学生 (学号 char(8) PRIMARY KEY, 院系 AS CONVERT(Tinyint,SUBSTRING(学号,3,2) PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号), 姓名 char(10) NOT NULL, 性别 char(2) CHECK (性别=男 OR 性别=女), 生源 char(6), 状态 char(4) CHECK (状态IN(正常,留级,休学,退学) INSERT INTO student.学生(学号,院系,姓名,性别,生源,状态) VALUES(04014111,1,程鸣,女,湖南,正常) INSERT INTO student.学生 VALUES(04014111,程鸣,女,湖南,正常) 正确语句: 北京信息科技大学 举例 INSERT INTO student.学生 VALUES(04074122,吴红霞,女,浙江,正常) CREATE TABLE student.学生 (学号 char(8) PRIMARY KEY, 院系 AS CONVERT(Tinyint,SUBSTRING(学号,3,2) PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号), 姓名 char(10) NOT NULL, 性别 char(2) CHECK (性别=男 OR 性别=女), 生源 char(6), 状态 char(4) CHECK (状态IN(正常,留级,休学,退学) 违背参照完整性约束 北京信息科技大学 举例 INSERT INTO student.学生 VALUES(04026205,张鸿飞,南,北京,正常) CREATE TABLE student.学生 (学号 char(8) PRIMARY KEY, 院系 AS CONVERT(Tinyint,SUBSTRING(学号,3,2) PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号), 姓名 char(10) NOT NULL, 性别 char(2) CHECK (性别=男 OR 性别=女), 生源 char(6), 状态 char(4) CHECK (状态IN(正常,留级,休学,退学) 违背域完整性约束 北京信息科技大学 举例 CREATE TABLE student.教师 (教师编号 char(6) PRIMARY KEY, 院系 AS CONVERT(Tinyint,SUBSTRING(教师编号,1,2) PERSISTED NOT NULL FOREIGN KEY REFERENCES student.院系(编号), 姓名 char(10) NOT NULL, 性别 char(2) CHECK (性别=男 OR 性别=女), 职称 char(6) CHECK (职称IN (教授,副教授,讲师,助教), 专业 char(16) 插入教师表记录,注意教师编号的PRIMARY KEY 约束,院系是计算列及其REFRENCES约束等。 北京信息科技大学 举例 CREATE TABLE student.课程 (课程编号 char(6) PRIMARY KEY, 课程名称 char(24) NOT NULL, 责任教师 char(6) CONSTRAINT duty_teacher FOREIGN KEY REFERENCES student.教师(教师编号), 学时 tinyint NOT NULL, 课程性质 char(8) CHECK (课程性质IN (公共基础,专业基础,专业选修,任意选修) 插入课程表记录,注意相关约束。 北京信息科技大学 举例 CREATE TABLE student.选课 (学号 char(8) FOREIGN KEY REFERENCES student.学生, 课程编号 char(6) FOREIGN KEY REFERENCES student.课程, 考试成绩 tinyint CHECK (考试成绩 BETWEEN 0 AND 100) DEFAULT NULL PRIMARY KEY (学号,课程编号) ) INSERT INTO student.选课(学号,课程编号,考试成绩) VALUES(04014122,B00016,88) INSERT INTO student.选课 VALUES(04014111,X00201,NULL) INSERT INTO student.选课VALUES(04014111,B00016,DEFAULT) INSERT INTO student.选课(学号,课程编号) VALUES(04014101,B00018) 北京信息科技大学 插入操作时检查完整性? 检查实体完整性规则 检查参照完整性规则 检查用户定义完整性规则 北京信息科技大学 检查实体完整性规则 如果插入元组的主关键字的属性不为空 值、并且相应的属性值在关系中不存在 (即保持唯一性),则可以执行插入操 作,否则不可以执行插入操作。 北京信息科技大学 检查参照完整性规则 如果是向被参照关系插入元组,则无须检 查参照完整性;如果是向参照关系插入元 组,则要检查外部关键字属性上的值是否 在被参照关系中存在对应的主关键字的值 ,如果存在则可以执行插入操作,否则不 允许执行插入操作。另外,如果插入元组 的外部关键字允许为空值,则当外部关键 字是空值时也允许执行插入操作。 北京信息科技大学 检查用户定义完整性规则 如果插入的元组在相应的属性值上遵守 了用户定义完整性规则(包括CHECK约束 、UNIQUE约束、NULL或NOT NULL约 束),则可以执行插入操作,否则不可以 执行插入操作。 北京信息科技大学 删除操作及其完整性约束 SQL的删除语句是DELETE,常用格式: DELETE FROM schema_name.table_name WHERE 其中: schema_name指出模式名; table_name指出从哪个表删除记录; 用来指出删除记录的条件,默 认是删除全部记录。 北京信息科技大学 举例 DELETE student.学生 WHERE 姓名=吴红霞 删除操作失败,违背参照完整性 CREATE TABLE student.选课 (学号 char(8) FOREIGN KEY REFERENCES student.学生, 课程编号 char(6) FOREIGN KEY REFERENCES student.课程, 考试成绩 tinyint CHECK (考试成绩 BETWEEN 0 AND 100) DEFAULT NULL PRIMARY KEY (学号,课程编号) ) 北京信息科技大学 举例 DELETE student.教师 WHERE 教师编号=011122 ALTER TABLE student.课程 ADD 责任教师char(6)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论