1第4章结构化查询语言SQL主要内容SQL概述SQL的数据定义SQL的数据查询数据更新嵌入式SQLTransactSQL语言概述2本章概述结构化查询语言SQL(StructuredQueryLanguage)是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。SQL语言是介乎于关系代数和元组演算之间的一种语言。本章详细介绍SQL的核心部分内容:数据定义、数据查询、数据更新和嵌入式SQL。34.1SQL概述主要内容SQL的产生与发展SQL的组成及特点44.1.1SQL的产生与发展1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEMR,其配备的查询语言称为SQUARE(SpecifyingQueriesAsRelationalExpression)语言,语言中使用了较多的数学符号。1974年,Boyce和Chamberlin把SQUARE修改为SEQUEL(StructuredEnglishQueryLanguage)语言。后来SEQUEL简称为SQL(StructuredQueryLanguage),即“结构式查询语言”,SQL的发音仍“sequel”。现在SQL已经成为一个标准。SQL有两个标准:ANSISQL和1992年通过的修改版本SQL-92(简称SQL2)。还有一个新的标准SQL3,它扩充了SQL2,引入了递归、触发器和对象等概念和机制。54.1.2SQL的组成及特点SQL语言从功能上可以分为四部分:数据查询(DataQuery)、数据操纵(DataManipulation)、数据定义(DataDefinition)和数据控制(DataControl)。•数据定义语言,即SQLDDL,用于定义SQL模式、基本表、视图、索引等结构。•数据操纵语言,即SQLDML。数据操纵分成数据查询和数据更新两类。其中数据更新又分成插入、删除和修改三种操作。•数据控制语言,即SQLDCL,这一部分包括对基本表和视图的授权、完整性规则的描述、事务控制等内容。SQL的核心部分相当于关系代数,同时又具有关系代数所没有的许多特点,如聚集、数据库更新等。6特点:综合统一高度非过程化SQL是一种第四代语言(4GL),用户只需提出“干什么”,无需具体指明“怎么干”,像存取路径选择和具体处理操作等,均有系统自动完成。统一的语法结构SQL有两种使用方式:一是联机交互使用,另一种是嵌入到某种高级语言程序设计语言中去使用。语言简洁7SQL的核心动词功能动词数据库查询SELECT数据定义CREATE,DROP数据操纵INSERT,UPDATE,DELECT数据控制GRANT,REVOKE84.2SQL的数据定义主要内容数据库的创建与撤销定义、修改与删除基本表建立与删除索引创建与删除视图9操作对象操作方式创建删除修改数据库CREATEDATABASEDROPDATABASE表CREATETABLEDROPTABLEALTERTABLE索引CREATEINDEXDROPINDEX视图CREATEVIEWDROPVIEWSQL的数据定义功能包括数据库定义、表定义、视图和索引的定义。10学号SNO姓名SNAME性别SEX年龄AGE所在系SDEPT200915121200915122200915123200915125李小勇刘晨王洪敏张力MFFM20191819CSCSMAIS学生表:S(SNO,SNAME,SEX,AGE,SDEPT)课程表:C(CNO,CNAME,CPNO,CCREDIT)学生选课表:SC(SNO,CNO,GRADE)学生表实例例4.1定义一个教务管理数据库JWGL,它包含3个表:本章数据库示例(教务管理数据库)11课程号CNO课程名CNAME先修课CPNO学分CCREDIT1234567数据库数学信息系统操作系统数据结构数据处理C语言516764243424课程表实例学生表选课表实例学号SNO课程号CNO成绩GRADE200915121200915121200915121200915122200915122123239285889080124.2.1数据库的创建与撤销数据库的创建在SQL2中,一个数据库模式被定义为基本表的集合。对数据库的创建可用CREATE语句实现,其句法如下:CREATEDATABASE数据库名AUTHORIZATION用户名其中:AUTHORIZATION用户名是指该用户获得授予创建和使用数据库的权限。例如,下面语句定义了教务管理数据库的模式:CREATEDATABASEJWGLAUTHORIZATION张铭创建的数据库名为JWGL,拥有者为张铭。13数据库的撤消当一个数据库及其所属的基本表、视图等元素都不需要时,可以用DROP语句撤消这个数据库。DROP语句的句法如下:DROPDATABASE数据库名[CASCADE|RESTRICT]撤消的方式有以下两种:CASCADE(连锁式)方式:执行DROP语句时,把数据库及其下属的基本表、视图、索引等所有元素全部撤消。RESTRICT(约束式)方式:执行DROP语句时,只有当数据库中没有任何下属元素时,才能撤消数据库,否则拒绝执行DROP语句。例如,要撤消数据库JWGL及其下属所有的元素,可用下列语句实现:DROPDATABASEJWGLCASCADE144.2.2定义、修改与删除基本表数据类型一个属性选用哪种数据类型要根据实际情况来决定,一般要从两个方面来考虑,一是取值范围,二是要做哪些运算。数据类型含义CHAR(n)VARCHAR(n)INTSMALLINTNUMERIC(p,d)REALDOUBLEPRECISIONFLOAT(n)DATETIME度为n的定长字符串最大长度为n的变长字符串长整数(也可以写作INTEGER)短整数定点数,由P位数字(不包括符号、小数点)组成,小数后面有d位数字取决于机器精度的浮点数取决于机器精度的双精度浮点数浮点数,精度至少为n位数字日期,包含年、月、日,格式为YYYY-MM-DD时间,包含一日的时、分、秒,格式为HH:MM:SS定义表-确定表的各个属性-确定每个属性域(取值范围)15定义基本表定义基本表,就是创建基本表的结构。其一般格式为:CREATETABLE表名(列名数据类型[列级完整性约束条件][,列名数据类型[列级完整性约束条件]]……[,表级完整性约束性条件]);建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由RDBMS自动检查该操作是否违背这些完整性约束条件。16例4.2建立一个“学生”表SCREATETABLES(SNOCHAR(9)PRIMARYKEY,/*列级完整性约束条件,SNO是主码*/SNAMECHAR(20)UNIQUE,/*SNAME取唯一值*/SEXCHAR(1),AGESMALLINT,SDEPTCHAR(20));系统执行上面的CREATETABLE语句后,就在数据库中建立一个新的空的“学生”表S,并将有关“学生”表的定义及有关约束条件存放在数据字典中。17例4.4建立学生选课表SCCREATETABLESC(SNOCHAR(9),CNOCHAR(4),GRADESMALLINT,PRIMARYKEY(SNO,CNO),/*主码由两个属性构成,必须作为表级完整性进行定义*/FOREIGNKEY(SNO)REFERENCESS(SNO),/*表级完整性约束条件,SNO是外码,被参照表是S*/FOREIGNKEY(CNO)REFERENCESC(CNO)/*表级完整性约束条件,CNO是外码,被参照表是C*/);修改基本表SQL语言用ALTERTABLE语句修改基本结构表,其一般格式为:ALTERTABLE表名[ADD新列名数据类型[完整性约束]][DROP完整性约束名][ALTERCOLUMN列名数据类型];其中表名是要修改的基本表。ADD子句用于增加新列和新的完整性约束条件;DROP子句用于删除指定的完整性约束条件;ALTERCOLUMN子句用于修改原有的列定义。包括修改列名和数据类型。例4.5向S表增加“入学时间”列,其数据类型为日期型。ALTERTABLESADDS_ENTRANCEDATE;不论基本表中原来是否已有数据,新增加的列一律为空值。19例4.6altertablesaltercolumnageint;例4.7altertablecaddunique(cname);20删除属性列(1)间接删除把表中要保留的列及其内容复制到一个新表中删除原表再将新表重命名为原表名(2)直接删除例:ALTERTABLEStudentDropScome;完整性约束条件*一、完整性的概念数据完整性是指存储在数据库中的数据正确无误并且相关数据具有一致性。引入数据完整性是为了在数据的添加、删除、修改等操作中不出现数据的破坏或多个表数据不一致。22在SQLServer2005中,根据数据完整措施所作用的数据库对象和范围不同,可以将数据完整性分为以下几种:1、实体完整性(主键、唯一性约束)2、参照完整性(外键约束)3、域完整性(check、默认值约束)4、用户定义的完整性23二、完整性的类型1)实体完整性实体完整性:在表中不能存在完全相同的记录,且每条记录都要具有一个非空且不重复的主键值。实现实体完整性的方法:设置主键、惟一约束、惟一索引2)参照完整性参照完整性:又称为引用完整性。是指通过主键与外键相联系的两个表或两个以上的表,相关字段的值要保持一致。实现实体完整性的方法:外键约束3)域完整性域完整性:向表中添加的数据必须与数据类型、格式及有效的数据长度相匹配。实现域完整性的方法:CHECK约束、外键约束、默认约束、非空定义、规则以及在建表时设置的数据类型4)用户定义的完整性用户定义的完整性:是根据具体的应用领域所要遵循的约束条件由用户自己定义的特定的规则。25三、约束的类型约束:SQLServer提供的自动强制数据完整性的一种方法。它通过定义列的取值规则来维护数据的完整性。当完整性约束创建之后,它作为基本表定义的一部分,存入DD中。列级完整性约束:是行定义的一部分,只能应用在一列上;表级完整性约束:它的定义独立于列的定义,可应用在一个基本表中的多列上。当需要在一个基本表中的多列上建立约束条件时,只能建立表级约束。常用约束:NOTNULL、CHECK、UNIQUE、PRIMARYKEY、FOREIGNKEY、DEFAULT261、主键(PRIMARYKEY)约束主键约束:在表中定义一个主键来惟一标识表中的每行记录每个表中只能有一个主键,主键可是一列,也可是多列;主键不能为空;主键值不能重复不能定义TEXT或IMAGE数据类型的字段列为主键。27PRIMARYKEY约束可在列级或表级上进行定义,但不允许同时在两个级别上进行定义。创建方法:①PRIMARYKEY约束直接写在列名及其类型之后;②按照语法在相应列名及类型后单独列出:CONSTRAINT约束名PRIMARYKEY③在CREATETABLE语句列出基本表的所有列之后,PRIMARYKEY(列名1[,列名2,…])28SSMS创建主键的步骤29创建表时定义主键例1:列级约束CREATETABLETb_Class(ClassIdchar(8)PRIMARYKEY,ClassNamevarchar(30)NOTNULL,DeptIdchar(2)NOTNULL,ClassStuNumberint);30例2:CREATETABLEC(cnochar(6)constraintPK_cnoprimarykey,cnamechar(20),ccreditsmallint,cpnochar(6));31例3:CREATETABLETb_Class(ClassIdchar(8)NOTNULL