资源预览内容
第1页 / 共137页
第2页 / 共137页
第3页 / 共137页
第4页 / 共137页
第5页 / 共137页
第6页 / 共137页
第7页 / 共137页
第8页 / 共137页
第9页 / 共137页
第10页 / 共137页
亲,该文档总共137页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
孙学斌数据库应用技术孙学斌数据库应用技术第第3 3章章 sql sql3.1 SQL语语言的基本概念与特点言的基本概念与特点3.2 了解了解SQL Server 20003.3 创创建与使用数据建与使用数据库库3.4 创创建与使用数据表建与使用数据表3.5 创创建与使用索引建与使用索引3.6 数据数据查询查询3.7 数据更新数据更新3.8 视图视图3.9 数据控制数据控制3.2.1 SQL Server 2000的主要的主要组件件 组 件件 功功 能能企企业管理器管理器管理所有的数据管理所有的数据库系系统工作和服工作和服务器工作器工作 查询分析器分析器执行行Transact-SQL命令等命令等SQL脚本程序脚本程序 服服务管理器管理器启启动、暂停或停止停或停止SQL Server的四种服的四种服务 客客户端网端网络实用工具用工具配置客配置客户端的端的连接、接、测定网定网络库的版本信息以及的版本信息以及设定本地数据定本地数据库的相关的相关选项 服服务器网器网络实用工具用工具配置服配置服务器端的器端的连接、接、测定网定网络库的版本信息的版本信息 导入和入和导出数据出数据在在OLE DB数据源之数据源之间复制数据复制数据 在在IIS中配置中配置SQL XML支持支持在运行在运行IIS的的计算机上定算机上定义、注册虚、注册虚拟目目录,并在,并在虚虚拟目目录和和SQL Server实例之例之间创建关建关联 事件探事件探查器器监视SQL Server 数据数据库系系统引擎事件引擎事件 联机机丛书查询信息信息 3.2.2 企企业管理器管理器 企企业管管理理器器是是用用于于管管理理企企业级SQL SQL ServerServer或或者者SQL SQL ServerServer对象象的的方方便便而而实用用的的图形形化化工工具具,它它是是SQL SQL ServerServer工工具具中中最最重重要要的的一一个个,通通过它它可可以以对SQL SQL ServerServer数数据据库进行管理和操作。行管理和操作。 在在【开始开始】菜菜单的的Microsoft SQL ServerMicrosoft SQL Server程序程序组中中选择【企企业管理器管理器】即可启即可启动企企业管理器,操作界面如管理器,操作界面如图4-4-1919所示。所示。 如如图4-19所示,企所示,企业管理器窗口被分管理器窗口被分为左右两部分,左右两部分,窗口左窗口左边显示了一个示了一个树型目型目录,该目目录包括了在企包括了在企业管理管理器中注册了的所有器中注册了的所有SQL Server服服务器,以及每个服器,以及每个服务器所器所能提供的服能提供的服务,在,在树型目型目录中中选择一个目一个目录项,窗口右,窗口右边的部分就会的部分就会显示示该目目录项的具体内容,比如,若在的具体内容,比如,若在图4-19所示的企所示的企业管理器窗口中,在管理器窗口中,在树型目型目录中中选择MyServer服服务器中的器中的pubs数据数据库,窗口右,窗口右边部分部分则显示出示出该数据数据库的的详细信息。信息。 图4-19 4-19 企企业管理器管理器 企企业管管理理器器的的功功能能非非常常强大大,可可以以用用它它来来完完成成以以下下工工作:作: 注册服注册服务器器 配置本地和配置本地和远程服程服务器器 管理登管理登录、用、用户、权限限 创建脚本建脚本 管理管理备份份设备和数据和数据库 备份数据份数据库和事和事务日志日志 管管理理表表、视图、存存储过程程、触触发器器、索索引引、用用户定定义数据数据类型等数据型等数据库对象象 创建全文索引、数据建全文索引、数据库图表表 引入和引入和导出数据出数据 数据数据转换 多种网多种网页发布和管理布和管理3.2.3 查询分析器分析器 查询分分析析器器是是一一个个可可以以交交互互执行行SQLSQL语句句和和脚脚本本的的图形形工工具具,它它的的主主要要功功能能是是编辑、编译和和执行行T-SQLT-SQL语句,并句,并显示命令示命令结果。果。 在在【开开始始】菜菜单的的Microsoft Microsoft SQL SQL ServerServer程程序序组中中选择【查询分析器分析器】即可启即可启动,如,如图4-204-20所示。所示。 在在图4-204-20的的SQL SQL ServerServer下下拉拉列列表表框框中中选择要要登登录的的SQL SQL ServerServer服服务器器,如如果果该列列表表中中没没有有服服务器器,可可以以单击 按按钮,在,在对话框中框中查找服找服务器。器。 在在图4-204-20的的窗窗口口中中选择身身份份验证方方式式,如如果果必必要要的的话输入入用用户名名和和口口令令,选择【确确定定】按按钮,如如果果用用户合合法法,就就可可以以成成功功地地连接接到到选择的的数数据据库。显示示如如图4-214-21所示的所示的查询分析器主窗口。分析器主窗口。 在在图4-214-21所所示示的的查询分分析析器器主主窗窗口口的的左左部部为对象象浏览器器,这是是SQL SQL Server Server 20002000的的新新功功能能,利利用用对象象浏览器器可可以以浏览当当前前服服务器器的的所所有有数数据据库对象象,单击工工具具栏上上 的按的按钮可以打开或关可以打开或关闭对象象浏览器。器。图4-20 查询分析器登录界面 图4-214-21所所示示的的查询分分析析器器主主窗窗口口的的右右部部为查询窗窗口口,在在查询窗窗口口中中用用户可可以以输入入SQLSQL语句句,并并按按F5F5键,或或单击工工具具栏上上的的执行行 按按钮将将其其送送到到服服务器器执行行,执行行的的结果果将将显示示在在输出出窗窗口口中中。用用户也也可可以以打打开开一一个个含含有有SQLSQL语句句的的文文件件来来执行行,执行的行的结果同果同样显示在示在输出窗口中。出窗口中。 在在查询分分析析器器中中,也也可可控控制制查询结果果的的显示示方方式式,T-SQLT-SQL语句句的的执行行结果果可可以以以以文文本本方方式式、表表格格方方式式显示示,还可可以以保保存存到到文文件件。切切换结果果显示示方方式式,可可以以单击工工具具栏上上的的 按按钮,并并在在下拉菜下拉菜单中中选择一种一种显示示结果的方式,如果的方式,如图4-224-22所示。所示。 查询分分析析器器是是一一个个真真正正的的分分析析工工具具,它它不不仅能能执行行T-SQLT-SQL语句句,还能能对一一个个查询语句句的的执行行进行行分分析析,给出出查询执行行计划划,为查询优化提供直化提供直观的帮助。的帮助。 图4-21 4-21 查询分分析析器器主窗口主窗口 图4-22 选择结果显示方式3.3 创建与使用数据建与使用数据库 数据文件数据文件1 事务日志文件事务日志文件 数据库数据库数据文件数据文件n 存放数据库数据和数据库对象的文件存放数据库数据和数据库对象的文件 主要数据文件主要数据文件(.mdf ) +次要数据文件次要数据文件(.ndf ) 只有一只有一个个可有多个可有多个记录数据库更新情况,扩展名为记录数据库更新情况,扩展名为.ldf 当数据库破坏时可以用事务日志还原数据当数据库破坏时可以用事务日志还原数据库内容库内容 文件组文件组文件组(文件组(File Group)是将多个数据文件集合起来形)是将多个数据文件集合起来形成的一个整体成的一个整体 主要文件组主要文件组+次要文件组次要文件组 一个数据文件只能存在于一个文件组中,一个文件组一个数据文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用也只能被一个数据库使用 日志文件不分组,它不能属于任何文件组日志文件不分组,它不能属于任何文件组 3.3.1 SQL Server的系的系统数据数据库 Model Msdb Tempdb系系统统默默认认数数据据库库系统信息系统信息 :磁盘空间磁盘空间 ;文件分配和使用;文件分配和使用 ;系统级的配置参;系统级的配置参数;登录账号信息数;登录账号信息 ;SQL Server初始化信息;初始化信息; 系统中其他系统数据库和用户数据库的相关信息系统中其他系统数据库和用户数据库的相关信息 Model数据库存储了所有用户数据库和数据库存储了所有用户数据库和Tempdb数数据库的创建模板据库的创建模板 通过更改通过更改Model数据库的设置可以大大简化数据数据库的设置可以大大简化数据库及其对象的创建设置工作库及其对象的创建设置工作 存储计划信息以及与备份和还原相关的信息存储计划信息以及与备份和还原相关的信息 Tempdb数据库用作系统的数据库用作系统的临时存储空间临时存储空间 存储临时表存储临时表,临时存储过程和全局变量值临时存储过程和全局变量值 ,创建临,创建临时表时表 ,存储用户利用游标说明所筛选出来的数据,存储用户利用游标说明所筛选出来的数据 Master 3.3.2 SQL Server的的实例数据例数据库 重建实例数据库重建实例数据库安装目录安装目录MSSQLInstall中:中:Instpubs.sqlInstnwnd.sql实实例例数数据据库库 pubs Northwind 虚构的图书出版公司的基本情况虚构的图书出版公司的基本情况 包含了一个公司的销售数据包含了一个公司的销售数据 3.3.3 创创建用建用户户数据数据库库 用用Enterprise Manager 创建数据库创建数据库 使用企使用企业管理器管理器创建数据建数据库例:以默例:以默认形式形式创建建mydbmydb数据数据库,步,步骤如下:如下: (1)(1)启启动企企业管管理理器器,连接接服服务器器,展展开开其其树形形目目录,用用鼠鼠标右右键单击【数数据据库】文文件件夹,在在弹出出的的快快捷捷菜菜单中中,单击【新建数据新建数据库】打开打开图5-25-2所的所的对话框。框。 (2)(2)在在【数数据据库属属性性】对话框框的的【名名称称】文文本本框框内内输入入数数据据库名名( (逻辑名名) )。例例如如MyDBMyDB,这个个对话框框自自动以以该数数据据库名名命命名名,系系统默默认用用该数数据据库名名与与“_data”_data”串串的的连接接命命名名数数据据文文件件(见图5-35-3),该数数据据库名名与与“_log”_log”串串的的连接接命命名名日日志志文文件件(见图5-45-4)。这两两个个不不同同选项卡卡界界面面内内的的设置置,分分别为数数据据主主文文件件和和日日志志文文件件的的名名称称、存存储位位置置、初初始始大大小小、所所属属文文件件组( (默默认为主主文文件件组 PRIMARY)PRIMARY)、文文件件是是否否自自动增增长、增增长的的方式和文件大小的限制等。方式和文件大小的限制等。 (3)(3)单击【确确定定】按按钮,数数据据库就就创建建好好了了,在在默默认位位置置、采采用默用默认设置置创建了一个名建了一个名为MyDBMyDB的数据的数据库。 图5-2 数据库属性对话框 图5-3 5-3 数据文件数据文件选项卡卡界面界面 图5-4 事务日志文件选项卡界面用用SQL命令创建数据库命令创建数据库 CREATE DATABASE database_name ON ,.n , ,.n LOG ON ,.n COLLATE collation_name FOR LOAD | FOR ATTACH 其中,其中,(文件格式)语法格式如下:(文件格式)语法格式如下: (NAME=logical_file_name, FILENAME= os_file_name ,SIZE = size ,MAXSIZE=max_size| UNLIMITED ,FILEGROWTH=growth_increment)例例3-1 用用SQL命令创建命令创建一个教学数据库一个教学数据库Teach,数据文件的逻辑名称,数据文件的逻辑名称为为Teach_Data,数据文,数据文件物理地存放在件物理地存放在D:盘的盘的根目录下,文件名为根目录下,文件名为TeachData.mdf,数据,数据文件的初始存储空间大文件的初始存储空间大小为小为10MB,最大存储,最大存储空间为空间为50MB,存储空,存储空间自动增长量为间自动增长量为5MB;日志文件的逻辑名称为日志文件的逻辑名称为Teach_Log,日志文件,日志文件物理地存放在物理地存放在D:盘的:盘的根目录下,文件名为根目录下,文件名为TeachLog.ldf,初始存,初始存储空间大小为储空间大小为10MB,最大存储空间为最大存储空间为25MB,存储空间自动增长量,存储空间自动增长量为为5MB。 CREATE DATABASE TeachON(NAME=Teach_Data,FILENAME=D:TeachData.mdf,SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOG ON(NAME=Teach_Log,FILENAME=D:TeachLog.ldf,SIZE=5,MAXSIZE=25,FILEGROWTH=5) 3.3.4 修改用修改用户户数据数据库库 用用Enterprise Manager修改数据库修改数据库 11使用企使用企业管理器修改数据管理器修改数据库步步骤如下:如下: (1)(1)启启动企企业管管理理器器,连接接服服务器器,展展开开其其树形形目目录,展展开开【数数据据库】文文件件夹,用用鼠鼠标右右键单击要要修修改改的的数数据据库名名,例例如如exampledb1exampledb1,在在弹出出的的快快捷捷菜菜单中中,单击【属属性性】命命令令,则弹出如出如图5-75-7所示的所示的对话框。框。 (2)(2)在在exampledb1exampledb1属属性性对话框框【数数据据文文件件】选项卡卡画画面面中中,可可以以修修改改数数据据库的的主主文文件件组和和用用户定定义文文件件组中中各各数数据据文文件件的的信信息息,包包括括逻辑名名、物物理理文文件件名名、初初始始长度度、所所属属文文件件组及及自自动增增长的限制等。的限制等。 (3)(3)单击【事事务日日志志】选项卡卡,在在这个个选项卡卡画画面面中中,用用户可可以以修修改改数数据据库的的日日志志文文件件的的信信息息,包包括括逻辑名名、物物理理文文件件名名、初始初始长度及自度及自动增增长的限制等。的限制等。 (4)(4)单击【文文件件组】、【选项】、【权限限】等等选项卡卡,可可以以修修改数据改数据库的文件的文件组、数据、数据库选项、数据、数据库访问权限等内容。限等内容。图5-7 5-7 数据数据库属性属性对话框框 3.3.4 修改用修改用户户数据数据库库 用用SQL命令修改数据库命令修改数据库 ALTER DATABASE database_name ADD FILE ,.n TO FILEGROUP filegroup_name| ADD LOG FILE ,.n| REMOVE FILE logical_file_name WITH DELETE| ADD FILEGROUP filegroup_name| REMOVE FILEGROUP filegroup_name| MODIFY FILE | MODIFY NAME = new_dbname| MODIFY FILEGROUP filegroup_namefilegroup_property | NAME = new_filegroup_name | SET ,.n WITH | COLLATE 例例3-2 修改修改Northwind数据库中的数据库中的Northwind文件增容方式为一次增加文件增容方式为一次增加2MB。 ALTER DATABASE NorthwindMODIFY FILE(NAME = Northwind, FILEGROWTH = 2mb ) 3.3.5 删删除用除用户户数据数据库库 用用Enterprise Manager删除数据库删除数据库 用用SQL命令删除数据库命令删除数据库 DROP DATABASE database_name ,.n 例例3-3 删除数据库删除数据库Teach。DROP DATABASE Teach 3.3.6 查查看数据看数据库库信息信息 用用Enterprise Manager查看数据库信息查看数据库信息用系统存储过程显示数据库信息用系统存储过程显示数据库信息 用系统存储过程显示数据库结构用系统存储过程显示数据库结构 用系统存储过程显示文件信息用系统存储过程显示文件信息 用系统存储过程显示文件组信息用系统存储过程显示文件组信息 Sp_helpdb dbname= nameSp_helpfile filename = name Sp_helpfilegroup filegroupname = nameEXEC Sp_helpdb NorthwindEXEC Sp_helpfileEXEC Sp_helpfilegroup 3.4 创创建与使用数据表建与使用数据表 3.4.1 数据数据类类型型 整数数据整数数据 精确数值精确数值 近似浮点数值近似浮点数值 日期时间数据日期时间数据 bigint,int,smallint,tinyint numeric和和decimal float和和real datetime与与smalldatetime 字符串数据字符串数据 Unicode字符串数据字符串数据 二进制数据二进制数据 货币数据货币数据 char、varchar、textnchar、nvarchar与与ntextbinary、varbinary、image money与与smallmoney 标记数据标记数据 timestamp和和uniqueidentifier 3.4.2 创创建数据表建数据表 用用Enterprise Manager创建数据表创建数据表 相关属性定义相关属性定义“字段名字段名” “数据类型数据类型” 字段的字段的“长度长度”、“精度精度”和和“小数位数小数位数” “允许空允许空” “默认值默认值” 同一表中不许有重名字段同一表中不许有重名字段 系统默认为系统默认为NULL5.2.2 5.2.2 创建表创建表使用企使用企业管理器管理器创建表建表 利用企利用企业管理器提供的管理器提供的图形界面来形界面来创建表,步建表,步骤如下:如下: (1)(1)在在树形形目目录中中展展开开【服服务器器组】【服服务器器】【数数据据库】【MyDbMyDb】。 (2)(2)选择【表表】,单击鼠鼠标右右键,在在弹出出的的快快捷捷菜菜单中中选择【新建表新建表.】命令,打开命令,打开设计表表对话框。框。 (3)(3)如如图5-105-10所所示示,设计表表对话框框的的上上半半部部分分有有一一个个表表格格,在在这个个表表格格中中输入入列列的的列列名名、数数据据类型型、长度度(有有的的数数据据类型型不不需需要要指指定定长度度,如如datetimedatetime类型型的的长度度为固固定定值8 8)、是是否否可可以以为空空,在在允允许空空域域中中单击鼠鼠标左左键,可可以以切切换是是否否允允许为空空值的的状状态,打打勾勾说明明允允许为空空值,空空白白说明明不不允允许为空空值,默,默认状状态是允是允许为空空值的。的。 (4) (4) 图5-105-10所所示示的的设计表表对话框框的的下下半半部部分分是是特特定定列列的的详细属性,包括是否是属性,包括是否是标识列、是否使用默列、是否使用默认值等。等。 (5)(5)用用图5-105-10所示的方法逐个定所示的方法逐个定义好表中的列。好表中的列。 (6)(6)设置置主主键约束束:选中中要要作作为主主键的的列列,单击工工具具条条上上的的【设置置主主键】按按钮,主主键列列的的前前上上方方将将显示示钥匙匙标记,如如图5-5-1111所示。所示。 (7)(7)鼠鼠标右右键单击表表中中的的任任意意一一行行( (即即任任意意一一个个列列的的定定义) ),在在弹出出的的快快捷捷菜菜单中中选择【属属性性】命命令令,可可以以打打开开如如图5-125-12所所示示的的表表属属性性对话框框,在在该对话框框中中选择表表选项卡卡,可可以以指指定定表表的的属属性性,比比如如表表名名、所所有有者者、表表的的标识列列等等。图5-125-12中中将将表的名称表的名称设置置为ReadersReaders, 所有者所有者设置置为dbodbo。 (8)(8)在在属属性性对话框框中中选择【关关系系】选项卡卡,可可以以设置置列列上上的的外外键约束束。选择【索索引引/ /键】选项卡卡,可可以以设置置列列上上的的索索引引,以以及及主主键约束束和和惟惟一一性性约束束。选择【checkcheck约束束】选项卡卡,可可以以设置列上的置列上的检查约束。束。 (9)(9)定定义好好所所有有列列后后,单击图5-115-11工工具具栏上上的的 按按钮,表表就就创建完成了。建完成了。 图5-10 5-10 创建表建表对话框框 图5-11 5-11 将将编号号设为主主键 用用SQL命令创建数据表命令创建数据表 CREATE TABLE (,|) 例例3-4 用用SQL命令建立一个学生表命令建立一个学生表S。CREATE TABLE S( SNo CHAR(6), SN VARCHAR(8), Sex CHAR(2) DEFAULT 男男, Age INT, Dept VARCHAR(20) DEFAULT 缺省值为缺省值为“男男” 3.4.3 定定义义数据表的数据表的约约束束 正确性正确性 有效性有效性 相容性相容性 数据的完整性数据的完整性 约束(约束(Constraint)默认(默认(Default)规则(规则(Rule)触发器(触发器(Trigger)存储过程(存储过程(Stored Procedure) SQL Server的数据完整性机制的数据完整性机制 完整性约束的基本语法格式完整性约束的基本语法格式 CONSTRAINT NULL/NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK NULL/NOT NULL约束约束 NULL表示表示“不知道不知道”、“不确定不确定”或或“没有数据没有数据”的意的意思思 主键列不允许出现空值主键列不允许出现空值 CONSTRAINT NULL|NOT NULL例例3-5 建立一个建立一个S表,对表,对SNo字段进行字段进行NOT NULL约束。约束。CREATE TABLE S( SNo CHAR(6) CONSTRAINT S_Cons NOT NULL, SN VARCHAR(8), Sex CHAR(2), Age INT, Dept VARCHAR(20) 可省略约束名称可省略约束名称 :SNo CHAR(6) NOT NULL UNIQUE约束(惟一约束)约束(惟一约束) 指明基本表在某一列或多个列的组合上的取值必须惟一指明基本表在某一列或多个列的组合上的取值必须惟一在建立在建立UNIQUE约束时,需要考虑以下几个因素:约束时,需要考虑以下几个因素:使用使用UNIQUE约束的字段允许为约束的字段允许为NULL值。值。一个表中可以允许有多个一个表中可以允许有多个UNIQUE约束。约束。可以把可以把UNIQUE约束定义在多个字段上。约束定义在多个字段上。UNIQUE约束用于强制在指定字段上创建一个约束用于强制在指定字段上创建一个UNIQUE索引,索引,缺省为非聚集索引。缺省为非聚集索引。 UNIQUE用于定义列约束用于定义列约束 CONSTRAINT UNIQUE UNIQUE用于定义表约束用于定义表约束 CONSTRAINT UNIQUE(,) 例例3-6 建立一个建立一个S表,定义表,定义SN为惟一键。为惟一键。CREATE TABLE S( SNo CHAR(6), SN CHAR(8) CONSTRAINT SN_Uniq UNIQUE, Sex CHAR(2), Age INT, Dept VARCHAR(20)例例3-7 建立一个建立一个S表,定义表,定义SN+SEX为惟一键,此约为惟一键,此约束为表约束。束为表约束。CREATE TABLE S ( SNo CHAR(6), SN CHAR(8) UNIQUE, Sex CHAR(2), Age INT, Dept VARCHAR(20), CONSTRAINT S_UNIQ UNIQUE(SN, Sex) SN_Uniq可以省略可以省略 SN CHAR(8) UNIQUE PRIMARY KEY约束(主键约束)约束(主键约束) 用于定义基本表的主键,起惟一标识作用用于定义基本表的主键,起惟一标识作用PRIMARY KEY与与UNIQUE 的区别:的区别:一个基本表中只能有一个一个基本表中只能有一个PRIMARY KEY,但可多个,但可多个UNIQUE对于指定为对于指定为PRIMARY KEY的一个列或多个列的组合,其中任的一个列或多个列的组合,其中任何一个列都不能出现何一个列都不能出现NULL值,而对于值,而对于UNIQUE所约束的惟一所约束的惟一键,则允许为键,则允许为NULL 不能为同一个列或一组列既定义不能为同一个列或一组列既定义UNIQUE约束,又定义约束,又定义PRIMARY KEY约束。约束。不能为不能为NULL 不能重不能重复复 PRIMARY KEY用于定义列约束用于定义列约束 CONSTRAINT PRIMARY KEY PRIMARY KEY用于定义表约束用于定义表约束 CONSTRAINT PRIMARY KEY (,) 例例3-8 建立一个建立一个S表,定义表,定义SNo为为S的主键,建立另外一个数据表的主键,建立另外一个数据表C,定义定义CNo为为C的主键。的主键。 CREATE TABLE S( SNo CHAR(6) CONSTRAINT S_Prim PRIMARY KEY, SN CHAR(8), Sex CHAR(2), Age INT, Dept VARCHAR(20)CREATE TABLE C( CNo CHAR(5) CONSTRAINT C_Prim PRIMARY KEY, CN CHAR(20), CT INT)例例3-9 建立一个建立一个SC表,定义表,定义SNo+CNo为为SC的主键。的主键。CREATE TABLE SC( SNo CHAR(5) NOT NULL, CNo CHAR(5) NOT NULL, Score NUMERIC(4,1), CONSTRAINT SC_Prim PRIMARY KEY(SNo,CNo) FOREIGN KEY约束(外键约束)约束(外键约束)CONSTRAINT FOREIGN KEY REFERENCES (,)外部键外部键 从表从表 主键主键 主表主表 引用引用 系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的么取空值。以此保证两个表之间的连接,确保了实体的参照完整性参照完整性。例例3-10 建立一个建立一个SC表,定义表,定义SNo,CNo为为SC的外部键。的外部键。CREATE TABLE SC( SNo CHAR(6) NOT NULL CONSTRAINT S_Fore FOREIGN KEY REFERENCES S(SNo), CNo CHAR(5) NOT NULL CONSTRAINT C_Fore FOREIGN KEY REFERENCES C(CNo), Score NUMERIC(4,1), CONSTRAINT S_C_Prim PRIMARY KEY (SNo,CNo); CHECK约束约束 CHECK约束用来检查字段值所允许的范围约束用来检查字段值所允许的范围 在建立在建立CHECK约束时,需要考虑以下几个因素:约束时,需要考虑以下几个因素:一个表中可以定义多个一个表中可以定义多个CHECK约束。约束。每个字段只能定义一个每个字段只能定义一个CHECK约束。约束。在多个字段上定义的在多个字段上定义的CHECK约束必须为表约束。约束必须为表约束。当执行当执行INSERT、UNDATE语句时语句时CHECK约束将验证数据。约束将验证数据。 CONSTRAINT CHECK () 例例3-11 建立一个建立一个SC表,定义表,定义Score的取值范围为的取值范围为0100之间。之间。CREATE TABLE SC( SNo CHAR(5), CNo CHAR(5), Score NUMERIC(4,1) CONSTRAINT Score_Chk CHECK(Score=0 AND Score =100)例例3-12 建立包含完整性定义的学生表。建立包含完整性定义的学生表。CREATE TABLE S( SNo CHAR(6) CONSTRAINT S_Prim PRIMARY KEY, SN CHAR(8) CONSTRAINT SN_Cons NOT NULL, Sex CHAR(2) DEFAULT 男男, Age INT CONSTRAINT Age_Cons NOT NULL CONSTRAINT Age_Chk CHECK (Age BETWEEN 15 AND 50), Dept CHAR(10) CONSTRAINT Dept_Cons NOT NULL) 3.4.4 修改数据表修改数据表 用用Enterprise Manager 修改数据表的结构修改数据表的结构 用用SQL命令修改数据表命令修改数据表 ALTER TABLE ADD | ALTER TABLE ALTER COLUMN NULL|NOT NULL ALTER TABLE DROP CONSTRAINT ALTER TABLE DROP COLUMN 例例3-13 在在S表中增加一个班号列和住址列。表中增加一个班号列和住址列。ALTER TABLE S ADDClass_No CHAR(6),Address CHAR(40)使用此方式增加的新列自动填充使用此方式增加的新列自动填充NULL值,所以不能为增加值,所以不能为增加的新列指定的新列指定NOT NULL约束。约束。例例3-14 在在SC表中增加完整性约束定义,使表中增加完整性约束定义,使Score在在0100之间。之间。ALTER TABLE SC ADD CONSTRAINT Score_Chk CHECK(Score BETWEEN 0 AND 100) 例例3-15 把把S表中的表中的SN列加宽到列加宽到10个字符。个字符。ALTER TABLE SALTER COLUMNSN CHAR(10)不能改变列名;不能改变列名;不能将含有空值的列的定义修改为不能将含有空值的列的定义修改为NOT NULL约束;约束;若列中已有数据,则不能减少该列的宽度,也不能改变其数据若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;类型;只能修改只能修改NULL/NOT NULL约束,其他类型的约束在修改之前约束,其他类型的约束在修改之前必须先将约束删除,然后再重新添加修改过的约束定义。必须先将约束删除,然后再重新添加修改过的约束定义。例例3-16 删除删除S表中的主键约束。表中的主键约束。ALTER TABLE SDROP CONSTRAINT S_Prim 例例-补补 删除删除S表中的一列表中的一列“Address”。ALTER TABLE SDROP COLUMN Address3.4.5 删删除基本表除基本表 用用Enterprise Manager删除数据表删除数据表 用用SQL命令删除数据表命令删除数据表 DROP TABLE 只能删除自己建立的表,不能删除其他用户所建的表只能删除自己建立的表,不能删除其他用户所建的表 3.4.6 查查看数据表看数据表 查看数据表的属性查看数据表的属性属性包括:数据表的名称,所有者,创建日期,文件属性包括:数据表的名称,所有者,创建日期,文件组,记录的行数,数据表中的字段名称、结构和类型组,记录的行数,数据表中的字段名称、结构和类型等。等。查看数据表中的数据查看数据表中的数据 在在Enterprise Manager中,用右键单击要查看数据中,用右键单击要查看数据的表,从快捷菜单中选择的表,从快捷菜单中选择“打开表打开表”,再选择其子菜,再选择其子菜单中的单中的“返回所有行返回所有行” 。 3.5 创创建与使用索引建与使用索引 3.5.1 索引的作用索引的作用 3.5.2 索引的分索引的分类类 加快查询速度加快查询速度 保证行的惟一性保证行的惟一性 聚集索引与非聚集索引聚集索引与非聚集索引 唯一索引唯一索引 复合索引复合索引 聚集索引:查询速度快聚集索引:查询速度快非聚集索引:更新速度快非聚集索引:更新速度快排列的结果存储在表中排列的结果存储在表中 只有一个只有一个排列的结果不存储在表中排列的结果不存储在表中 可以有多个可以有多个有有UNIQUE,自动建立非聚集的惟一索引,自动建立非聚集的惟一索引有有PRIMARY KEY,自动建立聚集索引,自动建立聚集索引 将两个或多个字段组合起来建立的索引,将两个或多个字段组合起来建立的索引,单独的字段允许有重复的值单独的字段允许有重复的值3.5.3 创创建索引建索引 用用Enterprise Manager创建索引创建索引 用索引创建向导创建索引用索引创建向导创建索引 直接创建索引直接创建索引 用用SQL命令创建索引命令创建索引 CREATE UNIQUE CLUSTERED INDEX ON ( 次序次序 , 次序次序)建立惟一索引建立惟一索引 建立聚集索引建立聚集索引 ASC或或DESC,默认为,默认为ASC例例3-18 为表为表SC在在SNo和和CNo上建立惟一索引。上建立惟一索引。CREATE UNIQUE INDEX SCI ON SC(SNo,CNo) 例例3-19 为教师表为教师表T在在TN上建立聚集索引。上建立聚集索引。CREATE CLUSTERED INDEX TI ON T(TN)注意:注意:(1)改变表中的数据(如增加或删除记录)时,索引将自动)改变表中的数据(如增加或删除记录)时,索引将自动更新。更新。(2)索引建立后,在查询使用该列时,系统将自动使用索引)索引建立后,在查询使用该列时,系统将自动使用索引进行查询。进行查询。(3)索引数目无限制,但索引越多,更新数据的速度越慢。)索引数目无限制,但索引越多,更新数据的速度越慢。对于仅用于查询的表可多建索引,对于数据更新频繁的表对于仅用于查询的表可多建索引,对于数据更新频繁的表则应少建索引。则应少建索引。 3.5.4 查查看与修改索引看与修改索引 用用Enterprise Manager查看和修改索引查看和修改索引 用用Sp_helpindex存储过程查看索引存储过程查看索引 Sp_helpindex objname = name 例例3-20 查看表查看表SC的索引。的索引。EXEC Sp_helpindex SC 表的名称表的名称 用用Sp_rename存储过程更改索引名称存储过程更改索引名称 Sp_rename 数据表名数据表名.原索引名原索引名, 原索引名原索引名 例例3-21 更改更改T表中的索引表中的索引TI名称为名称为T_Index。EXEC Sp_rename T.TI, T_Index3.5.5 删删除索引除索引 用用Enterprise Manager删除索引删除索引 用用DROP INDEX命令删除索引命令删除索引 DROP INDEX数据表名数据表名.索引名索引名 例例3-22 删除表删除表SC的索引的索引SCI。DROP INDEX SC.SCI 不能删除由不能删除由CREATE TABLE或或ALTER TABLE命令创建的命令创建的PRIMARY KEY或或UNIQUE约束索引,约束索引,也不能删除系统表中也不能删除系统表中的索引的索引 3.6 数据数据查询查询 3.6.1 SELECT命令的格式与基本使用命令的格式与基本使用SELECT ALL|DISTINCTTOP N PERCENTWITH TIES列名列名AS 别名别名1 ,列名列名 AS 别名别名2INTO 新表名新表名FROM表名表名1或视图名或视图名1AS 表表1别名别名 ,表表名名2或视图名或视图名2AS 表表2别名别名WHERE检索条件检索条件GROUP BY HAVING ORDER BY ASC|DESC 投影投影 选取选取 T(教师关系教师关系)TNO教师号TN姓名SEX性别AGE年龄PROF职称SAL工资COMM岗位津贴DEPT系别T1李力男47教授15003000计算机T2王平女28讲师8001200信息T3刘伟男30讲师9001200计算机T4张雪女51教授16003000自动化T5张兰女39副教授13002000信息S(学生关系学生关系)SNO学号SN姓名SEX性别AGE年龄DEPT系别S1赵亦女17计算机S2钱尔男18信息S3孙珊女20信息S4李思男21自动化S5周武男19计算机S6吴丽女20自动化C(课程关系课程关系)CNO课程号CN课程名CT课时C1程序设计60C2微机原理80C3数字逻辑60C4数据结构80C5数据库60C6编译原理60C7操作系统60SC(选课关系选课关系) TC(授课关系授课关系) SNO学号CNO课程号SCORE成绩TNO教师号CNO课程号S1C190T1C1S1C285T1C4S2C557T2C5S2C680T3C1S2C7T3C5S2C570T4C2S3C10T4C3S3C270T5C5S3C485T5C7S4C193S4C285S4C383S5C289例例3-23 查询全体学生的学号、姓名和年龄。查询全体学生的学号、姓名和年龄。SELECT SNo, SN, AgeFROM S 例例3-24 查询学生的全部信息。查询学生的全部信息。SELECT * FROM S 例例3-25 查询选修了课程的学生号。查询选修了课程的学生号。SELECT DISTINCT SNo FROM SC例例3-26 查询全体学生的姓名、学号和年龄。查询全体学生的姓名、学号和年龄。SELECT SN Name, SNo, Age FROM SSELECT SN AS Name, SNo, Age3.6.2 条件条件查询查询 运算符运算符含义含义=, , =, =, != ,比较大小比较大小AND, OR, NOT多重条件多重条件BETWEEN AND确定范围确定范围IN确定集合确定集合LIKE字符匹配字符匹配IS NULL空值空值常用的比较运算符:常用的比较运算符: 比较大小比较大小 例例3-27 查询选修课程号为查询选修课程号为C1的学生的学号和成的学生的学号和成绩绩SELECT SNo,Score FROM SC WHERE CNo= C1此查询结果与此查询结果与CNo=C1 (SC)结果相同。结果相同。例例3-28 查询成绩高于查询成绩高于85分的学生的学号、课程号和分的学生的学号、课程号和成绩。成绩。SELECT SNo,CNo,Score FROM SC WHERE Score85 多重条件查询多重条件查询 NOT、AND、OR 用户可以使用括号改变优先级用户可以使用括号改变优先级例例3-29 查询选修查询选修C1或或C2且分数大于等于且分数大于等于85分学生分学生的学号、课程号和成绩。的学号、课程号和成绩。SELECT SNo, CNo, ScoreFROM SCWHERE (CNo = C1 OR CNo = C2) AND (Score = 85) 高高低低优先级优先级确定范围确定范围 例例3-30 查询工资在查询工资在1000至至1500元之间的教师的教师元之间的教师的教师号、姓名及职称。号、姓名及职称。SELECT TNo,TN,ProfFROM TWHERE Sal BETWEEN 1000 AND 1500 例例3-31 查询工资不在查询工资不在1000至至1500之间的教师的教师之间的教师的教师号、姓名及职称。号、姓名及职称。SELECT TNo,TN,ProfFROM TWHERE Sal NOT BETWEEN 1000 AND 1500 WHERE Sal=1000 AND Sal=1500 确定集合确定集合 利用利用“IN”操作可以查询属性值属于指定集合的元组。操作可以查询属性值属于指定集合的元组。 例例3-32 查询选修查询选修C1或或C2的学生的学号、课程号和成的学生的学号、课程号和成绩。绩。SELECT SNo, CNo, Score FROM SC WHERE CNo IN(C1,C2) 利用利用“NOT IN”可以查询指定集合外的元组。可以查询指定集合外的元组。例例3-33 查询没有选修查询没有选修C1,也没有选修,也没有选修C2的学生的学的学生的学号、课程号和成绩。号、课程号和成绩。SELECT SNo, CNo, ScoreFROM SC WHERE CNo NOT IN(C1,C2) 部分匹配查询部分匹配查询 当不知道完全精确的值时,用户可以使用当不知道完全精确的值时,用户可以使用LIKE或或NOT LIKE进行部分匹配查询(也称模糊查询),进行部分匹配查询(也称模糊查询), LIKE 例例3-34 查询所有姓张的教师的教师号和姓名。查询所有姓张的教师的教师号和姓名。SELECT TNo, TN FROM TWHERE TN LIKE 张张%例例3-35 查询姓名中第二个汉字是查询姓名中第二个汉字是“力力”的教师号和姓名。的教师号和姓名。SELECT TNo, TN FROM TWHERE TN LIKE_力力%空值查询空值查询某个字段没有值称之为具有空值(某个字段没有值称之为具有空值(NULL) 空值不同于零和空格,它不占任何存储空间空值不同于零和空格,它不占任何存储空间 例例3-36 查询没有考试成绩的学生的学号和相应的课查询没有考试成绩的学生的学号和相应的课程号。程号。SELECT SNo, CNoFROM SCWHERE Score IS NULL 注意:这里的空值条件为注意:这里的空值条件为IS NULL,不能写成,不能写成SCORE=NULL。3.6.3 常用常用库库函数及函数及统计汇总查询统计汇总查询 函数名称函数名称 功功 能能 AVG 按列按列计算平均算平均值 SUM 按列按列计算算值的的总和和 MAX 求一列中的最大求一列中的最大值 MIN 求一列中的最小求一列中的最小值 COUNT 按列按列值计个数个数 例例3-37 求学号为求学号为S1学生的总分和平均分。学生的总分和平均分。SELECT SUM(Score) AS TotalScore, AVG(Score) AS AveScoreFROM SCWHERE (SNo = S1) 例例3-38 求选修求选修C1号课程的最高分、最低分及之间相差的号课程的最高分、最低分及之间相差的分数。分数。SELECT MAX(Score) AS MaxScore, MIN(Score) AS MinScore, MAX(Score) MIN(Score) AS DiffFROM SCWHERE (CNo = C1)例例3-40 求学校中共有多少个系。求学校中共有多少个系。SELECT COUNT(DISTINCT Dept) AS DeptNumFROM S DISTINCT消去重复行消去重复行 例例3-41 统计有成绩同学的人数。统计有成绩同学的人数。SELECT COUNT (Score) FROM SC成绩为零的同学他计算在内,没有成绩(即为空值)的不成绩为零的同学他计算在内,没有成绩(即为空值)的不计算。计算。例例3-42 利用特殊函数利用特殊函数COUNT(*)求计算机系学生的求计算机系学生的总数。总数。SELECT COUNT(*) FROM SWHERE Dept=计算机计算机COUNT(*)用来统计元组的个数,不消除重复行,)用来统计元组的个数,不消除重复行,不允许使用不允许使用DISTINCT关键字。关键字。3.6.4 分分组查询组查询 GROUP BY子句可以将查询结果按属性列或属性列子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。组合上具有相同的值。 例例3-43 查询各个教师的教师号及其任课的门数。查询各个教师的教师号及其任课的门数。SELECT TNo,COUNT(*) AS C_NumFROM TCGROUP BY TNo GROUP BY子句按子句按TNo的值分组,所有具有相同的值分组,所有具有相同TNo的元的元组为一组,对每一组使用函数组为一组,对每一组使用函数COUNT进行计算,统计出各位教进行计算,统计出各位教师任课的门数。师任课的门数。若在分组后还要按照一定的条件进行筛选,则需使用若在分组后还要按照一定的条件进行筛选,则需使用HAVING子句子句 例例3-44 查询选修两门以上课程的学生的学号和选课查询选修两门以上课程的学生的学号和选课门数。门数。SELECT SNo, COUNT(*) AS SC_NumFROM SCGROUP BY SNoHAVING (COUNT(*) = 2) GROUP BY子句按子句按SNo的值分组,所有具有相同的值分组,所有具有相同SNo的元组为的元组为一组,对每一组使用函数一组,对每一组使用函数COUNT进行计算,统计出每位学生选课的门进行计算,统计出每位学生选课的门数。数。 HAVING子句去掉不满足子句去掉不满足COUNT(*)=2的组的组 当当在在一一个个SQL查查询询中中同同时时使使用用WHERE子子句句,GROUP BY 子子句句和和HAVING子子句句时时,其其 顺顺 序序 是是 WHERE GROUP BY HAVING。WHERE与与HAVING子子句句的的根根本本区区别别在在于于作用对象作用对象不同。不同。WHERE子子句句作作用用于于基基本本表表或或视视图图,从从中中选选择满足条件的元组;择满足条件的元组;HAVING子子句句作作用用于于组组,选选择择满满足足条条件件的的组组,必必须须用用于于GROUP BY子子句句之之后后,但但GROUP BY子句可没有子句可没有HAVING子句。子句。3.6.5 查询查询的排序的排序 当需要对查询结果排序时,应该使用当需要对查询结果排序时,应该使用ORDER BY子子句,句,ORDER BY子句必须出现在其他子句之后。排序子句必须出现在其他子句之后。排序方式可以指定,方式可以指定,DESC为降序,为降序,ASC为升序,缺省时为升序,缺省时为升序。为升序。 例例3-45 查询选修查询选修C1 的学生学号和成绩,并按成绩降的学生学号和成绩,并按成绩降序排列。序排列。SELECT SNo, ScoreFROM SCWHERE (CNo = C1)ORDER BY Score DESC例例3-46 查询选修查询选修C2、C3、C4或或C5课程的学号、课课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。按成绩降序排列。SELECT SNo, CNo, ScoreFROM SCWHERE (CNo IN (C2, C3, C4, C5)ORDER BY SNo, Score DESC例例3-47 求选课在三门以上且各门课程均及格的学生求选课在三门以上且各门课程均及格的学生的学号及其总成绩,查询结果按总成绩降序列出。的学号及其总成绩,查询结果按总成绩降序列出。SELECT SNo, SUM(Score) AS TotalScoreFROM SCWHERE (Score = 60)GROUP BY SNoHAVING (COUNT(*) = 3)ORDER BY SUM(Score) DESC 取出整个取出整个SC 筛选筛选Score=60的元组的元组 将选出的元组按将选出的元组按SNo分组分组 筛选选课三门以上的分组筛选选课三门以上的分组 将选取结果排序将选取结果排序 在剩下的组中提取学号和总成绩在剩下的组中提取学号和总成绩 ORDER BY 2 DESC ; “2”代表查询结果的第二列代表查询结果的第二列 3.6.6 数据表数据表连连接及接及连连接接查询查询 连接查询:一个查询需要对多个表进行操作连接查询:一个查询需要对多个表进行操作表之间的连接:连接查询的结果集或结果表表之间的连接:连接查询的结果集或结果表连接字段:数据表之间的联系是通过表的字段值来体现的连接字段:数据表之间的联系是通过表的字段值来体现的连接操作的目的:从多个表中查询数据连接操作的目的:从多个表中查询数据 表的连接方法有如下表的连接方法有如下两种两种 : 表之间满足一定条件的行进行连接时,表之间满足一定条件的行进行连接时,FROM子句指明进行连接的子句指明进行连接的表名,表名,WHERE子句指明连接的列名及其连接条件子句指明连接的列名及其连接条件 利用关键字利用关键字JOIN进行连接:当将进行连接:当将JOIN 关键词放于关键词放于FROM子句中时,子句中时,应有关键词应有关键词ON与之对应,以表明连接的条件与之对应,以表明连接的条件INNER JOIN 显示符合条件的记录,此为默认值 LEFT(OUTER)JOIN 为左(外)连接,用于显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以NULL来显示 RIGHT(OUTER)JOIN 右(外)连接,用于显示符合条件的数据行以及右边表中不符合条件的数据行。此时左边数据行会以NULL来显示 FULL(OUTER)JOIN 显示符合条件的数据行以及左边表和右边表中不符合条件的数据行。此时缺乏数据的数据行会以NULL来显示 CROSS JOIN 将一个表的每一个记录和另一表的每个记录匹配成新的数据行 JION的分类的分类等值连接与非等值连接等值连接与非等值连接 例例3-48 查询查询“刘伟刘伟”老师所讲授的课程,要求列出老师所讲授的课程,要求列出教师号、教师姓名和课程号。教师号、教师姓名和课程号。方法方法1:SELECT T.TNo,TN,CNoFROM T,TCWHERE (T.TNo = TC. TNo) AND (TN=刘伟刘伟) 方法方法2:SELECT T.TNo, TN, CNoFROM T INNER JOIN TCON T.TNo = TC.TNoWHERE (TN = 刘伟刘伟)连接条件连接条件 ,当比,当比较运算符为较运算符为“”时,称为等值时,称为等值连接。其他情况连接。其他情况为非等值连接。为非等值连接。 引用列名引用列名TNo时要加上表名前缀,这是因为两个表中的列名相同,时要加上表名前缀,这是因为两个表中的列名相同,必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。必须用表名前缀来确切说明所指列属于哪个表,以避免二义性。例例3-49 查询所有选课学生的学号、姓名、选课名称查询所有选课学生的学号、姓名、选课名称及成绩。及成绩。SELECT S.SNo,SN,CN,ScoreFROM S,C,SCWHERE S.SNo=SC.SNo AND SC.CNo=C.CNo 例例3-50 查询每门课程的课程名、任课教师姓名及其查询每门课程的课程名、任课教师姓名及其职务、选课人数。职务、选课人数。SELECT CN,TN,Prof,COUNT(SC.SNo)FROM C,T,TC,SCWHERE T.TNo=TC.TNo AND C.CNo=TC.CNo AND SC.CNo=C.CNoGROUP BY SC.CNo 错误错误!GROUP BY CN,TN,PROF; -正确正确自身连接:自身连接:当一个表与其自已进行连接操作时,当一个表与其自已进行连接操作时,称为表的称为表的自身连接自身连接。 例例3-51 查询所有比查询所有比“刘伟刘伟”工资高的教师姓名、工工资高的教师姓名、工资和刘伟的工资。资和刘伟的工资。 方法方法1:SELECT X.TN,X.Sal AS Sal_a,Y.Sal AS Sal_bFROM T AS X ,T AS Y WHERE X.SalY.SalAND Y.TN=刘伟刘伟方法方法2:SELECT X.TN, X.Sal,Y.Sal FROM T AS X INNER JOIN T AS Y ON X.SalY.SalAND Y.TN=刘伟刘伟方法方法3:SELECT R1.TN,R1.Sal, R2.SalFROM (SELECT TN,Sal FROM T ) AS R1INNER JOIN (SELECT Sal FROM TWHERE TN=刘伟刘伟) AS R2ON R1.SalR2.Sal 例例3-52 检索所有学生姓名,年龄和选课名称。检索所有学生姓名,年龄和选课名称。 方法方法1:SELECT SN,Age,CNFROM S,C,SCWHERE S.SNo=SC.SNo AND SC.CNo=C.CNo方法方法2:SELECT R3.SNo,R3.SN,R3.Age,R4.CNFROM(SELECT SNo,SN,Age FROM S) AS R3INNER JOIN(SELECT R2.SNo,R1.CNFROM(SELECT CNo,CN FROM C) AS R1INNER JOIN (SELECT SNo,CNo FROM SC) AS R2ON R1.CNo=R2.CNo) AS R4ON R3.SNo=R4.SNo INNER JOIN 显示符合条件的记录,此为默认值 LEFT(OUTER)JOIN 为左(外)连接,用于显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以NULL来显示 RIGHT(OUTER)JOIN 右(外)连接,用于显示符合条件的数据行以及右边表中不符合条件的数据行。此时左边数据行会以NULL来显示 FULL(OUTER)JOIN 显示符合条件的数据行以及左边表和右边表中不符合条件的数据行。此时缺乏数据的数据行会以NULL来显示 CROSS JOIN 将一个表的每一个记录和另一表的每个记录匹配成新的数据行 JION的分类的分类外连接外连接 而在外部连接中,参与连接的表有主从之分,以主表而在外部连接中,参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列。的每行数据去匹配从表的数据列。 符合连接条件的数据将直接返回到结果集中,对那些符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上不符合连接条件的列,将被填上NULL值后再返回到结值后再返回到结果集中。果集中。例例3-53 查询所有学生的学号、姓名、选课名称及成查询所有学生的学号、姓名、选课名称及成绩(没有选课的同学的选课信息显示为空)。绩(没有选课的同学的选课信息显示为空)。SELECT S.SNo,SN,CN,ScoreFROM SLEFT OUTER JOIN SCON S.SNo=SC.SNoLEFT OUTER JOIN CON C.CNo=SC.CNo 左外部连接左外部连接右外部连接右外部连接 3.6.7 子子查询查询 在在WHERE子句中包含一个形如子句中包含一个形如SELECT-FROM-WHERE的查询块,此查询块称为子查询或嵌套查询。的查询块,此查询块称为子查询或嵌套查询。返回一个值的子查询返回一个值的子查询 例例3-54 查询与查询与“刘伟刘伟”老师职称相同的教师号、姓名老师职称相同的教师号、姓名SELECT TNo,TNFROM TWHERE Prof= (SELECT Prof FROM T WHERE TN= 刘伟刘伟) 使用比较运算符使用比较运算符(=, , =, ANY (SELECT Sal FROM T WHERE Dept = 计算机计算机)AND (Dept 计算机计算机) SELECT TN, SalFROM TWHERE Sal (SELECT MIN(Sal) FROM T WHERE Dept = 计算机计算机) AND Dept 计算机计算机 使用使用ALL 例例3-58 查询其他系中比计算机系所有教师工资都高的查询其他系中比计算机系所有教师工资都高的教师的姓名和工资。教师的姓名和工资。SELECT TN, SalFROM TWHERE (Sal ALL (SELECT Sal FROM T WHERE Dept = 计算机计算机)AND (Dept 计算机计算机) 例例3-59 查询不讲授课程号为查询不讲授课程号为C5的教师姓名。的教师姓名。SELECT DISTINCT TNFROM TWHERE (C5 ALL ( SELECT CNo FROM TC WHERE TNo = T.TNo)Sal ( SELECT MAX(Sal) NOT IN 4. 4. 使用使用EXISTSEXISTSEXISTSEXISTS表表示示存存在在量量词词,带带有有EXISTSEXISTS的的子子查查询询不不返返回回任任何何实实际际数据,它只得到逻辑值数据,它只得到逻辑值“真真”或或“假假”。当当子子查查询询的的的的查查询询结结果果集集合合为为非非空空时时,外外层层的的WHEREWHERE子子句句返返回回真值,否则返回假值。真值,否则返回假值。NOT EXISTSNOT EXISTS与此相反。与此相反。含有含有ININ的查询通常可用的查询通常可用EXISTSEXISTS表示,但反过来不一定。表示,但反过来不一定。例例3.60 3.60 查询讲授课程号为查询讲授课程号为C5C5的教师姓名。的教师姓名。SELECT TNFROM TWHERE EXISTS ( SELECT * FROM TC WHERE TNO=T.TNO AND CNO=C5)当当子子查查询询TCTC表表存存在在一一行行记记录录满满足足其其WHEREWHERE子子句句中中的的条条件件时时,则则父父查查询询便便得得到到一一个个TNTN值值,重重复复执执行行以以上上过过程程,直直到到得得出出最最后后结果。结果。例例3.61 3.61 查询没有讲授课程号为查询没有讲授课程号为C5C5的教师姓名。的教师姓名。SELECT TNFROM TWHERE (NOT EXISTS ( SELECT * FROM TC WHERE TNO=T.TNO AND CNO=C5)当当子子查查询询TCTC表表存存在在一一行行记记录录不不满满足足其其WHEREWHERE子子句句中中的的条条件件时时,则则父父查查询询便便得得到到一一个个TNTN值值,重重复复执执行行以以上上过过程程,最最后后选选出出了了这这样样一一些些教教师师名名单单,在在TCTC表表中中不不存存在在他他们们讲讲授授C5C5课程的记录。课程的记录。使用使用EXISTS 带有带有EXISTS的子查询不返回任何实际数据,它只得到逻辑值的子查询不返回任何实际数据,它只得到逻辑值“真真”或或“假假” 。当子查询的的查询结果集合为非空时,外层的当子查询的的查询结果集合为非空时,外层的WHERE子句返回真子句返回真值,否则返回假值。值,否则返回假值。NOT EXISTS与此相反。与此相反。含有含有IN的查询通常可用的查询通常可用EXISTS表示,但反过来不一定。表示,但反过来不一定。例例3-62 查询选修所有课程的学生姓名。查询选修所有课程的学生姓名。SELECT SNFROM SWHERE (NOT EXISTS ( SELECT * FROM C WHERE NOT EXISTS ( SELECT * FROM SC WHERE SNo = S.SNo AND CNo = C.CNo) 可以理解为:选出这样一些学生名单,在可以理解为:选出这样一些学生名单,在SC表中不存在他们没有选表中不存在他们没有选修课程的记录。修课程的记录。3.6.8 合并合并查询查询 合并查询就是使用合并查询就是使用UNION 操作符将来自不同查询的数据操作符将来自不同查询的数据组合起来,形成一个具有综合信息的查询结果。组合起来,形成一个具有综合信息的查询结果。UNION操作会自动将重复的数据行剔除。操作会自动将重复的数据行剔除。参加合并查询的各子查询的使用的表结构应该相同。参加合并查询的各子查询的使用的表结构应该相同。例例3-63 从从SC数据表中查询出学号为数据表中查询出学号为“S1”同学的学号和同学的学号和总分,再从总分,再从SC数据表中查询出学号为数据表中查询出学号为“S5”的同学的学号的同学的学号和总分,然后将两个查询结果合并成一个结果集。和总分,然后将两个查询结果合并成一个结果集。SELECT SNo AS 学号学号, SUM(Score) AS 总分总分FROM SCWHERE (SNo = S1)GROUP BY SNoUNIONSELECT SNo AS 学号学号, SUM(Score) AS 总分总分FROM SCWHERE (SNo = S5)GROUP BY SNo 3.6.9 存存储查询结储查询结果到表中果到表中 使用使用SELECTINTO 语句可以将查询结果存储到一个新语句可以将查询结果存储到一个新建的数据库表或临时表中建的数据库表或临时表中 。例例3-64 从从SC数据表中查询出所有同学的学号和总分,并数据表中查询出所有同学的学号和总分,并将查询结果存放到一个新的数据表将查询结果存放到一个新的数据表cal_table中。中。SELECT SNo AS 学号学号, SUM(Score) AS 总分总分INTO Cal_TableFROM SCGROUP BY SNo 如果把如果把Cal_Table改为改为 INTO # Cal_Table,则查询的结果被存放,则查询的结果被存放到临时表中,临时表只存储在内存中,并不存储在数据库中,所到临时表中,临时表只存储在内存中,并不存储在数据库中,所以其存在时间非常短。以其存在时间非常短。3.7 数据操数据操纵纵 3.7.1 添加数据添加数据用用Enterprise Manager添加数据添加数据 不能应付数据的大量添加不能应付数据的大量添加用用SQL命令添加数据命令添加数据 数据操纵数据操纵u添加数据(添加数据( INSERT INTO)u修改数据(修改数据(UPDATE )u删除数据(删除数据(DELETE ) INSERT INTO 用用SQL命令添加数据命令添加数据添加一行新记录添加一行新记录 INSERT INTO (,) VALUES() 例例3-65 在在S表中添加一条学生记录(学号:表中添加一条学生记录(学号:S7、姓名:、姓名:郑冬、性别:女、年龄:郑冬、性别:女、年龄:21、系别:计算机)。、系别:计算机)。INSERT INTO S (SNo, SN, Age, Sex, Dept)VALUES (S7, 郑冬郑冬, 21, 女女, 计算机计算机)必须用逗号将各个数据分开,字符型数据要用单引号括起来。必须用逗号将各个数据分开,字符型数据要用单引号括起来。如果如果INTO子句中没有指定列名,则新添加的记录必须在每个属性列上均有值,子句中没有指定列名,则新添加的记录必须在每个属性列上均有值,且且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。子句中值的排列顺序要和表中各属性列的排列顺序一致。 添加一行记录的部分数据值添加一行记录的部分数据值 例例3-66 在在SC表中添加一条选课记录表中添加一条选课记录(S7, C1)。INSERT INTO SC (SNo, CNo)VALUES (S7, C1) 添加多行记录:添加多行记录:用于表间的拷贝,即将一个表中的数用于表间的拷贝,即将一个表中的数据抽取数行添加到另一个表中,可以通过子查询实现。据抽取数行添加到另一个表中,可以通过子查询实现。 INSERT INTO (,)子查询子查询 例例3-67 求出各系教师的平均工资,把结果存放在新求出各系教师的平均工资,把结果存放在新表表AvgSal中。中。 首先建立新表首先建立新表AvgSal,用来存放系名和各系的平均工资,用来存放系名和各系的平均工资 CREATE TABLE AvgSal( Department VARCHAR(20), Average SMALLINT) 求出求出T表中各系的平均工资,把结果存放在新表表中各系的平均工资,把结果存放在新表AvgSal中中 INSERT INTO AvgSalSELECT Dept,AVG(Sal) FROM TGROUP BY Dept 3.7.2 修改数据修改数据 用用Enterprise Manager修改数据修改数据 不能应付数据的大量修改不能应付数据的大量修改 用用SQL命令修改数据命令修改数据UPDATE SET = ,=WHERE UPDATE 例例3-68 把刘伟老师转到信息系把刘伟老师转到信息系UPDATE T SET Dept= 信息信息WHERE TN= 刘伟刘伟 例例3-69 将所有学生的年龄增加将所有学生的年龄增加1岁岁UPDATE S SET Age=Age+1 修改多行修改多行修改一行修改一行 例例3-71 把讲授把讲授C5课程的教师的岗课程的教师的岗位津贴增加位津贴增加100元。元。UPDATE TSET Comm = Comm + 100WHERE (TNo IN (SELECT T.TNo FROM T, TC WHERE T.TNo =TC.TNo AND TC.CNo = C5) 用子查询选择要修改的行用子查询选择要修改的行 用子查询提供要修改的值用子查询提供要修改的值 例例3-72 把所有教师的工资提高把所有教师的工资提高到平均工资的到平均工资的1.2倍。倍。UPDATE TSET Sal = (SELECT 1.2 * AVG(Sal) FROM T) 3.7.3 删删除数据除数据 用用Enterprise Manager删除数据删除数据 比较适合于少量的单个记录等简单情况比较适合于少量的单个记录等简单情况 用用SQL命令删除数据命令删除数据 DELETE FROMWHERE DELETE 例例3-73 删除刘伟老师的记录。删除刘伟老师的记录。DELETE FROM T WHERE TN= 刘伟刘伟 例例3-74 删除所有教师的授课记录。删除所有教师的授课记录。DELETE FROM TC删除多行记录删除多行记录 删除一行记录删除一行记录 例例3-75 删除刘伟老师授课的记录。删除刘伟老师授课的记录。DELETE FROM TCWHERE (TNo = ( SELECT TNo FROM T WHERE TN = 刘伟刘伟) 用子查询选择要删除的行用子查询选择要删除的行 3.8 视图视图 视图是虚表,其数据不进行存储,其记录来自基视图是虚表,其数据不进行存储,其记录来自基本表,只在数据库中存储其定义本表,只在数据库中存储其定义 。3.8.1 创建建视图 用用Enterprise Manager创建视图创建视图 用用SQL命令创建视图命令创建视图 CREATE VIEW ()AS 例例3-77 创建一学生情况视图创建一学生情况视图S_SC_C(包括学号、姓(包括学号、姓名、课程名及成绩)。名、课程名及成绩)。CREATE VIEW S_SC_C(SNo, SN, CN, Score) AS SELECT S.SNo, SN, CN, Score FROM S, C, SC WHERE S.SNo = SC.SNo AND SC.CNo = C.CNo 例例3-78 创建一学生平均成绩视图创建一学生平均成绩视图S_Avg。CREATE VIEW S_Avg(SNo, Avg)AS SELECT SNo, Avg(Score) FROM SC GROUP BY SNo 3.8.2 修改修改视图视图 用用Enterprise Manager修改视图修改视图 用用SQL命令修改视图命令修改视图 ALTER VIEW ()AS 例例3-79 修改学生情况视图修改学生情况视图S_SC_C(包括姓名、课(包括姓名、课程名及成绩)。程名及成绩)。ALTER VIEW S_SC_C(SN, CN, Score) AS SELECT SN, CN, Score FROM S, C, SC WHERE S.SNo = SC.SNo AND SC.CNo = C.CNo 3.8.3 删删除除视图视图 用用Enterprise Manager删除视图删除视图用用SQL命令删除视图命令删除视图 DROP VIEW 例例3-80 删除计算机系教师情况的视图删除计算机系教师情况的视图Sub_T。DROP VIEW Sub_ T视图删除后,只会删除该视图在数据字典中的定义,视图删除后,只会删除该视图在数据字典中的定义,而与该视图有关的基本表中的数据不会受任何影响。而与该视图有关的基本表中的数据不会受任何影响。3.8.4 查询视图查询视图 视图定义后,对视图的查询操作如同对基本表的查询操视图定义后,对视图的查询操作如同对基本表的查询操作一样。作一样。 例例3-81 查找视图查找视图Sub_T中职称为教授的教师号和姓名。中职称为教授的教师号和姓名。SELECT TNo, TNFROM Sub_TWHERE (Prof = 教授教授) SELECT TNo,TNFROM T WHERE Dept = 计算机计算机 AND Prof= 教授教授 视图的建立简化了查询操作视图的建立简化了查询操作 3.8.5 更新更新视图视图 由于视图是一张虚表,所以对视图的更新,最终转换由于视图是一张虚表,所以对视图的更新,最终转换成对基本表的更新。成对基本表的更新。其语法格式如同对基本表的更新操作一样其语法格式如同对基本表的更新操作一样 。视图的优点视图的优点 添加添加修改修改 删除删除 INSERT UPDATE DELETE 利于数据保密利于数据保密 简化查询操作简化查询操作 保证数据的逻辑独立性保证数据的逻辑独立性 1 1 插入(插入(INSERTINSERT)例例3-823-82 向向计计算算机机系系教教师师视视图图SUB_TSUB_T中中插插入入一一条条记记录录(教师号:(教师号:T6T6;姓名:李丹;职称:副教授)。;姓名:李丹;职称:副教授)。INSERT INTO SUB_TVALUES (T6,李丹李丹,副教授副教授)系统在执行此语句时,首先从数据字典中找到系统在执行此语句时,首先从数据字典中找到SUB_TSUB_T的定义,然后把此定义和插入操作结合起来,的定义,然后把此定义和插入操作结合起来,转换成等价的对基本表转换成等价的对基本表T T的插入。相当于执行以下的插入。相当于执行以下操作:操作:INSERT INTO TINSERT INTO TVALUES VALUES (T6, (T6, 李李丹丹,副副教教授授,计计算机算机) )2 2 修改(修改(UPDATEUPDATE)例例3-833-83 将计算机系教师视图将计算机系教师视图SUB_TSUB_T中刘伟中刘伟的职称改为的职称改为“副教授副教授“。UPDATE SUB_TSET PROF = 副教授副教授WHERE TN = 刘伟刘伟 转换成对基本表的修改操作:转换成对基本表的修改操作:UPDATE TUPDATE TSET PROF=SET PROF=副教授副教授WHERE TN=WHERE TN=刘伟刘伟AND DEPT=AND DEPT=计算机计算机3 3 删除(删除(DELETEDELETE)例例3-843-84 删除计算机系教师视图删除计算机系教师视图SUB_TSUB_T中刘伟教师的记录。中刘伟教师的记录。DELETE DELETE FROM SUB_TFROM SUB_TWHERE TN=WHERE TN=刘伟刘伟转换成对基本表的删除操作:转换成对基本表的删除操作:DELETE DELETE FROM TFROM TWHERE TN=WHERE TN=刘伟刘伟 AND DEPT=AND DEPT=计算机计算机由于视图中的数据不是存放在视图中的,即视图没有相由于视图中的数据不是存放在视图中的,即视图没有相应的存储空间,对视图的一切操作最终都要转换成对基应的存储空间,对视图的一切操作最终都要转换成对基本表的操作,这样看来使操作更加复杂,那么为什么还本表的操作,这样看来使操作更加复杂,那么为什么还要使用视图呢?要使用视图呢?使用视图有如下几个优点:使用视图有如下几个优点:1. 1. 利于数据保密利于数据保密,对不同的用户定义不同的视图,对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。使用户只能看到与自己有关的数据。例如例如, ,对教师表创建了计算机系视图,本系教师只对教师表创建了计算机系视图,本系教师只能使用此视图,而无法访问其他系教师的数据。能使用此视图,而无法访问其他系教师的数据。2. 2. 简化查询操作简化查询操作,为复杂的查询建立一个视图,用,为复杂的查询建立一个视图,用户不必键入复杂的查询语句,只需针对此视图做简单户不必键入复杂的查询语句,只需针对此视图做简单的查询即可。如例的查询即可。如例3-813-81。3. 3. 保证数据的逻辑独立性保证数据的逻辑独立性。对于视图的操作,比如。对于视图的操作,比如查询,只依赖于视图的定义。当构成视图的基本表要查询,只依赖于视图的定义。当构成视图的基本表要修改时,只需修改视图定义中的子查询部分。而基于修改时,只需修改视图定义中的子查询部分。而基于视图的查询不用改变。这就是第一章介绍过的外模式视图的查询不用改变。这就是第一章介绍过的外模式与模式之间的独立性,即与模式之间的独立性,即数据的逻辑独立性数据的逻辑独立性。3.9 SQL 3.9 SQL 数据控制数据控制 数数据据库库中中的的数数据据由由多多个个用用户户共共享享,为为保保证证数数据据库库的的安安全全,SQLSQL语语言言提提供供数数据据控控制制语语句句DCL(Data DCL(Data Control Control Language)Language)对对数数据据库库进行统一的控制管理。进行统一的控制管理。3.9.1 3.9.1 权限与角色权限与角色3.9.1.13.9.1.1权限权限在在SQLSQL系统中,有两个系统中,有两个安全机制安全机制:一一种种是是上上一一节节介介绍绍的的视视图图机机制制,当当用用户户通通过过视视图图访访问问数数据据库库时时,不不能能访访问问此此视视图图外外的的数数据据,它它提提供供了了一一定定的的安安全性。全性。主要的安全机制是主要的安全机制是权限机制权限机制。权权限限机机制制的的基基本本思思想想是是给给用用户户授授予予不不同同类类型型的的权权限限,在必要时,可以收回授权。在必要时,可以收回授权。使使用用户户能能够够进进行行的的数数据据库库操操作作以以及及所所操操作作的的数数据据限限定定在在指指定定的的范范围围内内,禁禁止止用用户户超超越越权权限限对对数数据据库库进进行行非非法的操作,从而保证数据库的安全性。法的操作,从而保证数据库的安全性。在在SQL SERVERSQL SERVER中,权限可分为系统权限和对象权限。中,权限可分为系统权限和对象权限。系系统统权权限限由由数数据据库库管管理理员员授授予予其其他他用用户户,是是指指数数据据库库用用户能够对数据库系统进行某种特定的操作的权力。户能够对数据库系统进行某种特定的操作的权力。如创建一个基本表(如创建一个基本表(CREATE TABLECREATE TABLE)对对象象权权限限由由创创建建基基本本表表、视视图图等等数数据据库库对对象象的的用用户户授授予予其其他他用用户户,是是指指数数据据库库用用户户在在指指定定的的数数据据库库对对象象上上进进行行某种特定的操作的权力。某种特定的操作的权力。如如 查查 询询 ( SELECTSELECT) 、 插插 入入 ( INSERTINSERT) 、 修修 改改(UPDATEUPDATE)和删除()和删除(DELETEDELETE)等操作。)等操作。3.9.1.2 3.9.1.2 角色角色角角色色是是多多种种权权限限的的集集合合,可可以以把把角角色色授授予予用用户户或或其其他他角角色色。当当要要为为某某一一用用户户同同时时授授予予或或收收回回多多项项权权限限时时,则则可可以以把把这这些些权权限限定定义义为为一一个个角角色色,对对此此角角色色进进行行操操作作。这这样样就就避避免免了了许许多多重重复复性性的的工工作作,简简化化了了管管理理数数据据库库用用户户权限的工作。权限的工作。3.9.2 3.9.2 系统权限与角色的授予与收回系统权限与角色的授予与收回3.9.2.1 3.9.2.1 系统权限与角色的授予系统权限与角色的授予SQLSQL语语言言使使用用GRANTGRANT语语句句为为用用户户授授予予系系统统权权限限,其其语语法法格格式为:式为:GRANTGRANT | , ,|TOTO |PUBLIC,|PUBLIC,|WITH ADMIN OPTIONWITH ADMIN OPTION其语义为:将指定的系统权限授予指定的用户或角色。其语义为:将指定的系统权限授予指定的用户或角色。其中其中:PULBIC代表数据库中的全部用户。代表数据库中的全部用户。WITH WITH ADMIN ADMIN OPTIONOPTION为为可可选选项项,指指定定后后则则允允许许被被授授权权的的用用户户将将指指定定的的系系统统特特权权或或角角色色再再授授予予其其他他用用户户或或角角色。色。例例3-853-85 为用户为用户ZHANGSANZHANGSAN授予授予CREATE TABLECREATE TABLE的系统权限。的系统权限。GRANT CREATE TABLE TO ZHANGSAN3.9.2.2 3.9.2.2 系统权限与角色的收回系统权限与角色的收回数数据据库库管管理理员员可可以以使使用用REVOKEREVOKE语语句句收收回回系系统统权权限限,其其语语法格式为:法格式为:REVOKEREVOKE | , ,|FROMFROM |PUBLIC,|PUBLIC,|例例3-863-86 收收回回用用户户ZHANGSANZHANGSAN所所拥拥有有的的CREATE CREATE TABLETABLE的的系系统权限。统权限。REVOKE CREATE TABLE REVOKE CREATE TABLE FROM ZHANGSANFROM ZHANGSAN3.9.3 3.9.3 对象权限与角色的授予与收回对象权限与角色的授予与收回3.9.3.1 3.9.3.1 对象权限与角色的授予对象权限与角色的授予数数据据库库管管理理员员拥拥有有系系统统权权限限,而而作作为为数数据据库库的的普普通通用用户户,只只对对自自己己创创建建的的基基本本表表、视视图图等等数数据据库库对对象象拥拥有有对对象象权权限。限。如如果果要要共共享享其其他他的的数数据据库库对对象象,则则必必须须授授予予他他一一定定的的对对象权限。象权限。同系统权限的授予类似,同系统权限的授予类似,SQLSQL语言使用语言使用GRANTGRANT语句为用户语句为用户授予对象权限,其语法格式为:授予对象权限,其语法格式为:GRANT GRANT ALLALL|(列列名名,列列名名),),ONON TOTO |PUBLIC,|PUBLIC,|WITH GRANT OPTIONWITH GRANT OPTION 其其语语义义为为:将将指指定定的的操操作作对对象象的的对对象象权权限限授授予予指指定定的的用户或角色。用户或角色。其其中:中:ALLALL代表代表所有的对象权限。所有的对象权限。列列名名用用于于指指定定要要授授权权的的数数据据库库对对象象的的一一列列或或多多列列。如如果果不不指指定定列列名名,被被授授权权的的用用户户将将在在数数据据库库对对象象的的所有列上均拥有指定的特权。所有列上均拥有指定的特权。实实际际上上,只只有有当当授授予予INSERT、UPDATE权权限限时时才需指定列名。才需指定列名。ONON子子句句用用于于指指定定要要授授予予对对象象权权限限的的数数据据库库对对象象名名,可以是基本表名、视图名等。可以是基本表名、视图名等。WITH WITH ADMIN ADMIN OPTIONOPTION为为可可选选项项,指指定定后后则则允允许许被被授授权权的用户将权限再授予其他用户或角色。的用户将权限再授予其他用户或角色。例例3-873-87 将将对对S S表表和和T T表表的的所所有有对对象象权权限限授授予予USER1USER1和和USER2USER2。GRANT ALLGRANT ALLON S,TON S,TTO USER1,USER2TO USER1,USER2例例3-883-88 将对将对C C表的查询权限授予所有用户。表的查询权限授予所有用户。GRANT SELECTGRANT SELECTON CON CTO PUBLICTO PUBLIC例例3-893-89 将将查查询询T T表表和和修修改改教教师师职职称称的的权权限限授授予予USER3,USER3,并允许将此权限授予其他用户。并允许将此权限授予其他用户。GRANT SELECT,UPDATE(PROF)GRANT SELECT,UPDATE(PROF)ON TON TTO USER3TO USER3WITH GRANT OPTIONWITH GRANT OPTIONUSER3USER3具具有有此此对对象象权权限限,并并可可使使用用GRANTGRANT命命令令给给其其他他用户授权,如下例,用户授权,如下例,USER3USER3将此权限授予将此权限授予USER4:USER4:GRANT SELECT,UPDATE(PROF)GRANT SELECT,UPDATE(PROF)ON TON TTO USER4TO USER43.9.3.2 3.9.3.2 对象权限与角色的收回对象权限与角色的收回所所有有授授予予出出去去的的权权力力在在必必要要时时都都可可以以由由数数据据库库管管理理员员和和授授权权者者收收回回,收收回回对对象象权权限限仍仍然然使使用用REVOKEREVOKE语语句,其语法格式为:句,其语法格式为:REVOKE REVOKE | ,|FROM FROM |PUBLIC,|PUBLIC,|例例3-903-90 收回用户收回用户USER1USER1对对C C表的查询权限。表的查询权限。REVOKE SELECT REVOKE SELECT ON CON CFROM USER1FROM USER1例例3-913-91 收收回回用用户户USER3USER3查查询询T T表表和和修修改改教教师师职职称称的的权权限。限。REVOKE SELECT,UPDATE(PROF)REVOKE SELECT,UPDATE(PROF)ON TON TFROM USER3FROM USER3CASCADE废除可授予的除可授予的权限限时使用使用 CASCADE。在在例例3-913-91中中,USER3USER3将将对对T T表表的的权权限限授授予予了了USER4USER4,在在收收回回USER3USER3对对T T表表的的权权限限的的同同时时,系系统统会会自自动动收收回回USER4USER4对对T T表的权限表的权限( (CASCADE 的作用的作用) )。小小 结结本章以本章以SQL SERVERSQL SERVER为例,详细介绍了为例,详细介绍了SQLSQL语言的使用方法。语言的使用方法。在在讲讲解解SQLSQL语语言言的的同同时时,进进一一步步介介绍绍了了关关系系数数据据库库的的有有关关概念,如索引和视图的概念及其作用。概念,如索引和视图的概念及其作用。SQLSQL语语言言具具有有数数据据定定义义、数数据据查查询询、数数据据更更新新、数数据据控控制制四大功能。其全部功能可以用表四大功能。其全部功能可以用表3.53.5的的9 9个动词概括出来。个动词概括出来。SQLSQL功能功能动词动词数据定义数据定义CREATE,DROP,ALTERCREATE,DROP,ALTER数据查询数据查询SELECTSELECT数据操纵数据操纵INSERT,UPDATE,DELETEINSERT,UPDATE,DELETE数据控制数据控制GRANT,REVOKEGRANT,REVOKE表表3.5 SQL语言的动词语言的动词
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号