1、数据库原理与 SQL Server,无锡立信职教中心校计算机组 顾丹,第一章 了解SQL Server 2000,安装SQL Server 2000 (SQL SERVER 2000的安装)管理SQL Server 2000 (SQL SERVER 2000组件),1.1安装SQL Server 2000,一、SQL SERVER 发展历史 1987、1989、1993、1995、1996、1998、2000二、SQL SERVER 2000的版本7个: 企业版、 标准版、 个人版、 开发版、桌面版、Window CE版、企业评估版,安装SQL Server 2000,三、软硬件平台 1、硬件
2、平台主机内存硬盘 2、软件平台四、安装SQL SERVER 2000 1、安装前的装备 2、安装步骤 3、卸载SQL SERVER 2000,1.2管理SQL Server 2000,一、服务管理器 二、企业管理器 三、查询分析器 四、导入和导出数据 五、服务器网络实用工具 六、客户端网络实用工具,复习,小结习题实训,第二章 管理数据库,数据库的构成Transact SQL建立数据库发布和订阅数据库,2.1 数据库的构成,一、数据库基础知识 1、发展阶段 人工管理阶段-文件管理阶段-数据库管理阶段2、概念 数据库(DB) 数据库管理系统(DBMS) 数据库系统(DBS) 数据库管理员(DBA)
3、,数据库 数据库是表和对象的集合,诸如:视图,索引,存储过程和触发器。 系统数据库 主数据库记录所有服务器特定的配置信息,包括授权用户、数据库、系统配置设置,及远程服务器 tempdb Database-是用作临时的存储区域的一个临时的数据库 model Database-作为新的数据库一种模板或原型 msdb Database-支持SQL Server Agent,系统表是SQL Server用来存储关于配置,安全和对象信息的一组表。SQL Server在系统表格的帮助下管理每一个数据库,系统表格包含所有的系统信息。,数据库中的对象,表存放数据 视图虚拟的表 索引指向表中数据的指针(提高检索
4、速度) 存储过程函数或程序,是存储在数据库中的一组相关的SQL语句 触发器三种:INSERT(插入)、DELETE(删除)、UPDATE(更新),数据库文件和文件组,文件:数据库的三类文件是: Primary(*.MDF) Secondary(*.NDF) Transaction Log (*.LDF) 文件组:是文件的集合 文件和文件组不可被一个以上的数据库使用 一个文件只能是一个文件组的成员,2.2 Transact SQL,SQL概念 结构化查询语言 应用于关系数据库Transact SQL的组成 组成(4个) A、数据定义语言(DDL) (create, alter, drop) B、
5、数据操纵语言(DML) (insert, update, delete) C、数据控制语言(DCL) (commit,rollback) D、附加语言元素,2.3 建立数据库,创建数据库 语法CREATE DATABASE 数据名 ON PRIMARY NAME = 数据文件逻辑文件名, FILENAME = 数据文件物理文件名 , SIZE =数据文件大小 , MAXSIZE =数据文件最大尺寸 , FILEGROWTH =数据文件增加量 ,.n ,LOG ON NAME = 逻辑文件名, FILENAME = 事务日志文件物理文件名 , SIZE =事务日志文件大小 , MAXSIZE =
6、事务日志文件最大尺寸 , FILEGROWTH =事务日志文件增加量 ,.n FOR RESTORE,举例 D:Example下创建student数据库 CREATE DATABASE student ON ( NAME = student_data, FILENAME = D:Examplestudent.mdf , SIZE =10MB, MAXSIZE =50MB, FILEGROWTH =2MB ) LOG ON (NAME = student_log, FILENAME = D:Examplestudent.ldf , SIZE =5MB , MAXSIZE =30MB, FILEG
7、ROWTH =1MB),修改数据库,ALTER DATABASE 数据库名 ADD File,nTO FILEGROUP |ADD LOG FILE,n |REMOVE FILE |ADD FILEGROUP |REMOVE FILEGROUP |MODIFY FILE |MODIFY FILEGROUP := ( NAME = 数据文件逻辑文件名, FILENAME = 数据文件物理文件名 , SIZE =数据文件大小 , MAXSIZE =数据文件最大尺寸 , FILEGROWTH =数据文件增加量 ),查看数据库关于数据库的信息象拥有者,大小,创建日期,和状态可由下例来查看:sp_hel
8、pdb 数据库名,重命名数据库数据库的名字可以用sp_renamedb命令改变。数据库在重命名时不应该使用,它应该设置为单用户模式。语法sp_renamedb 旧数据库名, 新数据库名,删除数据库DROP DATABASE语句用来删除数据库 语法DROP DATABASE 数据库名,2.5 发布和订阅数据库,使用向导配置发布和分发 创建发布 订阅发布,复习,小结习题实训,第三章 管理表,关系模型建立表结构编辑数据数据库规范设计,3.1 关系模型,数据描述 术语实体(Entity):客观存在的、可以相互区别的事物实体集(Entity Set):性质相同的同类实体的集合属性(Attribute):
9、试题的每一个属性实体标识符(Identifier):能唯一标识试题的属性或属性集 逻辑设计字段(Field):实体属性的命名单位记录(Record):字段的有序集合文件(File):同一记录的集合关键码(Key):能唯一标识文件中每个记录的字段或字段集 物理实体,数据模型,一、定义概念数据模型逻辑数据模型二、实体联系模型(ER模型) A、一元联系 B、二元联系一对一联系(1:1)一对多联系(1:N)多对多联系(M:N) C、三元联系,E-R图,E-R图提供了表示实体型、属性和联系的方法。 实体型:用矩形表示,矩形框内写明实体名。 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。 联系:
10、用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。 如图1-1所示就是一个班级的概念模型的E-R图。,三、结构数据模型 A、层次模型用树型(层次)结构表示的实体及实体间联系的数据模型.B、网状模型用有向图结构表示实体及实体间联系的数据模型.C、关系模型用二维表格表达实体集.,层次数据模型,层次模型是数据库系统中最早出现的数据模型,它用树形结构表示各类实体以及实体间的联系。层次模型数据库系统的典型代表是IBM公司的IMS(Information Management Systems)数据库管理系统,这是一个曾经广泛使用的数据
11、库管理系统。 在数据库中,对满足以下两个条件的数据模型称为层次模型。 (1)有且仅有一个节点无双亲,这个节点称为“根节点”。 (2)其他节点有且仅有一个双亲。,若用图来表示,层次模型是一棵倒立的树。节点层次(Level)从根开始定义,根为第一层,根的孩子称为第二层,根称为其孩子的双亲,同一双亲的孩子称为兄弟。 图1-2给出了一个系的层次模型。,图1-2 简单的层次模型 层次模型对具有一对多的层次关系的描述非常自然、直观、容易理解,这是层次数据库的突出优点。,网状数据模型,在数据库中,对满足以下两个条件的数据模型称为网状模型: (1)允许一个以上的节点无双亲。 (2)一个节点可以有多于一个的双亲
12、。 网状数据模型的典型代表是DBTG系统,也称CODASYL系统,它是20世纪70年代数据系统语言研究会CODASYL(Conference On Data Systems Language)下属的数据库任务组(Data Base Task Group,简称DBTG)提出的一个系统方案。若用图表示,网状模型是一个网络。 图1-3给出了一个抽象的简单的网状模型。,自然界中实体型间的联系更多的是非层次关系,用层次模型表示非树形结构是很不直接的,网状模型则可以克服这一弊病。,关系模型,关系模型是目前最重要的一种模型。美国IBM公司的研究员E.F.Codd于1970年发表题为“大型共享系统的关系数据库
13、的关系模型”的论文,文中首次提出了数据库系统的关系模型。20世纪80年代以来,计算机厂商新推出的数据库管理系统(DBMS)几乎都支持关系模型,非关系系统的产品也大都加上了关系接口。数据库领域当前的研究工作都是以关系方法为基础的。,1关系数据模型的数据结构 一个关系模型的逻辑结构是一张二维表,它由行和列组成。每一行称为一个元组,每一列称为一个字段。2关系数据模型的数据操纵与完整性约束 关系数据模型的操纵主要包括查询、插入、删除和更新数据。这些操作必须满足关系的完整性约束条件。关系的完整性约束条件包括三大类:实体完整性、参照完整性和用户定义的完整性。其具体含义将在后面介绍。3关系数据模型的存储结构
14、 在关系数据模型中,实体及实体间的联系都用表来表示。在数据库的物理组织中,表以文件形式存储,每一个表通常对应一种文件结构。,4关系数据模型的优缺点 关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。 关系模型的概念单一,无论实体还是实体之间的联系都用关系来表示,对数据的检索结果也是关系(即表),所以结构简单、清晰,用户易懂易用。 关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。所以关系数据模型诞生以后发展迅速,深受用户的喜爱。 当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路径对用户透明,查询效率往往不
15、如非关系数据模型。因此,为了提高性能,必须对用户的查询请求进行优化,这增加了开发数据库管理系统的负担。,关系模型,1、关系模型、关系模式、关系关系模型:关系模式:关系: 2、关键码与关系模式超键(超码):候选键:主键:外键: 3、数据完整性规则实体完整性规则:参照完整性规则:用户自定义完整性规则:,表2-3 人事记录表,在用户看来,一个关系模型的逻辑结构是一张二维表,它由行和列组成。例如,表2-3中的人事记录就是一个关系模型,它涉及下列概念。,关系:一个关系对应一张二维表,表2-3中的这张人事记录表就是一个关系。 元组:图中的一行即为一个元组,若表2-3有20行,就有20个元组。 属性:图中的
16、一列即为一个属性,表2-3有5列,对应5个属性(学号、姓名、性别、年龄和所在系)。 码(key):表中的某个属性(组),它可以惟一确定一个元组,则称该属性组为“侯选码”。若一个关系有多个候选码,则选定其中一个为主码。如表2-3中的学号,是该学生关系的码。 域(domain):属性的取值范围,如表2-3中学生年龄的域应是(1628),性别的域是(男,女),系别的域是一个学校所有系名的集合。分量:元组中的一个属性值。关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,属性n)例如,上面的关系可描述为:学生(学号,姓名,性别,年龄,所在系),3.2 建立表结构,1、表的概念关系型数据库中用语
17、存储数据的数据对象。两类:系统表、用户表 2、数据类型 3、创建表 4、修改表 5、删除表,数据类型,系统数据类型自定义数据类型 创建表查看表格删除表,系统数据类型,1. 整型数据类型 2. 浮点数据类型 3. 字符数据类型 4. 日期和时间数据类型 5. 文本和图形数据类型,6. 货币数据类型 7. 位数据类型 8. 二进制数据类型 9. 特殊数据类型 10. 新增数据类型,1. 整型数据类型,整型数据类型是最常用的数据类型之一,它主要用来存储数值,可以直接进行数据运算,而不必使用函数转换。 int(integer):int(或integer)数据类型可以存储从-231(-2,147,483
18、,648)到231-1(2,147,483,647)范围之间的所有正负整数。 Smallint:可以存储从-215(-32,768)到215-1范围之间的所有正负整数 。 Tinyint:可以存储从0到255范围之间的所有正整数。,2. 浮点数据类型,浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server中采用只入不舍的方式进行存储 。 Real:可以存储正的或者负的十进制数值,最大可以有7位精确位数。 Float:可以精确到第15位小数,其范围从-1.79E+308到1.79E+308(e=2.71828183 )。 Decimal和numeric:Decimal数据类型和nu
19、meric数据类型完全相同,它们可以提供小数所需要的实际存储空间,但也有一定的限制,可以用2到17个字节来存储从-1038到1038-1之间的数值。,3. 字符数据类型,字符数据类型可以用来存储各种字母、数字符号和特殊符号。Char:其定义形式为char(n),每个字符和符号占用一个字节的存储空间。 Varchar:其定义形式为varchar(n)。用char数据类型可以存储长达255个字符的可变长度字符串 。 Nchar:其定义形式为nchar(n)。 Nvarchar:其定义形式为nvarchar(n)。,4. 日期和时间数据类型,Datetime:用于存储日期和时间的结合体 。它可以存储
20、从公元1753年1月1日零时起到公元9999年12月31日23时59分59秒之间的所有日期和时间 。 Smalldatetime:与datetime数据类型类似,但其日期时间范围较小,它存储从1900年1月1日到2079年6月6日内的日期,5. 文本和图形数据类型,Text:用于存储大量文本数据,其容量理论上为1到231-1(2,147,483,647)个字节,但实际应用时要根据硬盘的存储空间而定。Ntext:与text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。 Image:用于存储照片、目录图片或者图画,其理论容量为231-1(2
21、,147,483,647)个字节。,6. 货币数据类型,Money:用于存储货币值,存储在money数据类型中的数值以一个正数部分和一个小数部分存储在两个4字节的整型值中,存储范围为-922337213685477.5808到922337213685477.5808,精度为货币单位的万分之一。 Smallmoney:与money数据类型类似,但其存储的货币值范围比money数据类型小,其存储范围为-214748.3468到214748.3467。,7. 位数据类型,Bit:称为位数据类型,其数据有两种取值:0和1,长度为1字节。,8. 二进制数据类型,Binary:其定义形式为binary(n
22、),数据的存储长度是固定的,即n+4字节,当输入的二进制数据长度小于n时,余下部分填充0。Varbinary:其定义形式为varbinary(n),数据的存储长度是变化的,它为实际所输入数据的长度加上4字节。其它含义同binary。,9. 特殊数据类型,Timestamp:亦称时间戳数据类型,它提供数据库范围内的唯一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器。 Uniqueidentifier:用于存储一个16字节长的二进制数据类型,它是SQL Server根据计算机网络适配器地址和CPU时钟产生的唯一号码而生成的全局唯一标识符代码(Globally Unique Iden
23、tifier,简写为GUID )。,10. 新增数据类型,Bigint:用于存储从-263到263-1之间的所有正负整数。sql_variant:用于存储除文本、图形数据和timestamp类型数据外的其它任何合法的SQL Server数据。 table:用于存储对表或者视图处理后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。,自定义数据类型,1. 使用企业管理器(Enterprise Manager)创建用户自定义数据类型。 2. 利用系统存储过程创建用户自定义数据类型 。 系统存储过程sp_addtype为用户提供了T_SQL语句创建自定义数
24、据类型的途径,其语法形式如下: sp_addtype typename= type, phystype= system_data_type , nulltype= null_type , owner= owner_name,例:自定义一个地址数据类型。exec sp_addtype address, varchar(80), not null 其运行结果如下: (所影响的行数为 1 行)类型已添加。,删除自定义的地址数据类型。exec sp_droptype address 其运行结果如下: (所影响的行数为 1 行) (所影响的行数为 0 行)类型已除去。,表操作:创建表查看表格,创建表,S
25、QL Server 2000中,每个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,也就是可以定义1024个字段。SQL Server 2000提供了两种方法创建数据库表,第一种方法是利用企业管理器(Enterprise Manager)创建表;另一种方法是利用Transact-SQL语句中的create命令创建表。,1. 利用企业管理器创建表,在Enterprise Manager中,展开指定的服务器和数据库,打开想要创建新表的数据库,用右键单击表对象,从弹出的快捷菜单中选择新建表选项,或者在工具栏中选择图标,就会出现新建表对话框,在该对话框中,可以定义列的以下
26、属性:列名称、数据类型、长度、精度、小数位数、是否允许为空、缺省值、标识列、标识列的初始值、标识列的增量值和是否有行的标识。 然后根据提示进行设置。,2. 利用T-SQL创建表,其语法形式如下:CREATE TABLE table_name (column_name data_type identity(seed, Increment)null | not nullprimary key | uniquedefault 1,),各参数的说明如下:,table_name:用于指定新建的表的名称。 column_name:用于指定新建表的列的名称。 data_type:用于指定列的数据类型 。 I
27、DENTITY:用于指定列为标识列。 Seed:用于指定标识列的初始值。 Increment:用于指定标识列的增量值。 DEFAULT:用于指定列的缺省值。,Identity列,语法: Identity(seed,increment) Seed是初始值,默认为1. Increment(增量,步长)默认为1. 注意: 1.每张表只充许有一个identity列 2.该列必须为下列数据类型之一:Decimal(十进制)、int、smallint和tinyint 3.该列必须设置成不允许为空值,且不能有默认值.,例:创建了一个客户表,其SQL语句的程序清单如下: create table custom
28、ers (customerid int Identity(1,1) Primary key, Name varchar(20) not null, Address varchar(100), City varchar(20), Tel varchar(20) Unique, Company varchar(50), Brithday datetime, Type tinyint Default 1),例:创建goods表,Create table goods (goodsid int Identity(1,1) Primary key, name varchar(20), Descriptio
29、n varchar(200), Storage int , Supplier varchar(50), Status tinyint Default(0), Price money),SQL Server中的6种约束,主键约束(primary key constraint) 外键约束(foreign key constraint) 唯一性约束(unique constraint) 检查约束(check constraint) 缺省约束(default constraint) 是否可以为空值(null),1. 主键约束,一个表可能过一个列或多个列组合的数据来惟一标识表中的每一行,这个列或列的组合
30、就被称为表的主键. 可以来强制实体完整性. 主键约束保证表中每行唯一性,可区分 一个表上只能有一个主键. 在主键列上建立索引可以加快查询速度.,2.外键约束,外键也是由表中的一个列或多个列组成的,它是和在相关表中事先定义的具有惟一性的列一起使用的,它也可以是该表的主键外键约束是用来建立和强制两个表之间的关联,例:创建一个order表,Create table orders (orderid int Identity(1,1) Primary key, Goodsname varchar(20) Not null Foreign key(goodsname) References goods(n
31、ame) Customerid int Not null Foreign key(customerid) references customers(customerid) Quantity int Not null Constraint quantity check(quantity0), Ordersum money not null, Orderdate datetime Default (getdate(),3.惟一性约束,唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。当使用唯一性约束时,需要考虑以下几个因素: 使用唯一性约束的字段允许为空值。 一个表中
32、可以允许有多个唯一性约束。 可以把唯一性约束定义在多个字段上。 唯一性约束用于强制在指定字段上创建一个唯一性索引。缺省情况下,创建的索引类型为非聚簇索引。,4.检查性约束,一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。 一个表中可以定义多个检查约束。 每个CREATE TABLE语句中每个字段只能定义一个检查约束。 在多个字段上定义检查约束,则必须将检查约束定义为表级约束。 当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。 检查约束中不能包含子查询。,创建了一个学生信息表,其中输入性别字段值时,只能接受“W”或者“M”,并且为phonenum
33、字段创建检查约束,限制只能输入类似01080798654之类的数据,而不能随意输入其他数据。 create table student (Id char(8), name char(8), sex char(2), constraint sex check(sex in (W,M), phonenum int Constraint phonenum check (phonenum like (010)0-90-90-90-9 0-90-90-90-9),5. 缺省约束当向表中添加数据时,如果用户没有明确给出某一列的值,系统自动为该列添加的值.它也可以为空值.6.空值意味着数据尚未输入,它于0或
34、长度为零的字符串的含义不同.,查看表格,1. 查看表格的定义(exec sp_help name) 2. 查看表格中的数据 (企业管理器) 3. 查看表格与其它数据库对象的依赖关系 (exec sp_depends name) 4. 利用系统存储过程(exec Sp_help)查看表的信息 5.查看表上的约束(sp_helpconstraint name) 6.查看表的行数及存储空间(sp_spaceused name),修改表,1.用企业管理器修改. 2.利用T-SQL语句修改(1)创建主键约束(2)创建唯一性约束(3)创建外键约束(4)创建检查性约束,利用企业管理器 利用T-SQL语言 A
35、LTER TABLE table_name ALTER COLUMN column_name new_data_type NULL | NOT NULL Drop column column_name ,在修改列时下列类型的列不能被修改: 1.数据类型为text,image,ntext或是timestamp 2.计算列或是用于计算的列; 3.被复制的列; 4.用在索引中的列,但可以增加varchar,nvarchar的列长; 5.用在primary key,foreign key, check或unique约束中的列(用在check或unique约束的可变长度列的长度仍然允许更改).,例1:新
36、增一列 Create table ceac5 (studentid int) Alter table ceac5 Add name varchar(20) null例2:删除一列 Alter table ceac4 Drop column name,修改表的约束,添加/删除约束(Add/drop constraint ) 1.添加主键约束alter table table_name add constraint pk_name primary key(column_name) 此列上不能有重复的数据,不能有空值. 2.删除主键约束 alter table table_name Drop con
37、straint Pk_name,使用with nocheck子句用此语句可以指定在表中已经存在的行上不使用新增加的检查/外键/或惟一性约束也就是说它只对以后改变或插入的行发生作用,而不检查已存在的行. 例: Alter table goods with nocheck use 学生信息 Alter table goods with nocheck Add constraint ck_storage check(storage0),插入数据,INSERT INTO table_name | view_name ( column_list ) VALUES( DEFAULT | NULL | ex
38、pression ,.n ) ,添加数据到一行中的所有列: 例: Instert into orders Values(hub,4,60,20004/9/15,5400) 不能对identity列,计算列进行赋值也不能违反完整性约束.(如引用外健) 否则它就会提示出错.,使约束无效或重新有效 例: Alter table customers Add emailaddress varchar(50) null Constraint ck_ea check(emailaddress like %) 使其无效:alter table customersnocheck constraint ck_ea
39、 使其有效: alter table customerscheck constraint ck_ea,添加数据到一行中的部分列 例: Insert into Goods (name,storage,price) Values(keyboard,3000,15.00) 在添加部分列时应确认没有提供数据的列应为identity列,timestamp列,允许为null列否则会报错.,修改数据,1.使用update语句 例1: Update goods Set price=price*1.1 例2:满足条件的被修改 Update goods Set price=price*1.1 Where name
40、=battery,删除记录语句 Delete from table_name where del_condition 例: Delete From orders Where name=mouse,select查询语句select all | distinct , , from , , where group by having order by asc | desc ,3.3 编辑数据,select 语句的基本格式是由select 子句,from子句和where子句组成的查询块 整个select语句的含义是:根据where子句的筛选条件表达式,从from子句指定的表中找出满足条件的记录,再按s
41、elect子句中指定的字段次序,选出记录中的字段值构造一个显示结果表 如果有group子句,则将结果按分组表达式的值进行分组,该值相等的记录为一个组 如果group子句带having短语,则只有满足指定条件的组才会输出 如果有order子句,则显示结果表还要按字段值的升序(asc)或降序(desc)进行排序,基于单表的查询(重点) 查询指定的字段select子句后的各个字段的先后顺序可以与原表中的顺序不一致,但是在结果表中,字段是按照select子句的各个字段的顺序显示.,通配符“”的使用通配符” * “显示所有的字段select *from table_name,基于字段的表达式select
42、 后面可以是字段表达式.字段表达式不仅可以是算术表达式,还可以是字符串常量,函数等.,使用distinct短语去掉重复的记录distinct短语能够从结果表中去掉重复的记录.,用where 子句过滤记录关系运算符逻辑运算符特殊运算符,逻辑运算符号,关系运算符号,特殊运算符号,使用 order by 子句对查询结果排序在select语句中,使用order by 子句可以对查询结果,按照一个或多个字段进行升序(asc)或降序(desc)的排列.,SQL的集合函数,使用group by 对查询结果进行分组利用SQL的group by子句,能够快速而简便地将查询结果表按照指定的字段进行分组,值相等的记
43、录分为一组。,利用having筛选结果表在SQL中,使用having子句指定所筛选的条件。where子句与having子句的区别在于作用对象不同:where子句的作用对象是表.select语句是从where子句指定的表中,筛选出满足条件的记录.having子句的作用对象是group by 子句所产生的组. having 子句是从组中选择出满足筛选条件的记录.,基于多表的查询(难点) 在关系型数据库中,将一个查询同时涉及两个以上的表,称为连接查询. 连接查询的种类:自然连接自身连接复合连接,自然连接若在等值连接中,把结果表中重复的字段去掉,则这样的等值连接称为自然连接。,自身连接在特定的问题中,
44、连接操作不是在两个不相同的表中进行,而是自己和自己进行连接,这种连接称为自身连接。,复合条件连接在where子句中,若有多个连接条件,则称为复合条件连接。,嵌套查询(难点) 在SQL语言中,一个select-from-where查询块,可以嵌套在另一个查询块的where子句中,称这种查询为嵌套查询.,嵌套查询可以用多个简单查询构成十分复杂的查询,从而增强SQL的查询能力.外层查询:最上层的查询块称为外层查询或者父查询. 子查询:where子句中的查询块称为内层查询或者子查询. 结构化的含义:SQL中的”结构化”的真正含义,就体现在以层层嵌套的方法来构造查询语句. 嵌套查询的求解是由内向外处理.
45、即先处理内层查询,再处理外层查询.,带有in的子查询带有any 或 all 的子查询,带有exists的子查询处理过程:取出外层查询中表的第1条记录,根据它与内层查询相关的字段值处理内层查询.若where子句返回值为真,则取此记录放入结果表中.然后再取表的下一条记录;重复这一过程,直至外层表全部检查完为止.,union查询union允许将两个或多个结果表进行逻辑联合,列出在各个结果表中返回的记录.union就是集合中的”集合并”运算.union操作的各个结果表的字段个数必须相同,对应的数据类型也必须相同. 使用union将结果表进行逻辑联合时,SQL Server会自动将重复的记录去掉.,In
46、to子句Select into From where ,如果与union语句组合,则into 子句必须出现在第一个select 列表后面.例:Select * Into 学生分类表 From 学生表 Where 所在院系=计算机 Union Select * From 学生表 Where 所在院系=国际贸易,临时表,临时表很像永久表,是存储在tempdb数据库中,不用时会被自动删除 临时表有两类 :局部临时表:只能被当前用户使用. 全局临时表:当它创建后能被所有用户看到临时表是用来存储那些永久存储前还要加以处理的数据,数据更新,在SQL中,数据更新共有3种操作:插入记录(insert)删除记录
47、(delete)修改记录(update),插入子查询结果Insert , Select (,) From where ,带子查询的删除语句 例:delete From 成绩表 Where 电子学=(select 所在院系from 学生表where 学号=成绩表.学号) Select * From 成绩表,带子查询的修改语句 例:update 成绩表 Set 成绩=成绩+8 Where 电子学=(select 所在院系from 学生表where 学号=成绩表.学号)Select *From 成绩表,3.4 数据库规范设计,关系模式的规范化问题函数依赖属性集的闭包关系模式的范式,关系模式的规范化问
48、题,一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但规范化程度过低的关系不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。,1规范化的方法,(1)对1NF关系进行分解,消除原关系中非主属性对码的部分函数依赖,将lNF关系转换为若干个2NF关系。 (2)对2NF关系进行分解,消除原关系中非主属性对码的传递函数依赖,从而产生一组3NF关系。,例如,对于关系模式SLC(S#,SDEPT,SLOC,C#
49、,GRADE),码是(S#,C#),其最小函数依赖为:S#SDEPT,SDEPTSLOC,(S#,C#)GRADE。存在部分函数依赖(S#,C#)SDEPT,传递函数依赖S# SLOC。因此SLC1NF,现把它进行规范化。 (1)SLC分解为SC(S#,C#,GRADE)和SD(S#,SDEPT,SLOC),消除原关系中非主属性对码的部分函数依赖,将lNF关系转换为2个2NF关系。 SC(S#,C#,GRADE)2NF,并且不存在非主属性对码的传递函数依赖,SC3NF。 传递 SL(S#,SDEPT,SLOC)2NF,但存在传递函数依赖S# SLOC,SL3NF。 (2)SD(S#,SDEPT,SLOC)分解为SD(S#,SDEPT)和DL(SDEPT,SLOC),消除原关系中非主属性对码的传递函数依赖,从而把一个2NF变成2个3NF关系。 这样,就把一个规范化程度较低的关系转化成为3个规范化程度较高的关系。,