您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 关系数据库标准语言――SQL语言.
1第3章关系数据库标准语言——SQL语言2主要内容SQL语言概述SQL数据定义功能SQL数据查询功能SQL数据操纵功能SQL数据控制功能3学习要求(1)了解SQL的特点,掌握SQL的四大功能及使用方法。(2)掌握数据定义语句、数据查询语句、数据操纵语句的格式和功能。(3)重点掌握数据查询功能及其使用,掌握完整的SELECT语句的格式和含义。能针对实际问题,熟练地设计简单的SELECT语句。(4)会在SQLServer环境中编辑、运行SQL语句。43.1SQL语言概述SQL(StructuredQueryLanguage)语言是一种基于关系代数的结构化查询语言,SQL是一个通用的、功能极强的关系数据库语言,具有查询功能、数据定义功能、数据操纵、数据控制功能。目前,关系数据库管理系统都采用SQL语言作为数据库语言。SQL语言具有以下特点:•类似英语的自然语言,简单易学。•是一种非过程语言。•是一种面向集合的语言。•既可独立使用,又可嵌入到宿主语言中使用。•具有查询、操纵、定义和控制一体化功能。5SQL基本概念:1、数据表一个关系对应一个基本表。基本表是独立存在的表,不是由其他的表导出的表。一个或多个基本表对应一个存储文件。2、视图视图是从一个或几个基本表导出的表,是一个虚表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。视图对于用户来说,就象一个窗口,透过视图用户可以看到数据库中自己感兴趣的内容。63.2SQL数据定义功能SQL使用数据定义语言(DDL)实现其数据定义功能。表是数据库的重要组成部分,下面主要介绍利用SQL如何建立、修改和删除数据表。数据类型:关系数据库中每个关系表中的一列来自同一个域,属于同一种数据类型。当定义数据表时,需要为表中的每列(字段)设置一种数据类型,用来指定字段所存放的数据属于何种数据类型。SQLServer2000的数据类型共有26种。常用的数据类型有:整型(int,smallint),浮点型(float),日期时间类型(datetime,date),字符串型(char,varchar)。71.建立用户数据表用CREATETABLE语句定义数据表,语句格式:CREATETABLE表名(列定义[{,列定义|表约束}])其中:表名是合法标识符,最多可有128个字符,不允许重名。列定义格式:列名数据类型[DEFAULT默认值][{列约束}]DEFAULT,若某字段设置有默认值,则当该字段未被输入数据时,以该默认值自动填入该字段。SQL语句不区分大小写,但逗号必须是半角字符。8[例]以下命令建立一个名称为student1的学生表,其结构为学号(整型),姓名(8字节文本),性别(2字节文本),出生日期(日期型),班号(5字节文本)。CREATETABLEstudent1(学号integernotnull,姓名varchar(8),性别varchar(2)default“女”,出生日期date,班号varchar(5));说明:语句结束可以有分号,也可以没有分号。以上语句为创建基本表的最简单形式,还可以对表进一步定义,如主键、空值等约束的设定,使数据库用户能根据应用的需要对基本表的定义作出更精确和详尽的规定。字段名可以是字符串或汉字。92.定义数据表的约束数据的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。SQLServer提供的数据完整性机制主要包括:约束(Constraint)、默认(Default)、规则(Rule)、触发器(Trigger)、存储过程(StoredProcedure)等。本节只介绍约束。约束是SQLServer自动强制数据库完整性的方式,约束定义了列中允许的取值。对数据表的约束包括:列约束:是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名。表约束:与列约束相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用逗号分隔,定义表约束时必须指出要约束的列的名称。10完整性约束的基本语法格式:[CONSTRAINT约束名]约束类型约束名:约束不指定名称时,系统会给定一个名称。约束类型:在定义完整性约束时,必须指定完整性约束的类型。在SQLServer中可以定义五种类型的完整性约束:11(1)NULL/NOTNULL约束NULL值不是0也不是空白,更不是填入字符串“NULL”,而是表示不知道、不确定、没有数据的意思。当某一字段一定要输入值时,可设置为NOTNULL。如主键。该约束只能用于定义列约束。其语法格式:[CONSTRAINT约束名][NULL/NOTNULL][例]以下命令建立一个名称为student1的学生表,其结构为学号(整型,非空),姓名(8字节文本),性别(2字节文本),出生日期(日期型),班号(5字节文本)。对学号字段进行非空约束。CREATETABLEstudent1(学号integerCONSTRAINTS_CONSNOTNULL,姓名varchar(8),性别varchar(2),出生日期date,班号varchar(5));注:S_CONS为约束名。12[例]以下命令建立一个名称为student1的学生表,其结构为学号(整型,非空),姓名(8字节文本),性别(2字节文本),出生日期(日期型),班号(5字节文本)。对学号字段进行非空约束。CREATETABLEstudent1(学号integerNOTNULL,姓名varchar(8),性别varchar(2),出生日期date,班号varchar(5));注:当学号为空时,系统给出出错信息。当无NOTNULL约束时,系统缺省为NULL。当约束名省略时,系统自动产生一个名字。13(2)UNIQUE(唯一约束)用于指明基本表在某一列或多个列的组合上的取值必须唯一。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。唯一键允许为空,但系统为保证其唯一性,最多只可以出现一个NULL值。在建立UNIQUE约束时,要考虑以下因素:使用UNIQUE约束的字段允许为NULL值;一个表中可以允许有多个UNIQUE约束;可以把UNIQUE约束定义在多个字段上;UNIQUE约束用于强制在指定字段上创建一个UNIQUE索引。14UNIQUE约束既可用于列约束,也可用于表约束。UNIQUE用于定义列约束时,其语法格式:[CONSTRAINT约束名]UNIQUE[例]建立学生表student1,定义姓名为唯一键。CREATETABLEstudent1(学号integerNOTNULL,姓名varchar(8)CONSTRAINTSN_UNIQUNIQUE,性别varchar(2),出生日期date,班号varchar(5));也可写为CREATETABLEstudent1(学号integerNOTNULL,姓名varchar(8)UNIQUE,性别varchar(2),出生日期date,班号varchar(5));15(3)PRIMARYKEY(主键约束)PRIMARYKEY约束用于定义基本表的主键,起唯一标识作用,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARYKEY约束与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,二者区别:在一个基本表中只能定义一个PRIMARYKEY约束,但可以定义多个UNIQUE约束。对于指定为PRIMARYKEY列的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于UNIQUE所约束的唯一键,允许NULL。不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARYKEY约束。16PRIMARYKEY约束既可用于列约束,也可用于表约束。PRIMARYKEY用于定义列约束时,其语法格式:CONSTRAINT约束名PRIMARYKEY[例]建立学生表student1,定义学号为主键。CREATETABLEstudent1(学号integerCONSTRAINTS_PrimPRIMARYKEY,姓名varchar(8),性别varchar(2),出生日期date,班号varchar(5));17当将某些列的组合定义为主键时,其语法格式:[CONSTRAINT约束名]PRIMARYKEY(列名[{,列名}])[例]建立学生选课表SC,定义学号和课程号为主键。CREATETABLESC(Snovarchar(5)NOTNULL,Cnovarchar(5)NOTNULL,Scorefloat,CONSTRAINTSC_PrimPRIMARYKEY(Sno,Cno));[例]建立学生选课表SC,定义学号和课程号为主键。CREATETABLESC(Snovarchar(5)NOTNULL,Cnovarchar(5)NOTNULL,Scorefloat,PRIMARYKEY(Sno,Cno));18(4)FOREIGNKEY(外键约束)FOREIGNKEY约束用于指定一个列或一组列作为外键,其中,包含外部键的表称为从表,包含外部键所引用的主键或唯一键的表称为主表。系统保证从表在外部键上的取值是主表中某一个主键的值或唯一键的值,或者为空,以保证两个表之间的连接,确保了实体的参照完整性。FOREIGNKEY既可用于列约束,也可用于表约束,其语法:[CONSTRAINT约束名]FOREIGNKEYREFERENCES主表名(列名[{,列名}])19[例]建立学生选课表SC,定义Sno,Cno为SC的外部键。CREATETABLESC(Snovarchar(5)NOTNULLCONSTRAINTS_ForeFOREIGNKEYREFERENCESS(Sno),Cnovarchar(5)NOTNULLCONSTRAINTC_ForeFOREIGNKEYREFERENCESC(Cno),Scorefloat,CONSTRAINTSC_PrimPRIMARYKEY(Sno,Cno));20(5)CHECK约束CHECK约束用来检查字段值所允许的范围,如一个字段只能输入整数,限定在0-100,以此来保证域的完整性。在建立CHECK时,需要考虑以下几个因素:一个表中可以定义多个CHECK约束;每个字段只能定义一个CHECK约束;在多个字段上定义的CHECK约束必须为表约束;当执行INSERT,UPDATE语句时,CHECK约束将验证数据。CHECK约束既可用于列约束,也可用于表约束,其语法:[CONSTRAINT约束名]CHECK(条件)21[例]建立学生选课表SC,定义Score的取值范围为0-100。CREATETABLESC(Snovarchar(5)NOTNULLCONSTRAINTS_ForeFOREIGNKEYREFERENCESS(Sno),Cnovarchar(5)NOTNULLCONSTRAINTC_ForeFOREIGNKEYREFERENCESC(Cno),ScorefloatCONSTRAINTScore_ChkCHECK(Score=0ANDScore=100),PRIMARYKEY(Sno,Cno));223.修改数据表用ALTERTABLE…修改数据表结构(1)ADD方式用于增加新列或完整性约束,定义方式同CREATETABLE,语法格式:ALTERTABLE表名ADD列定义|完整性约束定义[例]在student1表添加一个“住址”列,可用下列语句ALTERTABLEstudent1ADD住址varchar(20);应注意,新增加的列不能定义为“NOTNULL”。数据表在增加一列后,原有记录在新增加的列上的值都被定义为空(NULL)。[例]在SC表中增加完整性约束定义
本文标题:关系数据库标准语言――SQL语言.
链接地址:https://www.777doc.com/doc-3868293 .html