《第三章关系数据库标准语言SQL培训讲学》由会员分享,可在线阅读,更多相关《第三章关系数据库标准语言SQL培训讲学(197页珍藏版)》请在金锄头文库上搜索。
1、第三章 关系数据库标准语言SQL(8-10学时),主讲:曹志英 副教授 大连海事大学计算机科学与技术学院 研究方向:软件工程与理论数据库与信息系统 电话:84729625 Email:czy_,数据库原理和语言,2005年8月6日,引 言,SQL= Structured Query Language SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能: 不仅仅是查询; 还是一个通用的、功能极强的关系数据库语言。,目录,3.1 SQL语言的基本概念与特点(P84-P87) 3.2 数据定义(P87-P91) 3.3 查询(P91-P116) 3.4 数据更新(P117-P121) 3
2、.5 视图(P121-P129) 3.6 数据控制(P129-P133) 3.7 嵌入式SQL(P133-P148,可略/简述),3.1.1 SQL语言的发展及标准化,SQL(Structured Query Language):是关系数据库标准语言。 u1974年:Boyce和Chamberlin提出。 u19751979年:IBM公司San Jose Research Laboratory研制了System R(DBMS原型),实现了这种语言。 u1986年10月,SQL经美国国家标准局批准成为关系数据库语言的美国国家标准。同年公布SQL的标准文本SQL-86。 u1987年,ISO通过了
3、这一标准,后经ANSI修改和完善,逐步发布SQL-89,SQL-92,SQL-99。 SQL语言现已成为数据领域的一个主流语言。,3.1.2 SQL语言的特点,集数据定义、数据查询、数据操纵、数据控制于一体。 综合统一 高度非过程化语言 面向集合的操作方式 以同一种语法结构提供两种使用方式 自 含式语言:联机交互的使用方式 嵌入式语言:嵌入高级语言如C,COBOL,FORTRAN,PB等 语言简洁,易学易用,SQL语言的动词,3.1.3 SQL语言的基本概念,基本表(BASE TABLE):是独立存在的表,一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可带若干个索引。 存储文
4、件的逻辑结构组成了关系数据库的内模式,物理结构是任意的,对用户透明。 视图(VIEW):是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。 外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。,图3.1 SQL语言支持的关系数据库的三级逻辑结构(P87),引用返回,3.2 数据定义(P87-P91), 3.2.0 概述 3.2.1 字段数据类型 3.2.2 创建、修改和删除数据表 3.2.3 设计、创建和维护
5、索引,3. 2. 0 概述,SQL数据定义功能,支持三级模式: 即包括对基本表、视图、索引的定义功能。 由于视图是依赖基本表的“虚表”,索引依附于基本表。所以 SQL通常不提供对视图的修改,以及索引的修改功能。要想修改视图定义或索引定义只能先将它删除掉,然后再重建。不过有的DBMS支持视图的修改。,SQL数据定义语句, 3.2.1 字段数据类型,SQL语句的数据类型应DBMS的不同而有所差异,常用的数据类型有: 字符型: char(n) 、varchar(n) 数值型: integer(n) 全字长二进制整数 smallint(n)、tinyint(n) 半字长二进制整数 decimal(p,
6、d)、numeric(p,d) 压缩十进制数 日期/时间型:date(yyyy-mm-dd) time(hh:mm:ss) timestamp(日期加时间), 3.2.2 创建、修改和删除数据表,3.2.2.1 创建数据表 3.2.2.2 修改基本表 3.2.2.3 删除基本表,3.2.2.1 创建基本表,1. 基本表是关系数据库的基本组成单位,它物理地存储于数据库的文件中。 2. 创建基本表的SQL语法格式 CREATE TABLE (列级完整性约束条件 , 列级完整性约束条件 ,表级完整性约束条件); 3. 注意: 表名是所要定义的基本表的名称,必须是合法标识符。 列名是每个表所含的属性(
7、字段名)。一个表有多个属性。 定义各个列/属性时要指明其数据类型。 对列定义最基本要求:类型,长度,能否为空值。 关键字的大写(大小写无所谓,但为区别,作为习惯最好大写),语句的分号结束 。,例1: 建立一个“学生表”Student,它由学号(Sno),姓名(Sname),性别(Ssex),年龄(Sage)所在系(Sdept)五个属性组成,其中学号不能为空:且姓名取值也唯一。(P88) CREATE TABLE Student (Sno Char(5) Not NULL UNIQUE, Sname Char(20) UNIQUE, Ssex Char(2) , Sage Int, Sdept
8、Char(15); 对于不同的DBMS,所支持到的类型不完全相同,建表时参照系统手册。 注意: 表名必须是合法标识符 定义各个属性时要指明其数据类型,再例: 创建课程( course )表: Create table course ( cno char(2) primary key, cname char(40) unique, ccredit integer, ctime int, ); 创建选课( sc )表: Create table sc ( cno char(2), sno char(5) , grade single );,4. 定义完整性约束 基本语法格式: CONSTRAINT
9、 注意:若不指定约束名,系统会自动取名,对于基本表的约束分为列约束和表约束: 列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名; 表约束与列定义相互独立,不包括在列定义中。通常用于对多个列一起进行约束,与列定义用,分隔。 定义表约束时,必须指出要约束的那些列的名称。,约束的命名,属性约束 Name char(10) Constraint NameIsKey primary Key 元组约束 Constraint RightTitle Check(gender = F OR name Not Like Ms.%) 主码约束 Constraint
10、pk_stu Primary Key (sno), 参照约束 Constraint fk_sc_stu Foreign Key (sno) References student(sno), ,约束的类型与实例*,(1)PRIMARY KEY约束 (2)NULL/NOT NULL约束 (3)UNIQUE约束 (4) CHECK完整性约束 (5) FOREIGN KEY约束 (6)DEFAULT 约束 (7)PRIMARY KEY与UNIQUE,(1)PRIMARY KEY约束,定义主键,起唯一标识作用,其值不能为NULL,也不能重复 用于定义列约束时: CONSTRAINT PRIMARY KE
11、Y,Create Table MovieStar ( name char(30) Primary Key, address Varchar(255), gender char(1), birthday Date );,Create Table MovieStar ( name char(30) constraint pk_name Primary Key, address Varchar(255), gender char(1), birthday Date );,用于定义表约束时,即将某些列的组合定义为主键: CONSTRAINT PRIMARY KEY (, ),Create Table
12、MovieStar ( name char(30), address Varchar(255), gender char(1), birthday Date, Primary Key(name) );,Create Table Movie ( title char(20), name char(30), year integer, incolor boolean, studioname char(20), producerC# integer, constraint pk_tn Primary Key(title,name) );,(2)NULL/NOT NULL约束,只能用于定义列约束 CO
13、NSTRAINT NULL|NOT NULL 在定义属性时,约束该属性不可取Null Sname char(20) not null 不加约束:隐含允许Null Primary Key约束:隐含Not Null,(3)UNIQUE约束,UNIQUE约束用于指明基本表在某一列或多个列的组合上的取值必须唯一 定义列约束: CONSTRAINT UNIQUE 定义表约束: CONSTRAINT UNIQUE(,),Create Table MovieStar ( name char(30) Primary Key, ID char(18) Unique, address Varchar(255),
14、gender char(1), birthday Date );,Create Table MovieStar ( name char(30), ID char(18), address Varchar(255), gender char(1), birthday Date, Primary Key (name), Unique (ID) );,(4) CHECK完整性约束,CHECK约束用来检查字段值所允许的范围 表约束与列约束语法格式为: CONSTRAINT CHECK () 列级约束: 在定义属性时约束该属性必须使Check 中的条件为True 表级约束:存在于关系定义中的Check
15、对关系中的当前元组的约束 不适于多关系、子查询,【例】 建立考生登记表, 要求考号非空且惟一, 年龄小于65, 性别只能是“男”或“女”, 姓名非空。,CREATE TABLE Examinee (Eno CHAR(14), Ename CHAR(10) NOT NULL, Eage INT CONSTRAINT Y1 CHECK(Eage65), Esex CHAR(2) CONSTRAINT Y2 CHECK(Esex IN(男, 女), PRIMARY KEY(Eno);,【例】建立考生成绩登记表, 要求各科成绩之和=800 。 CREATE TABLE Exgrade ( Eno CH
16、AR(14), Composition DECIMAL(4, 2), Math DECIMAL(4, 2), English DECIMAL(4, 2), Synthesis DECIMAL(4, 2), CONSTRAINT YS1 CHECK (Composition+Math+English+Synthesis=800));,(5) FOREIGN KEY约束,FOREIGN KEY约束指定某一个列或一组列作为外部键,其中: 包含外部键的表,称为从表; 包含外部键所引用的主键或唯一键的表,称主表。 系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性。,定义列约束: CONSTRAINT REFERENCES () 属性级/列级: Create table sc ( Cno char(2) constraint fk_cno references course(cno), Sno char(5) c