版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构化查询语言结构化查询语言SQL2 SQL是结构化查询语言是结构化查询语言(Structured Query Language)的缩写,其功能包括的缩写,其功能包括数据查询数据查询DQL、数据操纵、数据操纵DML、数据定义数据定义DDL和数据控制和数据控制DCL四个部分。四个部分。 它是位于关系代数和关系演算基础之上的数据库操它是位于关系代数和关系演算基础之上的数据库操作语言。作语言。 SQL 语言语言简洁、方便实用、功能齐全简洁、方便实用、功能齐全,已,已成为目前应用最广的关系数据库语言。成为目前应用最广的关系数据库语言。3概概 述述SQL语言的发展语言的发展 SQL语言是当前最为成功、应
2、用最为广泛的关系数据库语言是当前最为成功、应用最为广泛的关系数据库语言,其发展主要经历了以下几个阶段:语言,其发展主要经历了以下几个阶段: 1974年由年由CHAMBERLIN和和BOYEE提出,当时称为提出,当时称为SEQUEL(STRUCTURED ENGLISH QUERY LANGUAGE); IBM公司对其进行了修改,并用于其公司对其进行了修改,并用于其SYSTEM R关关系数据库系统中;系数据库系统中; 1981年年 IBM推出其商用关系数据库推出其商用关系数据库SQL/DS,并将其,并将其名字改为名字改为SQL,由于,由于SQL语言功能强大,简洁易用,语言功能强大,简洁易用,因此
3、得到了广泛的使用;因此得到了广泛的使用; 1. 今天广泛应用于各种大型数据库,如今天广泛应用于各种大型数据库,如SYBASE、INFORMIX、 ORACLE、DB2、INGRES等,也用等,也用于各种小型数据库,如于各种小型数据库,如FOXPRO、ACCESS。4 SQL语言标准化语言标准化1. 1982年,美国国家标准化局年,美国国家标准化局(AMERICAN NATIONAL STANDARD INSTITUTE,简称,简称ANSI)开始制定开始制定SQL标准;标准;2. 1986年,美国国家标准化协会公布了年,美国国家标准化协会公布了SQL语言的第一个语言的第一个标准标准SQL86;3
4、. 1987年,国际标准化组织年,国际标准化组织(ISO)通过了通过了SQL86标准;标准;4. 1989年,国际标准化组织年,国际标准化组织(ISO)对对SQL86进行了补充,推进行了补充,推出了出了SQL89标准;标准;5. 1992年,年,ISO又推出了又推出了SQL92标准,也称为标准,也称为SQL2;6. 目前目前SQL99(也称为也称为SQL3)也被推出,并增加了面向对象也被推出,并增加了面向对象的功能。的功能。5SQL结构化查询语言结构化查询语言SQL语言的主要特点语言的主要特点 SQL语言类似于英语的自然语言,简洁易用。语言类似于英语的自然语言,简洁易用。 SQL语言是一种语言
5、是一种非过程语言非过程语言,即用户只要提出,即用户只要提出“干什么干什么”即可,不必管具体操作过程,也不必了解数据的存取路即可,不必管具体操作过程,也不必了解数据的存取路径,只要指明所需的数据即可。径,只要指明所需的数据即可。 SQL语言是一种语言是一种面向集合操作面向集合操作的语言,每个命令的操作的语言,每个命令的操作对象是一个或多个关系,结果也是一个关系。对象是一个或多个关系,结果也是一个关系。 SQL语言既是语言既是自含式语言自含式语言,又是,又是嵌入式语言嵌入式语言。可独立使。可独立使用,也可嵌入到宿主语言中。用,也可嵌入到宿主语言中。 自含式语言可以独立使用交互命令,适用于终端用户、
6、自含式语言可以独立使用交互命令,适用于终端用户、应用程序员和应用程序员和DBA;1. 嵌入式语言使其嵌入在高级语言中使用,供应用程序嵌入式语言使其嵌入在高级语言中使用,供应用程序员开发应用程序。员开发应用程序。6 SQL语言具有以下四类操作一体化的特点语言具有以下四类操作一体化的特点:数据查询数据查询(QUERY)数据定义数据定义(DEFINITION)u 表的定义表的定义u 视图定义视图定义u 索引定义索引定义 其他对象定义其他对象定义数据操纵数据操纵(MANIPULATION)u 增加数据增加数据u 删除数据删除数据u 修改数据修改数据数据控制数据控制(CONTROL)u 授予权限授予权限
7、u 收回权限收回权限7注意:注意:uSQL语言虽然是国际标准,不同的数据库厂商提供的数语言虽然是国际标准,不同的数据库厂商提供的数据库产品都对据库产品都对SQL部分或全部地支持;但为了商业竞争,部分或全部地支持;但为了商业竞争,大都对大都对SQL做了不同的扩充。做了不同的扩充。u为了便于讲解,这里我们将以标准为了便于讲解,这里我们将以标准SQL为基础,并对其为基础,并对其语法形式做适当简化。语法形式做适当简化。uSQL语言不区分大小写。语言不区分大小写。8介绍两个基本概念:基本表和视图。介绍两个基本概念:基本表和视图。 基本表基本表(BASE TABLE):是独立存在的表,不是由其:是独立存在
8、的表,不是由其它的表导出的表。一个关系对应一个基本表,一个或它的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。多个基本表对应一个存储文件。 视图视图(VIEW):是虚拟的表,是从一个或几个基本表导:是虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义,而不存放视图对应的数据,这些数存放视图的定义,而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。发生变化时,从视图中查
9、询出来的数据也随之改变。索引索引是数据库中的一个特殊的文件,用于加快查询的速是数据库中的一个特殊的文件,用于加快查询的速度。度。9SQL语言支持数据库的三级模式结构,如下图所示语言支持数据库的三级模式结构,如下图所示 外模式外模式对应于视图和部分基本表对应于视图和部分基本表 模式模式(概念模式概念模式)对应于基本表对应于基本表 内模式内模式对应于存储文件。对应于存储文件。SQL视图视图1视图视图2基本表基本表1基本表基本表2基本表基本表3基本表基本表4存储文件存储文件1存储文件存储文件2外模式外模式模式模式内模式内模式10SQL的数据描述与操作的数据描述与操作 常用常用SQL Server数据
10、类型数据类型1. 整型数据类型整型数据类型整型整型(integer)数据类型用来存储整数。数据类型用来存储整数。int:可以存放从可以存放从-231到到231-1范围之间的所有正负整数。范围之间的所有正负整数。每一个每一个int型数据需占用型数据需占用4个字节的存储空间。个字节的存储空间。 smallint:可以存放从可以存放从-215到到215-1之间的所有整数。之间的所有整数。tinyint:可以存放从可以存放从0到到255之间的所有整数。之间的所有整数。 bigint:可以存放从可以存放从-263到到263-1之间的所有整数。之间的所有整数。112. 非精确非精确浮点数据类型浮点数据类型
11、浮点数据类型用于存储实数。浮点类型的数据可能会有舍入误差。浮点数据类型用于存储实数。浮点类型的数据可能会有舍入误差。float:其表示范围从其表示范围从-1.79E+308到到1.79E+308。定义数据时,可以指定。定义数据时,可以指定存放数据的精度,精度取值范围为存放数据的精度,精度取值范围为1到到15 语法:语法:float(n)n:如果如果1-24则精度是则精度是7位数,位数,4字节;如果是字节;如果是25-53精度精度15位数,位数,8字字节。节。float相当于相当于float(53)real:表示范围从表示范围从-3.4E+38到到3.4E+38,最大可以有,最大可以有7位精确位
12、数。位精确位数。 real的同义词是的同义词是float(24)注意:在企业管理器中不能使用带注意:在企业管理器中不能使用带n的的float,float默认为默认为float(53),如果使,如果使用用7位精度的浮点数则用位精度的浮点数则用real定义。但可在查询分析器中使用定义。但可在查询分析器中使用float(n)12decimal和和numeric:类型功能相同,是类型功能相同,是不带舍入不带舍入的精确的精确的浮点数,其表示范围最多可达的浮点数,其表示范围最多可达38位数字,位数字,-10381038。可以指定精度及小数位数,占用字节可以指定精度及小数位数,占用字节5-17例如例如:de
13、cimal(6,2)表示最多可存放表示最多可存放6位数字,并且小数位数字,并且小数点后有点后有2位,那么整数部分最多有位,那么整数部分最多有4位。如:位。如:3144.567,设为此类型后的值为设为此类型后的值为3144.56。Numeric等于等于decimal13 decimal和和numeric可存储固定精度和小数位的数字数据,它可存储固定精度和小数位的数字数据,它们的存储长度随精度变化而变化,最少为们的存储长度随精度变化而变化,最少为5字节,最多为字节,最多为17字节。字节。 l 精度为精度为19时,存储字节长度为时,存储字节长度为5; l 精度为精度为1019时,存储字节长度为时,存
14、储字节长度为9; l 精度为精度为2028时,存储字节长度为时,存储字节长度为13; l 精度为精度为2938时,存储字节长度为时,存储字节长度为17。 例如若有声明例如若有声明numeric(8,3),则存储该类型数据需,则存储该类型数据需5字节,而字节,而若有声明若有声明numeric(22,5),则存储该类型数据需,则存储该类型数据需13字节。字节。 注意:声明精确整数型数据时,其小数位数必须小于精度;注意:声明精确整数型数据时,其小数位数必须小于精度;在给精确整数型数据赋值时,必须使所赋数据的整数部分位在给精确整数型数据赋值时,必须使所赋数据的整数部分位数不大于列的整数部分的长度。数不
15、大于列的整数部分的长度。 14浮点型浮点型 浮点型也称浮点型也称近似数值型近似数值型。顾名思义,这种类型不能。顾名思义,这种类型不能提供精确表示数据的精度,使用这种类型来存储某提供精确表示数据的精度,使用这种类型来存储某些数值时,有可能会损失一些精度,所以它可用于些数值时,有可能会损失一些精度,所以它可用于处理取值范围非常大且对精确度要求不是十分高的处理取值范围非常大且对精确度要求不是十分高的数值量,如一些统计量。数值量,如一些统计量。 有两种近似数值数据类型:有两种近似数值数据类型:float(n)和和real,两者,两者通常都使用科学计数法表示数据,即形为:尾数通常都使用科学计数法表示数据
16、,即形为:尾数E阶数,如阶数,如5.6432E20,-2.98E10,1.287659E-9等。等。 15 real:使用:使用4字节存储数据,表数范围为字节存储数据,表数范围为-3.40E + 38 到到 3.40E + 38,数据精度为,数据精度为7位有效数字。位有效数字。 float:定义中的:定义中的n取值范围是取值范围是153,用于指示其精,用于指示其精度和存储大小。当度和存储大小。当n在在124之间时,实际上是定义之间时,实际上是定义了一个了一个real型数据,存储长度为型数据,存储长度为4字节,精度为字节,精度为7位位有效数字;当有效数字;当n在在2553之间时,存储长度为之间时
17、,存储长度为8字节,字节,精度为精度为15位有效数字。当缺省位有效数字。当缺省n时,代表时,代表n在在2553之间。之间。float型数据的数范围为型数据的数范围为- 1.79E+308 到到 1.79E+308。 注意:因为注意:因为float和和real不能表示精确数字故我们大不能表示精确数字故我们大多数采用多数采用numerac和和decimal数据类型数据类型163. 字符数据类型字符数据类型 char (n) :存放固定长度的非存放固定长度的非Unicode字符,每个字符占字符,每个字符占一个字节的存储空间,一个字节的存储空间,n值不能超过值不能超过8000。varchar (n)
18、:存放不固定长度的非存放不固定长度的非Unicode字符,字符,n值不值不能超过能超过8000。text:存放非存放非Unicode字符,其长度可自动改变,其能表字符,其长度可自动改变,其能表示的最大长度为示的最大长度为231-1个字符(个字符(2G)nchar(n):存放固定长度的存放固定长度的Unicode字符,其中字符,其中n值不能值不能超过超过4000。 nvarchar (n) :存放不固定长度的存放不固定长度的Unicode字符,其中字符,其中n值不能超过值不能超过4000。ntext:存放可多达存放可多达230-1个可变长个可变长Unicode字符(字符(1G)174. 日期和时
19、间数据类型日期和时间数据类型Datetime:用于存储日期和时间。存储用于存储日期和时间。存储从公元从公元1753年年1月月1日零时起到公元日零时起到公元9999年年12月月31日日23时时59分分59秒秒之间之间的所有日期和时间,精度为的所有日期和时间,精度为3.33毫秒。占用毫秒。占用8个字节的个字节的存储空间。存储空间。Smalldatetime:与与datetime数据类型类似,但其日期时数据类型类似,但其日期时间范围较小,存储间范围较小,存储从从1900年年1月月1日到日到2079年年6月月6日内日内的日期和时间,精度为的日期和时间,精度为1分钟。占用分钟。占用4个字节的存储空个字节
20、的存储空间。间。185. 货币数据类型货币数据类型这种类型的数据可以存放一个正或负的货币值,其存放这种类型的数据可以存放一个正或负的货币值,其存放的数据中小数点后总是的数据中小数点后总是4位。位。money:表示范围为表示范围为-922337203685477.5808到到922337203685477.5807,每个,每个money类型的数据占用类型的数据占用8个字节个字节的存储空间。的存储空间。smallmoney:与与money数据类型类似,但其存储的货币数据类型类似,但其存储的货币值范围比值范围比money数据类型小,为数据类型小,为-214748.3648到到214748.3647。
21、占用。占用4个字节个字节的存储空间。的存储空间。6. 位数据类型位数据类型 bit:这种类型的数据仅有两种取值:这种类型的数据仅有两种取值:0或或1,长度为,长度为1字字节。适用于存储一个逻辑值。节。适用于存储一个逻辑值。197. 二进制数据类型二进制数据类型这种数据类型用来存储二进制位串。这种数据类型用来存储二进制位串。binary (n) :n为为18000,数据的存储长度是固定的,数据的存储长度是固定的,存存储储n个字节的二进制位串占用个字节的二进制位串占用n+4个字节的存储空间个字节的存储空间。当输入的二进制数据长度小于当输入的二进制数据长度小于n字节时,余下部分填字节时,余下部分填0
22、。 varbinary(n) :数据的存储长度是变化的,占用实际所数据的存储长度是变化的,占用实际所输入数据的长度加上输入数据的长度加上4字节的存储空间。字节的存储空间。image:用于存储照片或图片等信息。最多可存储长达用于存储照片或图片等信息。最多可存储长达231-1个字节的数据个字节的数据2G.208. 特殊数据类型特殊数据类型 timestamp:亦称时间戳数据类型,占亦称时间戳数据类型,占8个字节个字节的空间,的空间,它提供数据库范围内的惟一值它提供数据库范围内的惟一值。任何一个表中只能有。任何一个表中只能有一个一个timestamp列,该列的值在该行数据修改时由列,该列的值在该行数
23、据修改时由SQL Server自动更新,自动更新,反应了数据库中数据修改的相对顺反应了数据库中数据修改的相对顺序,是一个二进制格式的递增序列序,是一个二进制格式的递增序列。 Uniqueidentifier:这种数据类型用于存储一个这种数据类型用于存储一个16字节字节长长的二进制数据,称为的二进制数据,称为全局惟一标识符代码全局惟一标识符代码(Globally Unique Identifier,简写为,简写为GUID)。在)。在SQL Server中,中,用用NEWID函数函数来生成来生成GUID。即使在不同的计算机及。即使在不同的计算机及不同的数据库中,也不会有相同的不同的数据库中,也不会
24、有相同的GUID。21 空值空值(NULL)空值不同于空白空值不同于空白(空字符串空字符串)或数值零,通常表示未填写、未或数值零,通常表示未填写、未知知(Unknown)、不可用或将在以后添加的数据。、不可用或将在以后添加的数据。22创建数据库创建数据库 例例1:创建一个数据库名为:创建一个数据库名为Student1,数据逻辑文件名数据逻辑文件名student1_data,物理文件,物理文件student1.mdf,初始大小,初始大小10MB,最最大尺寸无限制,增长速度大尺寸无限制,增长速度10%,日志文件逻辑名,日志文件逻辑名student1_log,物理文件名,物理文件名Student1.
25、ldf,初始大小,初始大小1MB,最,最大大5MB,增长速度,增长速度1MB 例例2:创建一个数据库,名称为:创建一个数据库,名称为students,有有10M,20M两个数两个数据文件,和两个据文件,和两个10M事务日志文件。数据文件逻辑名事务日志文件。数据文件逻辑名student1,student2,物理文件物理文件student1.mdf,student2.mdf,主,主文件文件 是是student1,由由primary指定,两个数据文件最大分别为指定,两个数据文件最大分别为无限制和无限制和100M,增长速度分别为,增长速度分别为10%和和1M,日志逻辑文件,日志逻辑文件studentl
26、og1和和studentlog2,物理文件,物理文件studentlog1.ldf和和studentlog2.ld最大尺寸分别是最大尺寸分别是50M,文件增长方式,文件增长方式1M23数据库的修改数据库的修改(注意文件组注意文件组) 把一个包含两个数据文件的文件组和一个事务日志文件添加把一个包含两个数据文件的文件组和一个事务日志文件添加到到students数据库中数据库中Alter database studentsAdd filegroup data1Alter database studentsAdd file( name=student3,filename=e:student3.ndf,
27、 size=1,maxsize=50,filegrowth=1),(name=student4,filename=“e:student4.ndf, size=2,maxsize=50,filegrowth=10%) to filegroup data1Alter database studentsAdd Log file(name=studentlog3,filename=e:studentlog3.ldfSize=1,maxsize=50,filegrowth=1)24 其他修改数据库其他修改数据库Alter database Add Log file filespec|Add FileGr
28、oup filegroup_name|Add File file filespec,.n to filegroup filegroup_name|Modify name=newDb_name |Remove file logic_name|Remove filegroup filegroup_name|Modify file filespec|Modify filegroup filegroup_name其他数据库操作参看联机帮助:其他数据库操作参看联机帮助:Alter database A. B. C. D. E. F.25 定义基表定义基表1. 建立基表建立基表 语法:语法:CREATE
29、TABLE ( 属性约束属性约束 , 属性约束属性约束 , 属性约束属性约束,表的约束表的约束);26例例1.建立建立student表表CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno);27完整性约束完整性约束 Primary Key 约束约束 Foreign key 约束约束 Unique 约束约
30、束 Check约束约束 Default约束约束 为空性约束为空性约束281、实体完整性约束、实体完整性约束 在上例中,如果定义关系在上例中,如果定义关系student的完整性约束:实体的完整性约束:实体完整性约束完整性约束(使用关键字使用关键字PRIMARY KEY)和用户自定和用户自定义的完整性约束义的完整性约束(使用关键字使用关键字CHECK)。CREATE TABLE student(Sno CHAR(5) PRIMARY KEY,Sname VARCHAR (8),Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage
31、BETWEEN 10 AND 50),Sdept VARCHAR(5) );29 SQL中,当关系的主键只有一个属性时,实体完整性约束中,当关系的主键只有一个属性时,实体完整性约束既可以定义在既可以定义在属性约束中,也可以定义在表的约束属性约束中,也可以定义在表的约束中。中。 例例1还可以定义为:还可以定义为:CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK(Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept
32、 VARCHAR(5),PRIMARY KEY (Sno);30 一个表中只能定义一个表中只能定义一个主关键字一个主关键字,但当表中的键码不止一,但当表中的键码不止一个时,其他的键码可以用关键字个时,其他的键码可以用关键字UNIQUE说明,可以在属说明,可以在属性约束中说明,也可在表的约束中说明。例如学生表中性约束中说明,也可在表的约束中说明。例如学生表中sname也是键码:也是键码:CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) UNIQUE,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLIN
33、T CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); 也可以在最后用也可以在最后用UNIQUE(Sname)定义。定义。31例:创建下表例:创建下表StuSno学号学号Char(8)主键主键Sname姓名姓名Varchar(10)不重复不重复Sage年龄年龄Smallint1050Sdept系系Varchar(50)不能为空不能为空32分析分析:实体完整性的检查实际上作用于:实体完整性的检查实际上作用于插入和修插入和修改记录的操作改记录的操作,对删除记录操作并没有必要。另,对删除记录操作并没有必要。另外,外,SQ
34、L要想有效的实施实体完整性约束,在键要想有效的实施实体完整性约束,在键码上建立索引是非常有必要的码上建立索引是非常有必要的!332、参照完整性约束、参照完整性约束SQL中,当关系的外键只有一个属性时,参照完整性约中,当关系的外键只有一个属性时,参照完整性约束既可以定义在属性约束中束既可以定义在属性约束中(用关键字用关键字REFERENCES),也可以定义在表的约束中也可以定义在表的约束中(用关键字用关键字FOREIGN KEY REFERENCES)。例例2.定义成绩表定义成绩表SCCREATE TABLE SC(Sno CHAR(5) REFERENCES student(Sno) ,Cno
35、 CHAR(5) REFERENCES course(Cno) ,Score FLOAT CHECK(Score BETWEEN 0.0 AND 100.0),PRIMARY KEY(Sno,Cno);34 例例2也可定义为:也可定义为:CREATE TABLE SC(Sno CHAR(5),Cno CHAR(5),Score FLOAT CHECK (Score BETWEEN 0.0 AND 100.0),PRIMARY KEY (Sno,Cno),FOREIGN KEY (Sno) REFERENCES student(Sno) ,FOREIGN KEY (Cno) REFERENCES
36、 course(Cno);353、用户自定义完整性约束、用户自定义完整性约束 第三类重要的约束是用户自定义的约束,这类约束一第三类重要的约束是用户自定义的约束,这类约束一般是用于限制某些属性的取值范围。般是用于限制某些属性的取值范围。这些约束可用如这些约束可用如下两者之一来表示:下两者之一来表示:1、对关系模式的定义中对属性的约束、对关系模式的定义中对属性的约束2、对域的约束,随后把域的说明为上述的的域、对域的约束,随后把域的说明为上述的的域 基于属性的约束包括基于属性的约束包括NOT NULL约束及约束及CHECK约束。约束。36 如例如例1:CREATE TABLE student(Sno
37、 CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); CHECK约束中还可以使用约束中还可以使用其他的算术比较运算符其他的算术比较运算符及及嵌套嵌套查询查询来对属性进行约束。来对属性进行约束。374、默认值、默认值 在定义表时可为某些字段设置一定的默认值。使用在定义表时可为某些字段设置一定的默认值。使用DEFAULT来进行定义。来进行定义。 我们可
38、对例我们可对例1进行修改,使学生年龄的默认值为进行修改,使学生年龄的默认值为19CREATE TABLE student(Sno CHAR(5) PRIMARY KEY,Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage smallint DEFAULT 19,Sdept VARCHAR(5);38语法格式:语法格式:CREATE TABLEdatabase_name.owner.|owner. table_name ( | column_name AS computed_column_expression |
39、:=CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE , . n ) ON filegroup|DEFAULT 395.2 表的创建与维护(其他例)表的创建与维护(其他例)例例5-1 简单的表定义。简单的表定义。USE NewSalesGOCREATE TABLE employee ( employee_id char(4) NOT NULL,employee_name char(8) NOT NULL,sex char(2) NOT NULL,birth_date datetime NOT NULL,hire_date datetime NO
40、T NULL,address varchar(50),telephone char(8),wages money,department_id char(4) NOT NULL,resume text NOT NULL)40表的创建与维护表的创建与维护例例5-2 为表指定文件组。为表指定文件组。CREATE TABLE NewSales.dbo.supplier ( supplier_idchar(5)NOT NULL, supplier_name varchar(50) NOT NULL, linkman_name varchar(8), address varchar(50), teleph
41、onechar(12) NOT NULL)ON PRIMARY41例例5-3 对对计算列计算列使用表达式。使用表达式。CREATE TABLE salarys ( 姓名姓名 varchar(10), 基本工资基本工资 money, 奖金奖金 money, 总计总计 AS 基本工资基本工资+奖金奖金)425.2 表的创建与维护表的创建与维护例例5-4 定义表定义表autouser自动获取用户名称。自动获取用户名称。CREATE TABLE autouser ( 编号编号 int identity(1,1) NOT NULL, 用户代码用户代码 varchar(18), 登录时间登录时间 AS G
42、etdate(), 用户名用户名 AS User_name()435.2 表的创建与维护表的创建与维护例例5-5 创建临时表。创建临时表。CREATE TABLE #students ( 学号学号 varchar(8), 姓名姓名 varchar(10), 性别性别 varchar(2), 班级班级 varchar(10)44用企业管理器来进行表的创建用企业管理器来进行表的创建关系图关系图45 表的修改表的修改【查看【查看Alter Table帮助示例帮助示例A-G】修改表结构的修改表结构的语法为语法为:ALTER TABLE ADD 完整性约束完整性约束Alter DROP CONSTRAI
43、NT constraint_nameDROP COLUMN column_name;注意:删除列受到诸多限制注意:删除列受到诸多限制例:修改例:修改Student表,增加表,增加sclass属性。属性。ALTER TABLE studentADD sclass CHAR(5);46 表的删除表的删除删除表的删除表的语法形式为语法形式为:DROP TABLE ;例:删除表例:删除表studentDROP TABLE student;47CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (S
44、sex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); 48 向表中增添记录向表中增添记录向表中增添记录向表中增添记录分为两种:分为两种:增添一条记录增添一条记录,增添多条记录增添多条记录。这里先讲述前者,我们学习了选择操作后再讲述后一种。这里先讲述前者,我们学习了选择操作后再讲述后一种。增添记录的语法增添记录的语法形式为:形式为:INSERT INTO 属性列表属性列表 VALUES(常量列表常量列表);例:向例:向student表增添记录刘立,表增添记录刘立
45、,20岁岁,IS系,男系,男 ,学号为学号为7INSERT INTO student VALUES(7,刘立刘立,Male,19,IS);注意:注意:SQL中,中,字符常量字符常量通常要用通常要用单引号单引号括起来,数括起来,数字常量直接书写,日期常量多数情况用单引号括起字常量直接书写,日期常量多数情况用单引号括起来,空值用来,空值用NULL,判断是否为空值用判断是否为空值用IS NOT NULL等。等。49 索索 引引 建立索引的语法形式为:建立索引的语法形式为:CREATE UNIQUE INDEX ON (属性名及排列次属性名及排列次序的列表序的列表);其中,排列次序为升序其中,排列次序
46、为升序(ASC)或降序或降序(DESC),默认情况下为升序。,默认情况下为升序。 例:在例:在student的的sno上建立唯一索引上建立唯一索引idx_snoCREATE UNIQUE INDEX idx_sno ON student(sno);說明說明 :聚集索引确定表中数据的物理顺序。聚集索引类似于电:聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引的物理存储顺序,因此一个表只能包含一个聚集索引。但该。但该索引可以包含多个列(组合索引),就
47、像电话簿按姓氏和名索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。字进行组织一样。 CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c) 50 查看索引查看索引系统存储过程系统存储过程sp_helpindex可以返回表的所有索引信可以返回表的所有索引信息,其息,其语法形式如下:语法形式如下:sp_helpindex objname=nameobjname=name 指定当前数据库中的表的名称指定当前数据库中的表的名称例:例:sp_helpindex student 修改索引修改索引系统存储过程系统存储过程sp_rename可以用来更改索引的
48、名称,可以用来更改索引的名称,其语法形式如下:其语法形式如下: sp_renameobjname=object_name, n e w n a m e = n e w _ n a m e , objtype = object_type 51 举例举例更改更改student表中的索引表中的索引idx_sno名称为名称为idx_sno _end,其程序清单如下:其程序清单如下:sp_rename student.idx_sno, idx_sno _end, index 删除索引的语法为:删除索引的语法为:DROP INDEX ;例:删除索引例:删除索引idx_snoDROP INDEX stude
49、nt.idx_sno;52基本查询基本查询 SQL中数据查询的语法形式为:中数据查询的语法形式为:SELECT DISTINCT FROM WHERE 条件表达式条件表达式GROUP BY 属性列表属性列表 HAVING 条件表达式条件表达式ORDER BY 属性列表属性列表531、最简单的查询、最简单的查询(单个表上投影操作单个表上投影操作)例:查询全体学生的详细信息例:查询全体学生的详细信息SELECT *FROM student;注意注意:*号表示按表中属性定义的顺序从左到右号表示按表中属性定义的顺序从左到右显示所有的属性值。显示所有的属性值。例:查询全体学生的姓名和年龄例:查询全体学生
50、的姓名和年龄SELECT sname,sage FROM student;542、去掉查询结果中的副本、去掉查询结果中的副本那么那么SQL中使用中使用DISTINCT来去掉查询结果中的副本。来去掉查询结果中的副本。例:查询选了例:查询选了1号课或号课或2号课的学生的学号。号课的学生的学号。SELECT DISTINCT snoFROM scWHERE cno =1 OR cno =2;553、属性的别名、属性的别名有时我们希望由查询操作生成的关系的属性与该查询有时我们希望由查询操作生成的关系的属性与该查询FROM子句后的关系的属性有所区别,那么可以在子句后的关系的属性有所区别,那么可以在SEL
51、ECT子句中的属性后面用关键字子句中的属性后面用关键字AS加上别名来加上别名来实现。实现。 例:查询所有学生的学号和姓名,新的关系中例:查询所有学生的学号和姓名,新的关系中sname用用name表示表示SELECT sno, sname AS nameFROM student;564、在投影中进行计算、在投影中进行计算可以在可以在SELECT子句中同类型的属性、属性与同类子句中同类型的属性、属性与同类型的常量、同类型的常量之间进行型的常量、同类型的常量之间进行代数运算、字符代数运算、字符连接运算连接运算,还可以利用,还可以利用系统提供的函数系统提供的函数等。等。 例:例: 显示学生的姓名及加一
52、岁后的年龄。显示学生的姓名及加一岁后的年龄。SELECT sname, sage+1FROM student;例:例: 两个特殊的查询两个特殊的查询SELECT sname,是是 AS p1, sage+1 AS p2 ,岁岁 AS p3FROM student;SELECT sno, cno, garde*1.1 AS p1FROM SC;575、带选择操作的查询、带选择操作的查询SQL中通过中通过WHERE子句构造查询操作的选择条件,即子句构造查询操作的选择条件,即条条件表达式件表达式;可以使用;可以使用、=、=、=、BETWEENAND等算术比较运算符构造查询条件;等算术比较运算符构造查
53、询条件;运运算对象算对象可以是常量、可以是常量、FROM后的表的属性后的表的属性等。并且可以等。并且可以通过通过AND、OR等将各个选择条件连接起来。等将各个选择条件连接起来。条件表达式条件表达式对表中每一个元组进行运算,结果是对表中每一个元组进行运算,结果是TRUE或或FALSE;当为当为TRUE时,即符合查询条件。时,即符合查询条件。例:例: 查询年龄小于查询年龄小于19岁的岁的IS系的学生。系的学生。SELECT *FROM studentWHERE sage 2002-11-15;628、BETWEENANDWHERE子句中的子句中的x BETWEEN a AND b与与x=a AND
54、 x= 3 AND ccredit 80ORDER BY ss DESC;68 SQL查询中子句的顺序查询中子句的顺序到目前为止,我们已经遇到出现在到目前为止,我们已经遇到出现在select-from-where查询中的所有查询中的所有6种子句:种子句:SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY等。等。其中,只有前两个是必需的。其他任何附加的子其中,只有前两个是必需的。其他任何附加的子句都必须按照上述的顺序出现。句都必须按照上述的顺序出现。69sno snamessexsage sdept1Mary Female 19CS2JohnMale1
55、8MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudentcnocnamecpno ccredit1Database532Computer Basic43MIS724OS245Data Structure636C+237Software Engineer63Coursesno cno score118712781388216723923193348941785283SC70 当在当在FROM子句后面写上多个关系名,并且有选择子句后面写上多个关系名,并且有选择操作时,即条件连接。操作时,即条件连接。 例例:查询学习了查询学习了1号课的学生的名字。号课的学生
56、的名字。SELECT snameFROM student, scWHERE student.sno = sc.sno and o = 1其中,其中, student.sno = sc.sno为连接条件。为连接条件。注意:注意:student.sno和和sc.sno的写法为的写法为.,即当在不同表中出现同名属性时的区分方法。即当在不同表中出现同名属性时的区分方法。连接查询连接查询711、元组变量、元组变量 有时会出现一种特殊的连接查询,即关系自身的连有时会出现一种特殊的连接查询,即关系自身的连接。那么此时在查询条件中就需要区分两个内容上接。那么此时在查询条件中就需要区分两个内容上一样的关系,这是
57、我们引入了元组变量。这有点类一样的关系,这是我们引入了元组变量。这有点类似属性别名。似属性别名。 例例: 查询和查询和bill同一个系的学生的学号和姓名。假同一个系的学生的学号和姓名。假设我们不知道刘晨是那个系的。设我们不知道刘晨是那个系的。SELECT b.snameFROM student AS a, student AS bWHERE a.sdept = b.sdept AND a.sname = bill;其中元组变量其中元组变量a和和b分别用于查询分别用于查询bill及要找的学生的系及要找的学生的系72sno snamessexsage sdept1Mary Female 19CS2
58、JohnMale18MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudent as asno snamessexsage sdept1Mary Female 19CS2JohnMale18MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudent as b73连接连接(Join) 连接也称为连接也称为连接,是从两个关系的笛卡尔积中连接,是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。记作:选取属性间满足一定条件的元组。记作: trXtsY为连接条件,为连接条件,为比较运算。为比较运算。连接可等价表示为连接可等价
59、表示为:FR S=F(RS)RrsS=t rts |trRtsStrXtsYabc123234333Bae1223CB. abcC.ae1231223423BB.a=C.aC74 有时,元组变量也可以用于简化书写,例如以下查有时,元组变量也可以用于简化书写,例如以下查询修改为:询修改为:SELECT student.snameFROM student, scWHERE student.sno = sc.sno and o = 1;改为:改为:SELECT s.snameFROM student AS s, scWHERE s.sno = sc.sno and o = 1;75嵌套查询嵌套查询1
60、、嵌套查询、嵌套查询嵌套查询即在嵌套查询即在WHERE子句中出现子句中出现select-from-where表表达式的查询,该达式的查询,该select-from-where表达式也叫表达式也叫子查询子查询。有些连接操作可以用子查询等价实现,而有的查询则必有些连接操作可以用子查询等价实现,而有的查询则必须要使用嵌套查询。须要使用嵌套查询。子查询按查询结果分为子查询按查询结果分为产生标量值的子查询产生标量值的子查询和和查询结果查询结果为关系的子查询为关系的子查询。762、产生标量值的子查询、产生标量值的子查询某些某些select-from-where表达式的查询结果刚好是一个属性表达式的查询结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开花课件制作教学课件
- 弹跳效果课件教学课件
- 芭蕾课堂课件教学课件
- 北京版五年级(上)劳动技术教案
- 高等学校排球普修课教案
- 交通枢纽基础设施协议
- 互联网医疗保证金协议书
- 产品质量不合格事故补偿协议书
- 产业协同协议书
- 个人房屋租赁协议
- (必练)广东省军队文职(经济学)近年考试真题试题库(含答案)
- 基于数据挖掘的高职学情分析与课堂教学质量提升研究
- 能源岗位招聘笔试题与参考答案(某大型国企)2024年
- 蔡戈尼效应完整版本
- 农业灌溉装置市场环境与对策分析
- 统编版道德与法治初二上学期期中试卷及答案指导(2024年)
- 部编版小学五年级上册道法课程纲要(知识清单)
- GB/T 22838.6-2024卷烟和滤棒物理性能的测定第6部分:硬度
- 职业技能等级认定质量控制及规章制度
- 山东省临沂市(2024年-2025年小学四年级语文)人教版期中考试(上学期)试卷及答案
- 英大传媒投资集团限公司2024年应届毕业生招聘(第一批)高频500题难、易错点模拟试题附带答案详解
评论
0/150
提交评论