资源描述
Page,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,广东工业大学,第,3,章,关系数据库标准语言,SQL,SQL,是,Structured Query Language,(结构化查询语言)的缩写。可以说查询是,SQL,语言的重要组成部分,但不是全部,,SQL,还包含数据定义、数据操纵和数据控制功能等部分。,SQL,已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持,SQL,。,Page,1,学习目标,了解,SQL,的发展过程和主要功能;,熟练掌握,SQL,的,CREATE TABLE,语句和数据完整性约束的定义方法;,熟练掌握,SQL,的数据操作语句,深刻理解数据完整性约束的作用;,熟练掌握,SQL SELECT,语句,能够运用该语句完成关系数据库上的各种查询;,理解关系数据库的视图概念,掌握视图的定义和使用方法。,Page,2,重点难点,SQL,语言本身就是学习数据库的重点,所以要求学生要熟练掌握,具体就是要熟练掌握,SQL CREATE TABLE,语句、,SQL INSERT,语句、,SQL DELETE,语句、,SQL UPDATE,语句和,SQL SELECT,语句。,本章学习的难点是,CREATE TABLE,语句中有关数据完整性约束的定义,以及,SQL SELECT,中复杂的连接和嵌套查询。,Page,3,3.1 SQL,语言,概述,SQL,(,Structured Query Language,)结构化查询语言,是关系数据库的标准语言,SQL,是一个通用的、功能极强的关系数据库语言,Page,4,SQL,的产生与发展,1974,年,,IBM,的,Ray Boyce,和,Don Chamberlin,研制了,SQL,语言,Page,5,SQL,的产生与发展,Don Chamberlin,Page,6,SQL,的产生与发展,1974,年,,IBM,的,Ray Boyce,和,Don Chamberlin,研制了,SQL,语言,1979,年,ORACLE,公司首先提供商用的,SQL,1986,年,10,月,,ANSI,把,SQL,作为关系数据库语言的美国标准,1987,年,,ISO,也通过了,SQL,标准,Page,7,SQL,语言的主要特点,SQL,是一种一体化的语言,SQL,语言是一种高度非过程化的语言,SQL,语言非常简洁,SQL,语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用,Page,8,SQL,的特点,综合统一,集数据定义语言(,DDL,),数据操纵语言(,DML,),数据控制语言(,DCL,)功能于一体。,可以独立完成数据库生命周期中的全部活动。,用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据的运行。,数据操作符统一。,Page,9,SQL,的特点,高度非过程化,SQL,只要提出“做什么”,无须指明“怎么做”。,存取路径的选择以及,SQL,的操作过程由系统自动完成。,Page,10,SQL,的特点,面向集合的操作方式,操作对象、查找结果是元组的集合,插入、删除、更新操作的对象是元组的集合,Page,11,SQL,的特点,以同一种语法结构提供多种使用方式,SQL,是独立的语言,能够独立地用于联机交互的使用方式。,SQL,又是嵌入式语言,能够嵌入到高级语言(例如,C,,,C+,,,Java,)程序中,供程序员设计程序时使用。,Page,12,SQL,的特点,语言简洁,易学易用,SQL,功能极强,完成核心功能只用了,9,个动词。,Page,13,SQL,的基本概念,SQL,支持关系数据库三级模式结构,SQL,视图,2,视图,1,基本表,2,基本表,1,基本表,3,基本表,4,存储文件,2,存储文件,1,外模式,模 式,内模式,Page,14,SQL,的基本概念,基本表,本身独立存在的表,SQL,中一个关系就对应一个基本表,一个,(,或多个,),基本表对应一个存储文件,一个表可以带若干索引,Page,15,SQL,的基本概念,视图,从一个或几个基本表导出的表,数据库中只存放视图的定义而不存放视图对应的数据,视图是一个虚表,用户可以在视图上再定义视图,Page,16,样本数据库,图3-1 样本数据库,Page,17,数据定义,SQL,的数据定义功能,:,模式定义、表定义、视图和索引的定义,Page,18,SQL,中的模式,(Schema),组织数据库对象的一种逻辑结构,把一个数据库中的所有对象按用途划分为若干集合,默认模式是,DBO,Page,19,模式组织举例,产品模式,订购模式,销售模式,Page,20,模式的定义与删除,定义模式,CREATE SCHEMA AUTHORIZATION,如果没有指定,,那么,隐含为,要创建模式,用户必须拥有,DBA,权限或被,DBA,授权,Page,21,模式的定义与删除,定义模式,例,1,定义一个学生,-,课程模式,S-T,CREATE SCHEMA“S-T”AUTHORIZATION WANG;,为用户,WANG,定义了一个模式,S-T,Page,22,模式的定义与删除,定义模式,例,2,CREATE SCHEMA AUTHORIZATION WANG,隐含为用户名,WANG,Page,23,模式的定义与删除,定义模式实际上定义了一个,命名空间,。,在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。,Page,24,模式的定义与删除,CREATE SCHEMA AUTHORIZATION,|,在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。,Page,25,模式的定义与删除,定义模式,例,3,CREATE SCHEMA TEST AUTHORIZATION ZHANG,CREATE TABLE TAB1(COL1,SMALLINT,,,COL2 INT,,,COL3 CHAR(20),,,COL4 NUMERIC(10,,,3),,,COL5 DECIMAL(5,,,2),;,为用户,ZHANG,创建了一个模式,TEST,,并在其中定义了一个表,TAB1,。,Page,26,模式的定义与删除,删除模式,DROP SCHEMA ,CASCADE,和,RESTRICT,两者必选其一。,CASCADE(级联)删除模式的同时把该模式中所有的数据库对象全部删除,RESTRICT(限制)如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时才能执行。,Page,27,模式的定义与删除,删除模式,例,4,DROP SCHEMA ZHANG CASCADE,;,删除模式,ZHANG,,同时该模式中定义的表,TAB1,也被删除,Page,28,表的定义,一个表由若干列构成,自,SQL Server 2005,不仅可以定义实列,(,简称列,,column_definition),而且还可以定义虚列,(,即计算列,,computed_column_definition),理解:,CREATE TABLE schema_name.table_name,(|,.n ),Page,29,表的定义,定义基本表,CREATE TABLE,(,,,列级完整性约束条件,,,);,如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。,Page,30,创建数据表前应考虑的问题,表中要存储的数据类型(,用来确定数据的取值范围),表中需要的列数、每列的类型,列是否可以为空,是否需要在列上使用约束、默认值和规则,需要使用什么样的索引,哪些列作为主键、哪些列作为外键,哪些用户拥有访问该数据库或表的权限,表,约,束,表的定义,数据类型,SQL,中域的概念用数据类型来实现,定义表的属性时 需要指明其数据类型及长度,选用哪种数据类型取决于:,取值范围,要做哪些运算,Page,32,定义列,(,),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,Page,33,定义列,(,),列名(,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,Page,34,字段的长度:,指字段所能容纳的最大数据量,但对不同的数据类型来说,长度对字段的意义可能有些不同。,对字符串数据类型而言,长度代表字段,所能容纳的字符的数目,,因此它会限制用户所能输入的文本长度。,对数值类的数据类型而言,长度则代表字段,使用多少个字节来存放数字,。,精度和小数位数,精度,是指数中数字的位数,包括小数点左侧的整数部分和小数点右侧的小数部分;,小数位数,则是指数字小数点右侧的位数。,例如:数字,12345.678,,其精度为,8,,小数位数为,3,;,所以只有,数值类,的数据类型才有必要指定精度和小数位数。,字段的长度、精度和小数位数,Page,35,数据类型,占,1,字节。,存放逻辑值。只能取,0,、,1,、,null,。,bit,位类型,存放固定长度的,n,个字符数据,14000,。,存放可变长度的,n,个字符数据,14000,。,存放最大长度为,2,30,-1,的字符数据,nchar(n),nvarchar(n),ntext,Unicode,宽字符型,占,8,字节,占,4,字节,占,2,字节,占,1,字节,bigint,int,smallint,Tinyint,整数类型,存放固定长度的字符,,n,为,18000,个字符。,存放可变长度的字符,,n,为,1,8000,个字符。,存放最大长度为,2,31,-1,的字符数据。,char(n),varchar(n),text,字符型,长度,定义标识,数据类型,字符型:,1,个字符占,1,个字节。,Unicode,型:,1,个字符占,2,个字节,占,8,字节。,占,4,字节。,Money,smallmoney,货币型,占,8,字节。日期为从,1/1/1753,到,12/31/9999,。,占,4,字节。日期为 从,1/1/1900,到,6/6/2079,。,Datetime,smalldatetime,日期时间类型,定长二进制数据。,n,为,18000,字节,。,变长二进制数据。,n,为,18000,字节,。,存放最大长度为,2,31,-1,的二进制数据,(2G),。,Binary(n),Varbinary(n),Image,:,二进制型,占,8,字节。存储小数点位数不确定的数据,占,4,字节。存储小数点位数不确定的数据,Float(n),Real,浮点数类型,占,217,字节。存储小数点位数确定的数据,占,217,字节。存储小数点位数确定的数据,Decimal(p,s),Numeric(p,s),精确数类型,存放最大长度为,2,31,-1,的二进制数据。,image,图像型,是否允许空值约束,空值的概念?,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,Page,38,关于约束名称,列级约束名,名称可以省略,用于命名主关键字、唯一性或参照完整性约束,省略名称不便于管理相应的完整性约束,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,Page,39,主关键字和唯一性约束,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,Page,40,主键约束与惟一性约束的区别:,一个表中只能定义一个主键约束,但可以定义多个惟一约束。,定义了惟一约束的列数据可以为空值,而定义了主键约束的列数据不能为空值。,Page,41,参照完整性约束,说明外部关键字,,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,Page,42,参照完整性规则,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,Page,43,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,Page,44,字段默认值,用常量表达式(,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,Page,45,定义计算列,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 ),Page,46,定义计算列,其中,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),Page,47,定义表级完整性约束,如果某个完整性约束与多个列相关,则这样的完整性约束不能定义在单个列上,这时候就需要,表级完整性约束,。,单个列上的完整性约束也可以用表级完整性约束的形式来定义。,Page,48,定义表级完整性约束,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 ),Page,49,表定义举例,例,1,:定义院,系表,其中编号为主关键字,名称应该惟一、并且不允许为空值。,Page,50,CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),Page,51,表定义举例,例,2,:定义,学生表,其中规定:,学号列是主关键字;,院系列为计算列(取学号列的第,3,和第,4,个字符),并且院系值参照院系表的编号值(院系表是被参照表,主关键字是编号;参照表是学生表,外部关键字是院系),此约束说明一名学生一定属于某个院系;,姓名列不允许为空值;,性别必须取值“男”或“女”;,学生的学籍状态为正常、留级、休学或退学。,Page,52,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(,正常,留级,休学,退学,),),Page,53,CONVERT(data_type(length),data_to_be_converted,style),data_type(length),规定目标数据类型(带有可选的长度)。,data_to_be_converted,含有需要转换的值。,style,规定日期,/,时间的输出格式。,(expression,start,length),expression:字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。,start:整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。,length:整数或可以隐式转换为 int 的表达式,指定子字符串的长度。,返回值:如果expression是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start=1,则子字符串从表达式的第一个字符开始,Page,55,表定义举例,例,3,:定义,教师表,其中规定:,教师编号是主关键字;,院系列为计算列(取教师编号的第,1,和第,2,个字符),并且院系值参照院系表的编号值,此约束说明一名教师一定属于某个院系;,姓名列不允许为空值;,性别必须取值“男”或“女”;,职称的取值为教授、副教授、讲师或助教。,Page,56,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),Page,57,表定义举例,例,4,:定义,课程表,其中规定:,课程编号是主关键字;,课程名称不允许为空值;,责任教师参照教师表的教师编号值,此约束说明责任教师一定是已经在编的教师;,学时不允许为空值;,课程性质分为公共基础、专业基础、专业选修和任意选修。,Page,58,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(,公共基础,专业基础,专业选修,任意选修,),Page,59,表定义举例,例,5,:定义,选课表,其中规定:,学号和课程编号两列构成主关键字(需要表级完整性约束);,学号参照学生表的学号(约束选课的学生必须存在);,课程编号参照课程表的课程编号(约束被选的课程必须存在);,考试成绩取值在,0100,之间,并且默认为空值。,Page,60,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(,学号,课程编号,),Page,61,修改表结构,ALTER TABLE schema_name.table_name,ALTER COLUMN column_name NULL|NOT NULL,|ADD|,|DROP CONSTRAINT constraint_name|COLUMN column_name,ALTER COLUMN,修改已有列的定义,但是只能修改为兼容数据类型或重新定义是否允许空值;,Page,62,修改基本表,ALTER TABLE,ADD ,完整性约束,DROP ,ALTER COLUMN ,;,Page,63,修改表结构,ADD,添加新列、或新的计算列或表级完整性约束;,不论基本表中原来是否已有数据,新增加的列一律为空值。,ALTER TABLE schema_name.table_name,ALTER COLUMN column_name NULL|NOT NULL,|,ADD|,|DROP CONSTRAINT constraint_name|COLUMN column_name,Page,64,修改表结构,DROP,删除指定的完整性约束或指定的列。,ALTER TABLE schema_name.table_name,ALTER COLUMN column_name NULL|NOT NULL,|ADD|,|,DROP CONSTRAINT constraint_name|COLUMN column_name,Page,65,修改表结构举例,例,6,:规定学生表的性别字段不允许为空值。,ALTER TABLE,学生,ALTER COLUMN,性别,char(2)NOT NULL,是否会影响原先定义在该列上的其他约束,?,Page,66,修改表结构举例,例,7,:删除课程表中的责任教师列。,如果捆绑了其他对象(如列约束),则需要先删除捆绑的对象。,Page,67,修改表结构举例,例,8,:为课程表增加责任教师列,列描述如下:,字符类型,长度为,6,;,允许空值;,外部关键字,参照教师表的教师编号列,当删除被参照记录时该列置为空值,当修改被参照记录的主关键字时级联修改参照记录的外部关键字值。,Page,68,删除表,DROP TABLE schema_name.table_name ,.n,一次可以删除多个表。,不能使用,DROP TABLE,删除被,FOREIGN KEY,约束参照的表。,如果要在同一个,DROP TABLE,语句中删除参照表以及被参照表,则必须先列出参照表。,Page,69,删除基本表,DROP TABLE RESTRICT|CASCADE,RESTRICT,:该表的删除是有限制条件的,不能存在依赖于该表的对象,否则该表不能被删除。,CASCADE,:该表的删除是没有限制条件的。依赖于该表的对象都将被一起删除。,Page,70,思考题,在,SQL,中,CREATE SCHEMA,是一条什么命令?创建的,SCHEMA,是一种什么对象?它有什么作用?,在表中定义约束时,,PRIMARY KEY,和,UNIQUE,有什么区别?,在,CREATE TABLE,命令中哪些内容与定义参照完整性有关?讨论它们的具体作用。,约束一般定义在列上,为什么还需要表级约束?,定义计算列时选用关键词,PERSISTED,有什么作用?,计算列是否可以作为参照列(外部关键字)?,如果在定义约束时没有使用,CONSTRAINT,短语给出约束名,而事后又要删除该约束应该怎么办?,对已有的表可以进行哪些方面的表结构修改?,Page,71,SQL,的数据操作,插入操作及其完整性约束,删除操作及其完整性约束,更新操作及其完整性约束,Page,72,插入操作及其完整性约束,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的各个列的值,Page,73,插入院系表的第,1,个元组,(,记录,),INSERT INTO student.,院系,(,编号,名称,负责人,办公地点,),VALUES(1,信息管理学院,李嘉,教一楼,3,层,),CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),Page,74,省略列名、插入院系表的第,2,个元组,INSERT INTO student.,院系,VALUES(2,经济管理学院,吴鸿忠,教三楼,4,层,),CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),Page,75,举例,INSERT INTO student.,院系,VALUES(2,计算机学院,张秋霞,教二楼,3,层,),CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),违背,PRIMARY KEY,约束,Page,76,举例,INSERT INTO student.,院系,VALUES(3,经济管理学院,张秋霞,教二楼,3,层,),CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),违背,UNIQUE,约束,Page,77,举例,INSERT INTO student.,院系,(,编号,负责人,办公地点,),VALUES(3,张秋霞,教二楼,3,层,),CREATE TABLE student.,院系,(,编号,tinyint PRIMARY KEY,名称,char(30)UNIQUE NOT NULL,负责人,char(10),办公地点,char(40),),违背,NOT NULL,约束,Page,78,举例,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,曹波,男,湖北,正常,),Page,79,插入学生表的第,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,程鸣,女,湖南,正常,),正确语句:,Page,80,举例,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(,状态,I
展开阅读全文