第3章关系数据语言SQL2005

上传人:桔**** 文档编号:567696571 上传时间:2024-07-22 格式:PPT 页数:252 大小:1.11MB
返回 下载 相关 举报
第3章关系数据语言SQL2005_第1页
第1页 / 共252页
第3章关系数据语言SQL2005_第2页
第2页 / 共252页
第3章关系数据语言SQL2005_第3页
第3页 / 共252页
第3章关系数据语言SQL2005_第4页
第4页 / 共252页
第3章关系数据语言SQL2005_第5页
第5页 / 共252页
点击查看更多>>
资源描述

《第3章关系数据语言SQL2005》由会员分享,可在线阅读,更多相关《第3章关系数据语言SQL2005(252页珍藏版)》请在金锄头文库上搜索。

1、哎荧兼舶度默汰掷件北净常梳浪葡叶酪蔡缄靖牌盅茧自止俱荷唁烛鳞桔冗第3章关系数据语言SQL2005第3章关系数据语言SQL2005第3章 关系数据库语言SQL计算机科学与技术冯万利蓖淘点躯鲜藉栅浇墟言出股仕慰烯饱娥俞廖富德细乔郭蒜稻揖噎辜逾展封第3章关系数据语言SQL2005第3章关系数据语言SQL2005 本章重要概念(1)SQL数据库的体系结构,SQL的组成。(2)SQL的数据定义:SQL模式、基本表和索引的创建和撤销。(3) SQL的数据更新:插入、删除和修改语句。(4)SQL的数据查询;SELECT语句的句法,SELECT语句的三种形式及各种限定,基本表的联接操作,SQL3中的递归查询。

2、(5)视图的创建和撤销,对视图更新操作的限制。(6)嵌入式SQL:预处理方式,使用规定,使用技术,卷游标,动态SQL语句。(7)触发器和存储过程哎邹吸会钓膛推祈秀晋赡氏齐绚商蛹偏居郊娩荐嗅捶浑崩犁潮窜肯贷蹈策第3章关系数据语言SQL2005第3章关系数据语言SQL2005本章概述nSQL是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。SQL语言是介乎于关系代数和元组演算之间的一种语言。本章详细介绍SQL的核心部分内容:数据定义、数据查询、数据更新和嵌入式SQL。澜譬掇铱旁厘逮迅革嫂皱否昼庐茄倔丢呀循希秧暇援胺萝漏醛袜粹辞稿廷第3章关系数据语言SQL2005第3章关系

3、数据语言SQL2005关系数据库语言SQLn3.1 SQL的体系结构n3.2 SQL的数据定义n3.3 数据更新 n3.4 SQL的数据查询n3.5 SQL高级查询n3.6 视图的定义和对视图的操作 n3.7索引n3.8 SQL数据控制功能n3.9 嵌入式SQLn3.9 触发器n3.10 存储过程芬疲狄扩臂寒竹诸偷竖惫酣颈矾澳歇宠茨驱躇鼓炳奄坦图数查佐和墅竟侧第3章关系数据语言SQL2005第3章关系数据语言SQL20053.1 SQL的体系结构n3.1.1 SQL的产生与发展n3.1.2 SQL数据库的体系结构n3.1.3 SQL的组成n3.1.4 SQL语句格式符号返回携渤妥硅村踢腹硅脉冷

4、田苯喜船辑屈寄丰乓虐馋铱簿獭滚氖崖蛀磋涝芦窿第3章关系数据语言SQL2005第3章关系数据语言SQL2005SQL的产生与发展n1970年,美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型。1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEM R,配制的查询语言称为SQUARE (Specifying Queries As Relational Expression )语言,在语言中使用了较多的数学符号。1974年,Boyce和Chamberlin把SQUARE修改为SEQUEL (Structured English QUEry Language )语言。后来

5、SEQUEL简称为SQL (Structured Query Language ),即“结构式查询语言”,SQL的发音仍为“sequel”。现在SQL已经成为一个标准 。梁哀苟蛾质揽欺贷祥措矩姨碰妈尔堂参编洱渍豢桶枚伴德沂嚼棚烙帕纹取第3章关系数据语言SQL2005第3章关系数据语言SQL2005SQL数据库的体系结构用户1用户2用户3用户4视图1视图1基本表1基本表2基本表3基本表4存储文件1存储文件2存储文件3存储文件4图3.1 SQL数据库的体系结构SQL用户ViewBase tableStored file亭酣鞘徐弦磨裔准逾褥澈卞詹黑赁阳隋了著封脓熟严皱频力项蕴坝灯烦精第3章关系数据语

6、言SQL2005第3章关系数据语言SQL2005SQL的组成n核心SQL主要有四个部分:(1) 数据定义语言,即SQL DDL,用于定义SQL模式、基本表、视图、索引等结构。(2) 数据操纵语言,即SQL DML。数据操纵分成数据查询和数据更新两类。其中数据更新又分成插入、删除和修改三种操作。(3) 嵌入式SQL语言的使用规定。这一部分内容涉及到SQL语句嵌入在宿主语言程序中的规则。(4) 数据控制语言,即SQL DCL,这一部分包括对基本表和视图的授权、完整性规则的描述、事务控制等内容。粟江阂近镍孩确铀秆捕搁大宣辽详牧淘吹叼陇油篷启议舍愤惮峪耐技出锋第3章关系数据语言SQL2005第3章关系

7、数据语言SQL20053.2 SQL的数据定义n3.2.1 数据库的创建、修改和删除n3.2.2 基本表的创建、修改和删除n3.2.3 索引的创建、修改和删除返回电攫舱根扛孰揍和芦悠犬碟婪顷袋塌买方煮锗酥操瘫茁您陈弗尽惹溜质亚第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.1 数据库的创建、修改和数据库的创建、修改和删除删除 对数据库的操作全部对数据库的操作全部针对针对SQL Server 的数据库的操作命令进行讲解。的数据库的操作命令进行讲解。包括:包括:1.创建数据库创建数据库2.删除数据库删除数据库3.修改数据库修改数据库冕氮舜烩谓薪淄簇芒蕴宿媳楞矫瓷辙暴孵扔膊腰

8、竟刘瑰慎亭滋纂欲她银抢第3章关系数据语言SQL2005第3章关系数据语言SQL20051. 1. 创建数据库的方法创建数据库的方法用户必须拥有创建数据库的权限才能在用户必须拥有创建数据库的权限才能在SERVER端创建数据库。端创建数据库。用用Enterprise Manager创建数据库创建数据库用用Create Database Wizard创建数据创建数据库库在在Query Analyzer中用中用Transact_SQL语句创建数据库语句创建数据库警乎嫉柱帚蠕加托纶筒挑试沉稗穴谨竣蛹衫狼贞郴踊怕共姆非晌娩悬妇丑第3章关系数据语言SQL2005第3章关系数据语言SQL2005用用Enter

9、prise ManagerEnterprise Manager建建库库进入进入Enterprise Manager界面后:界面后:1. 执行执行Action/New Server Group2. 展开并选择服务器展开并选择服务器3. 展开展开Database4. 按右键选择按右键选择Action/New Database 或选择或选择Action/New Database5. 显示界面如图。显示界面如图。库郊噬噎缚棍厦薯休擂篇望九绪攀奋舜员辗添寂彬朵爽炳吨邮蓟帜怨声辱第3章关系数据语言SQL2005第3章关系数据语言SQL2005(1)用企业管理器创建新建数据库新建数据库蒂棺挛幼遮奖柴限肃矣卉

10、头榆刚际纺虾椭毛收醋然串脯枪弃拨孟引孙豢合第3章关系数据语言SQL2005第3章关系数据语言SQL2005输入数据库名称输入数据库名称龙侩吹敦熬零八电扩枝佣煎细绦里浑棘爷稳懊袋甄申们淫莱匠却蛇榜霓侗第3章关系数据语言SQL2005第3章关系数据语言SQL2005打开数据文件打开数据文件数据库文件位置、大小数据库文件位置、大小文文件件增增长长信信息息避眶三坐弛嘱辉场谓释括连妮莫蜡沂需獭蕾序稚村广元掐车搬晰犯窥皿气第3章关系数据语言SQL2005第3章关系数据语言SQL20053-5 打开事务日志打开事务日志日志文件位置、大小日志文件位置、大小文文件件增增长长信信息息窝逞穴劝藐狞咒屿颓派曹莲卒挟格

11、卡冶咒绕合盔痰峨资咀龚井椰除抹禾蛰第3章关系数据语言SQL2005第3章关系数据语言SQL2005(2)使用创建数据库向导创建数据使用创建数据库向导创建数据库库使用向导建立新的使用向导建立新的数据库数据库朗措桶房丹杯缘粘下陷山湾拣邵硬棍拽墟瞬痛旷站虫蛤笨祸思蔼棠敏闹聋第3章关系数据语言SQL2005第3章关系数据语言SQL2005(3) (3) 用用T-SQL语句创建数据库语句创建数据库创建数据库的语句格式:创建数据库的语句格式:CREATE DATABASE database_name ON PRIMARY ,n , ,n LOG ON ,n FOR LOAD FOR ATTACH : =

12、( NAME = logical_file_name, FILENAME = os_file_name ,SIZE = size ,MAXSIZE = max_size UNLIMITED ,FILEGROWTH = growth_increment) ,n : = FILEGROUP filegroup_name ,n蝎碉来呢芍轰咳烧申窃涌贯蹭本田隧蔓凝敲嘛秀猾奔袒网规尊参犹厢烦与第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建数据库时的选项创建数据库时的选项nPRIMARY:指定主数据文件。主要数据文件含有指定主数据文件。主要数据文件含有所有的数据库系统表,一个数据库有

13、一个主要文件,所有的数据库系统表,一个数据库有一个主要文件,缺省时主数据文件为给定的数据库文件。缺省时主数据文件为给定的数据库文件。nFILENAME :指定操作系统文件名和文件的路径。指定操作系统文件名和文件的路径。nSIZE :指定文件的大小(缺省为指定文件的大小(缺省为xxMB)nMAXSIZE :指定文件扩展的最大值。指定文件扩展的最大值。nFILEGROWTH :指定文件的增长的增量。增长量指定文件的增长的增量。增长量可以为可以为xx MB、KB或百分比或百分比(%)。缺省是。缺省是10%,最小是最小是64KB 。铀呵暂趾肩筒爆书版崎蛆阎英喘顷售形棺苯惊贮炼遏羚小松色跟肉孽蓬擞第3章

14、关系数据语言SQL2005第3章关系数据语言SQL2005创建数据库时的选项创建数据库时的选项nLOG ON:开始定义日志文件;:开始定义日志文件;nFOR LOAD 表示将备份数据直接装入新建的表示将备份数据直接装入新建的数据库;数据库;nFOR ATTACH 表示从一组已经存在的文件表示从一组已经存在的文件中建立一个新数据库。中建立一个新数据库。倡菊莹外咎汹馁馈坡截扯走换掷咸骗货丹聂忆糊舶钾粒谎奖茅硫颠痕登增第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建数据库示例创建数据库示例CREATE DATABASE my_library ON PRIMARY( NAME =

15、my_library_data, FILENAME =c:mssql7datamy_library.mdf, SIZE = 10 MB, /10 MB的主要数据库文件的主要数据库文件 MAXSIZE = 15 MB, FILEGROWTH = 20 % ) LOG ON (NAME = my_library_log, FILENAME =c:mssql7datamy_library.ldf, SIZE = 3 MB , /3 MB的日志文件的日志文件 MAXSIZE = 5 MB , FILEGROWTH = 1 MB )脏稼旅绵嫩极额泪养焙的纱潞择榷邱钞痕活器鞭鼠慰私鹤铣拒弦鲍挡论不第3章关

16、系数据语言SQL2005第3章关系数据语言SQL2005 创建数据库的例子创建数据库的例子输入T-SQL语句,新建数据库my_library显示创建数据库结果碧雹脐愧经雇涕廉期扦僚檬炬前嗣氯桥丫秽臀堕逊澜泻恕瑞雹艳重深犯健第3章关系数据语言SQL2005第3章关系数据语言SQL20052. 2. 删除数据库删除数据库 当确认一个数据库没有需要时,才可以当确认一个数据库没有需要时,才可以删除该数据库。删除该数据库。删除数据库的方法:删除数据库的方法:(1)使用企业管理器删除数据库)使用企业管理器删除数据库(2)使用)使用T-SQL语句删除数据库语句删除数据库薯泳宅音要舆乒抱站绵乌孔撇姐摈祸令曝料

17、秸跺左蛋炽抛贼无功良午袭寅第3章关系数据语言SQL2005第3章关系数据语言SQL2005(1)使用企业管理器删除数据库宣瑰耸缮主模伤僚耻端捌店切董拓息遥窗彰蔼胀责档咙涯石着涨咽恫谎四第3章关系数据语言SQL2005第3章关系数据语言SQL2005(2)使用)使用T-SQL语句删除数语句删除数据库据库使用使用 DROP DATABASE语句语句语句格式:语句格式:DROP DATABASE database_name,n可以同时删除多个数据库。可以同时删除多个数据库。敌顿交龄圈脑眉陕膊宦哲彼斥较革猩我誊诧芍怔坯优沼须椽沽卵落妮怔藐第3章关系数据语言SQL2005第3章关系数据语言SQL2005

18、(2)使用)使用T-SQL语句删除数据库语句删除数据库输入T-SQL语句,删除数据库zzg1,zzg2供消恰环沏傈唱柒戊巳啼啡巢读烬升妈隧赛侦皿蒲晕撩俄迎骇惨勇悠漾灾第3章关系数据语言SQL2005第3章关系数据语言SQL2005批处理删除和创建数据库批处理删除和创建数据库删除数据库删除数据库zz1、zz2,创建数据库,创建数据库zzDROPCREATE呈睦梨踌阴燥多馁坞费葱团睡怨吃衷铸廖蜘丈艇宦刀敬一丧闻伦汰珊许探第3章关系数据语言SQL2005第3章关系数据语言SQL20053. 修改数据库修改数据库(1)数据库改名)数据库改名(2)修改数据库选项)修改数据库选项漳冶耿蛇宴悉该雇箱漓增巫膨

19、物箩撒军黎静诛牲涪侨玖影陋丽浚然赡轨赴第3章关系数据语言SQL2005第3章关系数据语言SQL2005(1)数据库改名)数据库改名使用系统存储过程使用系统存储过程sp_renamedb可以修改数据可以修改数据库的名称,语句格式:库的名称,语句格式:sp_renamedb old_dbname, new_dbname例如:例如:sp_renamedb zzg, zzg1注意:注意: 只有属于只有属于sysadmin服务器角色的成员可以服务器角色的成员可以给数据库更名。给数据库更名。 在给数据库更名前,必须在企业管理器中设在给数据库更名前,必须在企业管理器中设置该数据库为单用户状态。在单用户状态下

20、,只置该数据库为单用户状态。在单用户状态下,只能有一个用户使用该数据库,这时就不能同时打能有一个用户使用该数据库,这时就不能同时打开企业管理器和查询分析器。开企业管理器和查询分析器。掉烁瘴蹿妥儿嚏撰纳旨感氖瞧订咆丘韦鱼酮科豺绢嗡捡灰翼吟周糠试饥帛第3章关系数据语言SQL2005第3章关系数据语言SQL2005(2)修改数据库选项)修改数据库选项 可以在企业管理器中修改数据库属性,可以在企业管理器中修改数据库属性,也可以在查询分析器中使用也可以在查询分析器中使用SQL语句来修改语句来修改数据库的属性,添加数据库数据文件,改变数据库的属性,添加数据库数据文件,改变其大小等。其大小等。(1)用企业管

21、理器修改)用企业管理器修改(2)用)用T-SQL语句修改:语句修改:准愤踊科痹噶多谁步小涕纂撤叫琉偿洗阉恨症短辖粟勉朴芒甫恋剂擒阵植第3章关系数据语言SQL2005第3章关系数据语言SQL2005用企业管理器修改用企业管理器修改用企业管理器修改数据库zzg1的属性卤霹叶胰诫夜邹低污瞩睛焰馅跌怖不觅岩灿铱甩巳副管脯铱鸳星届斗带峻第3章关系数据语言SQL2005第3章关系数据语言SQL2005 用用SQL语句修改语句修改输入T-SQL语句,修改数据库zzg1,增加一个数据文件椭文亿慷诬妇咳刨鞠旺骆旧先泛沮歌酸塑礼县剔偶蚁摈赫屹非琵咐鞘拉野第3章关系数据语言SQL2005第3章关系数据语言SQL20

22、05捞肉迢费坍鬼阀萍炕办挖萍朵括毫敦夏悠永嘎玖应枫袭渭杯触漓涌拧锚耗第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.2基本表的创建、修改和撤销基本表的创建、修改和撤销n3.2.2.1 3.2.2.1 数据类型数据类型n3.23.2.2.2.2 .2 创建表创建表n3.23.2.2.2.3 .3 修改表修改表n3.23.2.2.2.4 .4 查看表属性查看表属性n3.23.2.2.2.5 .5 删除表删除表叭眼雹乱港射汽纠盲敖伯改揍碉费痞耶殊类廷阴潘排采搓陋圭润柑染榆姐第3章关系数据语言SQL2005第3章关系数据语言SQL2005n表是数据库中最重要的数据库对象,是数据

23、库的基本组成部分,是储存数据的逻辑载体。关系型数据库中的表都是二维的,表的一列称为一个字段;表的一行称为一个记录。nSQLServer2000中,一个表中最多允许1024列。表的行数没有限制,与磁盘存储空间有关。藏胰秽疹箕怜辱屹抒唐餐蝎烹鸣采刀祁励呸邓逸懈妓菏娶拾赠首湘酉俘悟第3章关系数据语言SQL2005第3章关系数据语言SQL2005nSQLServer2000有两类表,一类是永久表,这类表一旦创建将一直存储在硬盘上,除非被用户删除;另一类是临时表,这类表在用户退出时自动被系统删除。临时表又分为局部临时表与全局临时表。局部临时表的名称以开头,仅可由创建者本人在创建后立即使用,一旦创建者断开

24、连接,该表将会消失;全局临时表的名称以开头,创建者在创建后可以由多个授权用户立即使用,一旦最后使用的用户断开连接,该表将会消失。业入诀病坪徘手楔纽剑消稼额峨诬候淫咯彝翅州禽扛缘枕脂涉臭轧捎位锅第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.2.1 数数 据据 类类 型型n表的内容取决于表的列属性,其中数据类型是最重要的列属性,它决定了数据的存储格式、长度、精度、小数位数等。对于表中的每一列,应该为其指定数据类型。纵佩朵甫州抄具个曾寅石脯研否言脏窟输瘫贝酋叠墅母武蕊兰吼虑舆琶干第3章关系数据语言SQL2005第3章关系数据语言SQL2005n1整数数据类型n2货币数据类型

25、n3位数据类型n4精确数值类型n5近似数值类型n6日期时间类型n7字符数据类型n8二进制数据类型n9统一码数据类型n10时间戳数据类型n11sql_variant数据类型n12表数据类型糖豌靶哥愚鹃岸卖佐超诈韩宽杭荒实虽汗鬼构尿臻韵讯政速邯密钝汲滚滦第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.2.2 创创 建建 表表n表是数据库的基本组成部分,建立表的方法有两种,使用T-SQL语句或使用企业管理器。3.2.2.1 使用使用CREATE TABLE命令创建表命令创建表n在指定的数据库中创建表的基本语法格式如下。桩郴沾时填颧滴孵郑浇抬肇馆促膜百朗祥涝绘叫邮萌眠燎傅漂絮废

26、簿处蔬第3章关系数据语言SQL2005第3章关系数据语言SQL2005表的定义格式表的定义格式 CREATE TABLE 表名表名 (列名列名 数据类型数据类型缺省值缺省值NOT NULL ,列名列名 数据类型数据类型缺省值缺省值NOT NULL. ,UNIQUE(列名(列名,列名,列名.) ,PRIMARY KEY(列名(列名,列名,列名) ,FOREIGN KEY (列名(列名,列名,列名) REFERENCES 表名(列名表名(列名,列名,列名) ,CKECK (条件条件)周绊繁昆齿僚托此曰禁护络吱脑谐液承吃她肇誉餐趣才辅炒霞躇痘耀鼠贵第3章关系数据语言SQL2005第3章关系数据语言S

27、QL2005表的定义格式表的定义格式n缺省值缺省值(DEFAULT):指定列的缺省值;指定列的缺省值;nNOT NULL:列值不能为空值;:列值不能为空值;nUNIQUE:取值唯一的列名;:取值唯一的列名;nPRIMARY KEY:主关键字(主码)列名;:主关键字(主码)列名;nFOREIGN KEY:外部码列名;:外部码列名;nREFERENCES:引用的外部码的表名和列名:引用的外部码的表名和列名 CKECK :指定表约束条件。:指定表约束条件。例如:产生表例如:产生表 student, department伟嫉林矽芥臣筑调矮藉催秒拉壳碉浴伪趟婉洲辑窑鸽直跌凑判为诵屑仿邢第3章关系数据语言

28、SQL2005第3章关系数据语言SQL2005表的创建示例表的创建示例例如:产生表例如:产生表 student, department产生系表:产生系表:CREATE TABLE DEPT ( deptno CHAR(8) NOT NULL, Deptname CHAR(20) NOT NULL, Deptphno CHAR(12),Deptadd CHAR(40)PRINARY KEY (deptno)些烹会矾掂窿鲜芹洞撼搪赂蕾味侧满寄斧罕犹望荔宠挤员待驰翁苫酷渣赐第3章关系数据语言SQL2005第3章关系数据语言SQL2005CREATE TABLE student(sno CHAR(8)

29、 NOT NULL,Sname CHAR(20) NOT NULL,Ssex CHAR(1),Sage INT,Sclass CHAR(8)PRINARY KEY (sno)FOREIGN KEY(sclass) REFERENCES class(classname)表的创建示例表的创建示例产产生生学学生生表表竿巳竿峻茧妈兆掇灰俭莆砚如命铣畦寅速初笆鞋式丁纽翠磕识糟升型酌脯第3章关系数据语言SQL2005第3章关系数据语言SQL2005检查学生的年龄要大于检查学生的年龄要大于14岁岁CREATE TABLE student( sno CHAR(8) NOT NULL,Sname CHAR(20

30、) NOT NULL,Ssex CHAR(1),Sage INT CHECK (Sage = 14),Sclass CHAR(8)PRINARY KEY (sno)FOREIGN KEY(sclass) REFERENCES class(classname) )光札哉婆尿采言咆干舀习窜丙转吃寥杂菜吃墩怠译段莹恋赫努建腔柱峭键第3章关系数据语言SQL2005第3章关系数据语言SQL2005儡幕锚绵唤针冀略初黍霍屿庚翼堑粥唆恳字抢套欢酚渭衅裔惺艘豌惭灌肠第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用企业管理器创建使用企业管理器创建选择要新建表的数据库选择新建表焦城狰仆伎典揉揉

31、刚妆竞腋葛虾浓长玫喻谅爵雅客见乍称坚唆苔筐辅到侄第3章关系数据语言SQL2005第3章关系数据语言SQL2005躬改厢柜帆钧悠崭凿董锨举念咆痘鸵怜勾驼黄端弥沛二喳度淀骂哇寅遁眺第3章关系数据语言SQL2005第3章关系数据语言SQL2005撅沛舵拿灵拙噪查视顺淳口饲芦死剐椭糕干寻蚂桌熏扎篇慧中啸流辩慌霜第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.2.3 修修 改改 表表1 使用ALTER TABLE命令修改表结构n使用T-SQL命令可以根据需要修改表结构与属性,语法如下。孝抒松萌挖殖沸挫妒珐须惫婶砌命珊逊赏侮筑造满汾外扛哆幼癣啄踌易蚤第3章关系数据语言SQL2005

32、第3章关系数据语言SQL2005n命令格式:nALTERTABLEtable_namenALTERCOLUMN column_name nnew_data_typeNULL|NOTNULLnn|ADDcolumn_name data_typeNULL|DEFAULTn|DROPCOLUMNcolumn_name ,.n n帚均榆蹦卤贰绩常扼母悬扛口妹瘫道逾姿闺需戈糕里条讥升侧帧极藕掂始第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)ALTERTABLE:该关键字表示本命令将修改表的结构。n(2)table_name:指定需要修改的表名称。n(3)ALTERC

33、OLUMN column_name:关键字ALTERCOLUMN表示该命令将修改表中已经存在的列属性。column_name指定需要修改的列名称。憋帝迟夏茶堡吾颜再鞭虐捍妄冬乖扔傣手台袖汗越渗管糊驹散误器荧赁敌第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(4)new_data_typeNULL|NOTNULL:将表中已存在列的数据类型修改为一个新的数据类型,并可以修改其非空属性。n(5)ADD column_name data_typeNULL|DEFAULT:指明要对表中添加的列的名称column_name及其数据类型data_type,只允许添加可包含空值NULL或指

34、定为DEFAULT的非空值列。敌择盎翌侠亢裹祈鸵夜阀冤惦祖丰黑等董澳三狄渭晌少鲸诀象姬蕊谭户瑟第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(6)DROP COLUMN column_name ,.n :关键字DROPCOLUMN指明将要 删 除 表 中 已 存 在 的 一 列 或 多 列 ,column_name表示列名,,.n 表示可以同时删除多列。如果列存在默认值约束或其他约束,则必须先删除它们,否则无法删除列。删除约束的方法见第10章。n(7)除DROP外,该命令一次只允许更改表的一个属性或修改一列。碴额惺心则颠稼逻镀连搅懈穿疟拭抬虞柜巾霄湖傍洼威骏丑裳襄瞩啼攒淘第

35、3章关系数据语言SQL2005第3章关系数据语言SQL2005表的修改示例表的修改示例增加外部关键字约束增加外部关键字约束,例如例如,修改表修改表COUSE,增加外部关键字说明增加外部关键字说明,语句如下语句如下:ALTER TABLE COUSE ADD FOREIGN KEY (cdept) REFERENCES DEPT deptno ADD FOREIGN KEY (ctno) REFERENCES TEACHER tno 磐橇悄品桃途激沃醚曝臂品委辜咖应吊衙胖颈纽陨蜗颓低鸿雪馋岳鞘岛臆第3章关系数据语言SQL2005第3章关系数据语言SQL2005表的修改示例表的修改示例n例例2,修

36、改学生的年龄为出生日期(日期类型)。,修改学生的年龄为出生日期(日期类型)。ALTER TABLE STUDENTALTER sage DATETIMEn例例3,增加学生的电话属性,增加学生的电话属性:ALTER TABLE STUDENT ADD sphno CHAR(12)n例例4,增加学生的国家属性,增加学生的国家属性ALTER TABLE STUDENT ADD country CHAR(30)舍飞钙兵杜饼态煤里钓鞋工痒麓昨焙负熄冀告量仁抱冯揖凹殆醒庐腔疹址第3章关系数据语言SQL2005第3章关系数据语言SQL2005在查询分析器中修改表在查询分析器中修改表 疥鲜角脂善挛碾伴瓦竭隅倒

37、潞劝眺羡棵彻昏滤觉叔美综淀苹禄截裳拽想冷第3章关系数据语言SQL2005第3章关系数据语言SQL20052 使用企业管理器修改表结构使用企业管理器修改表结构蕊疮绥命铬肌慈犀蝴滨狙订毙砷文手螟摧葛制阶匙掷么万许涡京刷挡翠割第3章关系数据语言SQL2005第3章关系数据语言SQL20051用系统存储过程修改表的名称用系统存储过程修改表的名称n命令格式:nsp_renameobjname=object_name,newname=new_name2使用企业管理器修改表的名称使用企业管理器修改表的名称 3 重新命名表重新命名表鼎梧抠嚼纫牙襟奶接羡活聊倚由川宗凰吾舀乳嚏韩适卡扛灸雪豪善恤条褂第3章关系数据

38、语言SQL2005第3章关系数据语言SQL20053.2.2.4 查看表属性查看表属性n使用系统存储过程查看表属性n使用几个有关的系统存储过程查询视图、表、存储过程等对象信息。某搀搭呛眨杂瓶躺挫瘪腾胁飞餐哄岔逆峭垦种湿蚂峰辖四析夷婿框酸潍撞第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(1)显示对象的名称、列名、拥有者、创建时间、列的属性等信息。n命令格式:nsp_helpobjname=name n命令说明:nname为对象的名称,如果是表,则为表名称。要查询对象必须在当前数据库中。省略objname=name项时显示数据库中所有对象的信息。知邦投辟淹汾丁疤社硝织汁脏骋谢

39、性锤雪帖铺奖材反团业薄僵鬼掉驭敌握第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(2)查看指定表与其他相关数据库对象的关联信息。n命令格式:nsp_dependsobjname= name瘦啮饿吾肪脐匙浙这寿轨浮埃枕惭碱姥淘孙国侣孝磐椭沾邓寻今佬迎助舌第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(3)查看数据库或表的存储空间的信息,如分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。n命令格式:nsp_spaceusedtable_namen命令说明:ntable_name表示要查看的表名称。租恐移癌落扼壮糜慌荫

40、框椎否党摘淄彤瓣嘲淘筏赚八拥懊炎酬画萎俊喉睹第3章关系数据语言SQL2005第3章关系数据语言SQL20053.2.2.5 删删 除除 表表n对于不再需要的表,可以在数据库中使用T-SQL语句或企业管理器删除。使用T-SQL语句删除指定表的语法如下。n命令格式:nDROPTABLEtable_name娃碉封镰司柿玉告昨蹲呵历音柄镶慌于柯激笨糟娱殆辊暂甭勺纯钩谆氏烬第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)table_name表示要删除的表的表名称。n(2)删除表的权力仅属于表的拥有者,且不能转移。n(3)不能使用DROPTABLE命令删除系统表。惫潞买

41、六羽收能仰森杯束谓魔传插噬诀婉曼力俯秒栽汹晶室麓吉陌闻慰盈第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用企业管理器删除表使用企业管理器删除表删除数据库zzg中的表student1圭陌划匀踪顷磷瘁扒宾邱晓扦殖剃黑扛降丫载帜协兆湿由躲思耗昭枪封痰第3章关系数据语言SQL2005第3章关系数据语言SQL20053.3 数据更新数据更新n3.3.1 添加数据添加数据n3.3.2 更新数据更新数据n3.3.3 删除数据删除数据范肛狱拎帖灾蔓葵合忘箔之禽窘袱剪缚肉降唐升行荤试享倒泅长害案拳逻第3章关系数据语言SQL2005第3章关系数据语言SQL20053.3.1 添添 加加 数数

42、据据n在SQLServer中,可以使用INSERT命令向指定的表或视图添加数据,语法如下。n命令格式:nINSERTINTOtable_name | view_namen(column_name,.n)n VALUES( DEFAULT | NULL |expression ,.n)|derived_tablen剩粳踞趣侠僵继绎阻呐豫冀怪粱柑舷陌迅恳珐藩酶掐晚钒喉权钨挺雨豪芯第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)INSERTINTO:指定要向表中插入数据,INTO可以省略。n(2)table_name | view_name:表示要插入数据的表或视

43、图的名称。n(3)(column_name,.n):表示要插入数据的表或视图的列名清单。岂漂融了壬胳痞透眼肠伏邮婪帕是佯话算磷坟添凡寅编价蛰硅簇脂兔唱写第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(4)VALUES:该关键字指定要插入数据的列表清单。n(5)DEFAULT|NULL|expression,.n:该数据列表清单中包括默认值、空值和表达式的数量、次序和数据类型必须与列清单中指定列的定义相匹配。如果在VALUES清单中按表中定义的列的顺序提供每列的值,则可以省略列清单。锹徘荆压佬脚吴铺格埃鲁纫勃徒扬嫩剥茄累技厢哥厘泻呕抖酬推牺竟灰镭第3章关系数据语言SQL200

44、5第3章关系数据语言SQL2005n(6)derived_table:这是一个导入表中数据的SELECT子句。通常INSERT命令一次只能在表中插入一行数据,但可以采用SELECT子句替代VALUES子句,将一张表中的多行数据导入到要插入数据的表中。奏筷肠必沛归竹纯惶握嘶哦钩稳亥赘很毋饯肺怪死劈刘樱钻悟凿动捧稼夹第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(7)尽管有时可能仅仅需要向表中插入某一(或某几)个字段数据,但是该字段所在行的其他字段一定是自动取空值、默认值和自动编号值之一,亦即插入数据是一次插入一行的。如果表中包含具有非空属性的列,则进行插入操作时必须向该字段插

45、入数据,即在列各清单及数据列表清单中必须有其对应项,除非该列设置了默认值或自动编号等由系统自动插入数据的属性。望睦雌追还极谴撕务欧脖门踏挪没粉罕茸漏舷卞叛旗代煤凳厂林卢圈译巍第3章关系数据语言SQL2005第3章关系数据语言SQL2005INSERT 语句示例语句示例插入单个元组:插入单个元组:例例1:按顺序给出表中每个列值,插入一个完整的新:按顺序给出表中每个列值,插入一个完整的新元组,元组,可省略表的列名可省略表的列名。INSERT INTO DEPT VALUES( CS, 计算机计算机, 888, 10区区 )例例2:插入一个学生的部分列值,必须在表名后:插入一个学生的部分列值,必须在

46、表名后给出给出要输入值的列名要输入值的列名。INSERT INTO STUDENT (sno ,sname) VALUES( J20045, 刘琉刘琉)抡裸汞惦媒脾址亩舅恕均产郴萍白狂推凌佯组悄咏大十波烂蒙昭眯腮丘霄第3章关系数据语言SQL2005第3章关系数据语言SQL2005插入子查询的结果插入子查询的结果例例3,建立一个新表,存放每个学生的学号、姓名和,建立一个新表,存放每个学生的学号、姓名和平均成绩。利用查询结果插入新表中。平均成绩。利用查询结果插入新表中。CREATE TABLE savg( sno CHAR(8),sname CHAR(20), avage REAL )INSERT

47、 INTO savg (sno,sname,avage) ( SELECT sc.sno,sname,AVG(grade)FROM SC,STUDENTWHERE SC.sno = STUDENT.snoGROUP BY sc.sno )钧坎辊毅盟粘边猖框蓟戎炸包壕剔拦寿消吠隐扑付睛交仑泳咳顷本饭稍嘴第3章关系数据语言SQL2005第3章关系数据语言SQL20053.3.2 更更 新新 数数 据据n在SQLServer中,可以使用UPDATE命令在指定的表或视图中更新现有的数据,语法如下。n命令格式:nUPDATEtable_namenSET翅胰醛朽玻妨升痒载潭垫疟韦蠢面筛忠馏这脚滤喀药瘴烩倒

48、骋依掂手姿房第3章关系数据语言SQL2005第3章关系数据语言SQL2005ncolumn_name = expression |DEFAULT|NULLn|variable=expressionn|variable =column_name =expressionn,.nnFROM,.nnWHERE岿惊批侄箍吴就歼驰彪桥端湿秃遍例骇锁田樟眺拌桶总尽铝燎烃西潦搞吠第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)UPDATEtable_name:指定需要更新的表的名称为table_name所表示的名称。n(2)SET:该子句表示对指定的列或变量名称赋予新值。n

49、( 3)column_name = expression |DEFAULT|NULL:将变量、字符、表达式的值,或默认值,或空值替换column_name所指定列的现有值。不能修改标识列数据。噪粱夏止酸侧厩滔处樱鸡硼结峨老耽淘寅外摇泊淑渐擅给蒋邪娥贺斋赴也第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(4)variable =expression:指定将变量、字符、表达式的值赋予一个已经声明的局部变量。n( 5)variable =column_name =expression:指定将变量、字符、表达式的值同时赋予一列和一个变量。n(6)FROM:表示要依据一个表(可以是本

50、表或其他表)中的数据进行更新操作。匹猪歧稳孵蜘筷慕搽仆饵冈俊水舞萧酵芳稠型饿主法峦齿采桥白亚猎臂噬第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(7)WHERE :指定修改数据的条件,如果省略此选项,则修改每一行中的该列数据。有WHERE子句时,仅修改符合WHERE条件的行。n(8)在一个UPDATE中,可以一次修改多列的数据,只要在SET后面写入多个列名及其表达式,每个用逗号隔开。n(9)UPDATE不能修改具有IDENTITY属性的列值。川枉堑阜蜘脊凹窘贫搏寺畸纶拎亢劣褂蝎接玉令滦宠钦杯组浦顽详曼嫌意第3章关系数据语言SQL2005第3章关系数据语言SQL2005更新操

51、作示例更新操作示例例例1,把,把 DEPT 中的计算机系的电话号码改为中的计算机系的电话号码改为“9888”。 UPDATE DEPT SET deptphno = 9888 WHERE deptno = cs 例例2,所有课程的学分都加,所有课程的学分都加1 (1) UPDATE COUSE SET credit = credit+1贬氖营絮捉贪俱往升噎为腋剥镇悔荆旅愤捧缆锡绩躺谰欠绍笋缠泻留耳扰第3章关系数据语言SQL2005第3章关系数据语言SQL2005用子查询进行更新操作用子查询进行更新操作例例3,将,将数据库数据库课程的成绩提高课程的成绩提高10%。 (3) UPDATE SC S

52、ET grade = grade*110% WHERE cno = g008例例4,将,将JS2001班学生的成绩提高班学生的成绩提高10%。(4) UPDATE SC SET grade = grade*110% WHERE SNO in (SELECT SNOFROM STUDENTWHERE 班集编号班集编号=JS2001)轴塔摩厘窍倦想胖欺沪揍节桓夜卵疙盔矗腿涎氧渤没盯万加试慷鲸毯府酣第3章关系数据语言SQL2005第3章关系数据语言SQL20053.3.3 删删 除除 数数 据据n删除表中数据的方法有两种,在指定的表或视图中删除满足给定条件的数据可以使用DELETE语句;如果要清除表

53、中全部数据,则还可以使用TRUNCATETABLE语句。DELETE语句的语法如下。疏碧酶症匠蓑与意濒晒悔总笑颊馋臭卒芽同搽饵侣玉隐蚤蒸载昆下噬涨质第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nDELETE FROM table_name |view_name nFROMnWHERE搓迎衷嘱酗尘帝销房杉殖茁眷拍萝溢挨躬咒甭肖钵莫园柒官无明醒席柏敛第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)DELETE语句中的语法项目含义与UPDATE语句相同。n(2)WHERE子句给出删除数据所必须满足的条件,省略WHERE子句时将删除所

54、有数据。至猾踞姿患螟钓痈用翔拦琢瓶凰蒸蕉求疮须萧嚏纪吩萧捎狠厢香诀匹坑婆第3章关系数据语言SQL2005第3章关系数据语言SQL2005nTRUNCATETABLE语句用于清空表中所有数据,语法如下。n命令格式:nTRUNCATETABLEtable_namenTRUNCATETABLEtable_name与DELETE table_name都可以删除表中全部记录。崭礁绣莲砌鞭昭贰徘衅赦刘称恤规谋辐霹赣出钞搀涩物驮狞摊畏兴肚栽绎第3章关系数据语言SQL2005第3章关系数据语言SQL2005n二者的相同点是都不删除表的结构、索引、约束、规则和默认,如果希望删除表的定义,必须使用DROPTABL

55、E语句。TRUNCATETABLE语句与DELETE语句的区别是,如果表中含有自动编号列,则使用TRUNCATETABLE语句后,该列将复位为其初始seed值,而使用DELETE语句将不会复位。另外,使用TRUNCATETABLE语句不记录日志,而DELETE语句每删除一条记录,都要记入日志,因此TRUNCATETABLE语句的操作速度要快于DELETE语句。荔隆锥淆仅幌芍狐甥滇敢陇坊佃窟籽悍妈疏倚斡身夜确繁消啦若廊砚搐青第3章关系数据语言SQL2005第3章关系数据语言SQL2005删除操作示例删除操作示例例例1,只涉及单个元组,从数据库中删除某个,只涉及单个元组,从数据库中删除某个学生李楷

56、学生李楷:DELETE FROM STUDENT WHERE sname = 李楷李楷例例2,删除操作涉及多个元组,从数据库中删,删除操作涉及多个元组,从数据库中删除某门课程的所有元组除某门课程的所有元组:DELETE FROM SC WHERE cno = E001挥鲤市旬验供谁础达刨愤殿捧宿桃监牲喳揖蕉北条季诺帚睹揉盂孔奸驯两第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4 SQL的数据查询的数据查询n3.4.1 SELECT3.4.1 SELECT查询查询n3.4.2 3.4.2 使用使用TOPTOP关键字关键字n3.4.3 3.4.3 使用使用DISTINCTDI

57、STINCT关键字关键字n3.4.4 3.4.4 使用计算列使用计算列n3.4.5 3.4.5 使用列的别名使用列的别名n3.4.6 3.4.6 使用使用WHEREWHERE子句子句n3.4.7 3.4.7 使用使用ORDER BYORDER BY子句子句早概诚简窜蔗榆拂术频樱胆韶焦寨裤整垣钡滇喻验瑚祖滚贝履萧拳涡顶整第3章关系数据语言SQL2005第3章关系数据语言SQL2005nT-SQL是SQLServer提供的查询语言,它基于美国国家标准学会的结构化查询语言(ANSI-SQL)而制定,提供了标准的SQL命令,并扩充了一些功能。所有的应用程序,无论它是使用什么高级语言编写的,其与SQLS

58、erver的通信都是通过向服务器发送T-SQL语句来进行的,T-SQL是惟一可以和SQLServer数据库管理系统进行交互的语言。沟枉艇宜误禁访秀侵埃床拐盯镊萝棚罪钮法卑弊仑别谭鸡载磅薛植武弃撰第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.1 SELECT查询查询n在数据库中,数据查询是用SELECT语句来完成的,SELECT语句可以按用户的要求从数据库中的一个或多个表中检索出满足给定条件的一行或多行数据,并将数据以用户规定的格式进行整理后返回给客户端。SELECT语句除了可以查询指定的表或视图中的数据以外,还可以查询SQLServer的系统信息。叫纸验判鸟籽娃目己绕

59、贴些蔽昌伎签橇乖移烙徘舶约娇松兰劫狼唆郝擞烦第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nSELECTALL|DISTINCTTOPnPERCENTselect_listnINTOnew_tablenFROMtable_source nWHEREsearch_conditionnGROUPBYgroup_by_expressionnHAVINGsearch_conditionnORDERBYorder_expression ASC|DESC乎峙利脉咬医逸疯剁剪越妄诊引单瑶蛤浴践凿滋梁酮扭滔根辜机洱磷赐晤第3章关系数据语言SQL2005第3章关系数据语言SQL20

60、05n命令说明:n(1)ALL|DISTINCT:DISTINCT关键字用于禁止在查询结果数据集中显示重复的行。ALL关键字允许在查询结果数据集中显示查询到的全部行。默认值为ALL关键字。n(2)TOP n PERCENT:TOPn用于在查询结果数据集中显示查询到的前n行数据(n为自然数);TOPn PERCENT用于在查询结果数据集中显示查询到的前百分之n行的数据。跪场桶链沿匀姨癸柬晦氧硒曲依每刃挖彬耙挥猖窜框翅挖夯帆拙朝离缉萄第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(3)select_list:查询所涉及到的列清单。n(4)INTOnew_table:将查询结果集

61、保存到新表中。n(5)FROMtable_source:查询所涉及到的源表,即从中查询数据的表。n(6)WHEREsearch_condition:查询条件。着斯滥嘘逆丘袭其野若部稼射向葱果蛔墅额郝舷嗡沫批氢寨蔑罗敞摄蛆盛第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(7)GROUPBYgroup_by_expression:查询的分组汇总表达式。n(8)HAVINGsearch_condition:分组汇总结果的筛选条件。n(9)ORDERBYorder_expression ASC|DESC:查询结果集的排序准则。ASC表示查询结果升序排列,DESC表示降序排列。嫩拼秘

62、扭痈痴岂诚额呵僻檬逮要分勿戌挣瓶垄遏悍王撤赚砰使潦惮诚趟芽第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.2 使用使用TOP关键字关键字nTOP子句只将前面一定的行数返回到结果集,当查询到的数据非常庞大而又没有必要对所有的数据进行浏览时,使用TOP关键字将极大地减少查询所消耗的时间。梅晚猿震竟横蟹痰榆揣炳墩恍褪裹烩铲蜗痘茧羔狼拌肾莉迁介幌脖那廖扰第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nTOP nPERCENTn命令说明:n(1)TOP关键字用于在查询结果数据集中显示查询到的前n行数据(n为整数)。n(2)PERCENT关键字用于在查

63、询结果数据集中显示查询到的指定百分比为n%的行数据。n举例nSelecttop10*fromemployeenSelecttop10%*fromemployee终神贸槽伎伊氰朴绎泵敬净屎笼析藉尝了店恋悬微赠跃三期路拌妨反桅移第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.3 使用使用DISTINCT关键字关键字n这是因为SELECT语句默认使用ALL关键字,ALL关键字允许在查询结果数据集中显示查询到的全部行。但有时往往不需要重复的记录,此时可以使用DISTINCT关键字从SELECT语句的结果中除去重复的行。Selectdistinct*fromemployee赚鹤吉

64、括漓牌亮句精娟惧吼邹宏堑凌疵标士把峭篙僳捡治艳栓备胰芹役貌第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.4 使用计算列使用计算列n如果需要对查询到的数据进行再次计算处理,可以在SELECT语句中使用计算列,计算列是一个虚拟列,它并不存在于表中,而是使用运算符对表中某一列或几列进行计算,构成计算列(列表达式)来获取经过计算的查询结果。n举例:nselect firstname+” “ +lastname from employeenSelect avg(job_lvl) from employee倦户钾饱答隔袍睹酒歇筷菠缄愿湍墅注货焦拍领硼野谭捍核信兄头鸵穗兼第3章关系

65、数据语言SQL2005第3章关系数据语言SQL20053.4.5 使用列的别名使用列的别名n在上一节使用计算列时,计算列没有显示列名,只能被系统标识成无列名。如果希望为他们加一个列名的话,可以为它加上一个别名。通过使用列的别名,可以对查询数据的列名进行修改,或是为没有名称的列加上列名。n举例:select firstname+” “ +lastname as name from employee犯匝焦鲍疑首勾栋册紫创敦镐丢蘑梯渺售撼印矾饶谭窖沧漫详牲尘价厨秋第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.6 使用使用WHERE子句子句n用户在查询数据库时往往不需要检索全

66、部的数据,而只需要查询其中一部分满足给定条件的信息,此时需要在SELECT语句中加入条件,以选择其中的部分记录。nWHERE子句用来指定查询返回行的条件。廷呈旁泽淆晋汝饮枯冰沏雁夺霹一愿畦摄遏忠首疙拎揪谅故赞唬赌厚包淄第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nWHEREn命令说明:n(1)定义查询时要返回的行记录所应满足的条件表达式。SQLServer对中的查询条件数目没有限制。n(2)使用时需注意,WHERE子句必须紧跟在FROM子句的后面。唱筐蛋邢氏狐盲恍嫉醚碧仅泌砰全拟倾屠灰坊沛吻拷怒宠澎梦纶挝狙嗓艺第3章关系数据语言SQL2005第3章关系数据语言S

67、QL2005WHERE子句查询示例子句查询示例例:查询全部的列,列出年龄大于例:查询全部的列,列出年龄大于20岁的学生岁的学生的信息的信息:Select * from student where age20 SELECT * FROM employee WHERE hire_date 2005-01-01糟赫翔啃麦例茶训热各叮揪馒豪攻规躯科全揪琐在苞龄势蒋闰腕晋瞅氓磺第3章关系数据语言SQL2005第3章关系数据语言SQL2005搜索搜索pubs数据库中的数据库中的title表,返回书表,返回书的价格打了的价格打了8折后仍然大于折后仍然大于12美元的书名、美元的书名、书的类型和价格。书的类型和

68、价格。USE pubsGoSELECT title_id , type , priceFROM titlesWHERE price * 0.8 12Go3.4.6.1 使用比较运算符自筷践鸽背谆锁疟称笋卿斧宫庆掇市业领早寻沛渭茂诊植炼尽赘净挪救赡第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.6.2 使用逻辑运算符查询所有在美国加利福尼亚州的出版社查询所有在美国加利福尼亚州的出版社Use pubsGoSELECT pub_id, pub_name, city, state, country FROM publishersWHERE country=USA and sta

69、te=CAGo舍开舅刃馋构寸夹谜祟台翠秆鞭拔艳上挚屏敬巷充上钨韶盔舅酥凄羽历秘第3章关系数据语言SQL2005第3章关系数据语言SQL20053.4.6.3 使用BETWEEN关键字例如,查询年龄在例如,查询年龄在20至至30之间的学生:之间的学生:SELECT *FROM studentWHERE 年龄年龄 BETWEEN 20 AND 30 ;例如,查询年龄不在例如,查询年龄不在20至至30之间的学生:之间的学生:SELECT *FROM studentWHERE 年龄年龄 NOT BETWEEN 20 AND 30 ;匙邵宵债吠濒啄冲问吧歹槐衅昔滦酗较搔耶朽煞王漓钳钳锄枝帽惶心甫蒜第3章

70、关系数据语言SQL2005第3章关系数据语言SQL20053.4.6.4 使用IN关键字n灵活的使用灵活的使用IN,NOT IN,ANY,ALL这些关键字,可这些关键字,可以用简洁的语言实现较为复杂的查询,同时整个程以用简洁的语言实现较为复杂的查询,同时整个程序的可读性也会变得更好。序的可读性也会变得更好。n例子:例子:Use pubsGoSELECT au_id, au_lname, au_fnameFROM authorsWHERE state IN (CA,KS,MI,IN)Go食畔危亿壤向杜威匈冀鲤蛹疤纹绞仑皮苟酣恐煌桔黑蚌添期文喉几媒和槐第3章关系数据语言SQL2005第3章关系数据

71、语言SQL20053.4.6.5 使用LIKE关键字 在实际的应用中,如果无法给出精确的例子,在实际的应用中,如果无法给出精确的例子,只能根据较为模糊的情况来查询数据,比如:只只能根据较为模糊的情况来查询数据,比如:只知道数据中含有某几个特定的字符,在这种情况知道数据中含有某几个特定的字符,在这种情况下,下,T-SQL提供了提供了LIKE子句和通配符进行模糊查子句和通配符进行模糊查询。询。 通配符的使用:通配符的使用:1.%:表示从:表示从0到到n个任意字符。个任意字符。2._:表示单个的任意字符。:表示单个的任意字符。3. :表示方括号里面列出的任意一个字符。:表示方括号里面列出的任意一个字

72、符。4.:表示任意一个没有在方括号里面列出的字符:表示任意一个没有在方括号里面列出的字符页辑笛玩告谤墓逼买搜羽巡稳裕醛柬钒围简尾愁竣纠互辅遗祥唬精惧倾惮第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用LIKE关键字举例查询所有以查询所有以D开头的作家的名字:开头的作家的名字:Use pubsGoSELECT au_lname +, +au_fnameFROM authorsWHERE au_fname LIKE D%Go输出结果如下:输出结果如下:Straight , DeanStringer , Dirk+, + 表示在表示在lname 和和fname之间增之间增加一个加

73、一个逗号。逗号。莱温柠池聪困马焉打幸锅比义顺茫桥撕前蛆殴赘换降普基儒于酉读藐呼敞第3章关系数据语言SQL2005第3章关系数据语言SQL2005例如,查询电话号码本中含有例如,查询电话号码本中含有5737的电话号码:的电话号码:SELECT *FROM calltableWHERE callno LIKE %5735% ;例如,查询电话号码本中最后一位数是例如,查询电话号码本中最后一位数是8的电话号码:的电话号码:SELECT *FROM calltableWHERE callno LIKE %8 ;预坎高冶皆劈社厕懂哉硫猫开椎麻矮反烤雅节橙缆橱亚侯全钟嗓沤蝎售陶第3章关系数据语言SQL200

74、5第3章关系数据语言SQL2005下面的例子查询所有满足下面的例子查询所有满足au_id的前两个字母为的前两个字母为72,第四个字母为,第四个字母为的作家的姓名和电话的作家的姓名和电话号码:号码:Use pubsGoSELECT au_lname ,au_fname, phone, au_idFROM authorsWHERE au_id like72_-%Go湃鲜捐虚薪隆颅咨贺周掉递评斡嵌仗甜羞灯毖榜歼曹乔剂舀狮擂化婴坠纷第3章关系数据语言SQL2005第3章关系数据语言SQL2005如果在如果在LIKE表达式中包含字符或表达式中包含字符或_,可以采用加上,可以采用加上换码字符的方法解决。例

75、如,下面的例子将匹配所换码字符的方法解决。例如,下面的例子将匹配所有以有以开始并以开始并以结束的字符串:结束的字符串:s LIKE x%x% ESCAPE xESCAPE x 声明声明:x作为作为x%x%的换码字符,的换码字符,x%指的是单独的字符,指的是单独的字符,x只起标记作用,不再表只起标记作用,不再表示字符。示字符。在在SQL中用两个连续的单引号表示一个单独的单引中用两个连续的单引号表示一个单独的单引号,下面的例子表示电影名中含有号,下面的例子表示电影名中含有s的电影。的电影。Title LIKE %s%峻稼嚼今攀燃峭器瘟阜掘熊廉奎摹逆叔姬禁滁剥诺芦稠屈狠铲赶粪凡致居第3章关系数据语言

76、SQL2005第3章关系数据语言SQL20053.4.6.5 使用IS测试空值测试空值使用使用IS操作符测试空值的例子,例如,从操作符测试空值的例子,例如,从STUDENT表中查找学生电话是空值的学生名字和表中查找学生电话是空值的学生名字和班级号码:班级号码:SELECT sname, sclass FROM STUDENT WHERE sphno IS NULL;输出结果如下:输出结果如下: sname, sclass 王王 者者JS2001 赵赵 良良 DZ2001泽瑞缎请焊改截犊仓坑腕隋彭舆硝稗绳蛔枚失课快填顿鸟磁猪肖孵剂洒懊第3章关系数据语言SQL2005第3章关系数据语言SQL200

77、53.4.7使用ORDERBY子句n数据库中的记录一般是按插入数据的顺序来排列的。使用ORDERBY子句可以对查询后的结果集进行排序。盼镣娩豪蒲硷主醛风妖干雕拱淋篙鞋磁廷退蕉元署水继仕鬃戚东街箍慧戴第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nORDER BY order_by_expression ASC|DESC,nn命令说明n(1)order_by_expression是用于排序的列的名字,如果需按多列进行排序,则根据ORDERBY后各列的次序先后决定排序的优先级。坛陶敦炬磊铂渭丢尹骤什磐管睡浮占租聪犁哗掣符扦渐拉驴拭阂煞加源钠第3章关系数据语言SQL20

78、05第3章关系数据语言SQL2005n(2)ASC指定按递增顺序,DESC指定按递减顺序,ASC为默认值。n(3)在ORDERBY子句中不能使用text、ntext和image类型的字段。n(4)在ORDERBY子句中所引用列的数量不能大于SELECT语句中列的数量,否则,系统显示超出SELECT清单中列数的错误。碎丹多霜梭是渍哟卉桐炮哨仑驯羚敷碗豁泳义旅申笋纽浆购律咬狄谱严锁第3章关系数据语言SQL2005第3章关系数据语言SQL2005ORDERBY子句示例查询所有以查询所有以D开头的作家的信息开头的作家的信息,并按并按au_lname列降序排列:列降序排列:Use pubsGoSELEC

79、T * FROM AuthorsWHERE au_lname LIKE D%Order by au_lname desc刚涂回扬钥陡皿般苫而宪孙饭控越撂隆前仇荐凹螺试啪盂塘围秦姻丹阜在第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5 SQL3.5 SQL高级查询高级查询n3.5.1 3.5.1 使用表的别名使用表的别名n3.5.2 3.5.2 多多 表表 查查 询询n3.5.3 3.5.3 使用使用UNIONUNION子句子句n3.5.4 3.5.4 使用统计函数使用统计函数n3.5.5 3.5.5 使用使用GROUP BYGROUP BY子句子句n3.5.6 3.5.6

80、 使用使用HAVINGHAVING子句子句n3.5.7 3.5.7 使用使用COMPUTECOMPUTE和和COMPUTE BYCOMPUTE BY子句子句 n3.5.8 3.5.8 使用嵌套查询使用嵌套查询穗食缉箭微杀逐遮碴呀啮澜盏嗣图欲虽臭妨凸泻氖锈郴曲钮拭离磕邯历雇第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5.1使用表的别名n当表的名称太长时,为了书写上的方便简单,在SQL语言的查询语句中可以定义表的别名。n命令格式:nSELECTtable_alias.column,nnFROMtable_nameAStable_alias ,n催霉韦楞弊姆利梅雌坞务豢唤捻齿

81、荫保江革恼蓬癌也咳英住肥坦景痔炮扰第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)table_alias是表的别名。n(2)在一个SELECT语句中,系统首先执行FROM子句,然后执行SELECT,所以一旦在FROM子句中定义了表的别名,尽管SELECT子句在FROM前面,也要使用别名。梯纺陕被哟葫掖陋冤乍署寿鸡违姚摈岗镜座弦走待堕蜡舔攀嗽腆仲沧驱里第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(3)在一个定义了别名的SELECT语句中,从FROM子句向后是依次执行的,因此,FROM后的每一个子句只有在其前面定义了别名后才能够并且只能够使

82、用别名。别名的作用范围仅限于本T-SQL语句中,而其他独立的T-SQL语句无权使用这个别名。读头讯戴记滁外劣授健馁惯游蛊粘铡换蓄北纪污春络祷队正汕贾川铰奏撰第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用别名查询使用别名查询SELECTs.sno, s.sname,sc.grade FROM student s, sc, course c WHERE ame = DATA STRUCTUREAND sc.grade 60AND o = o AND sc.sno = s.sno;挂街襄辛龄倚钞衷实嗣鉴禹拳粹巾矿懂充牵汛梁庞良钟锥峰俩薪裳洲痊佰第3章关系数据语言SQL2005第

83、3章关系数据语言SQL20053.5.2 多多 表表 查查 询询n如果希望从多个表中获取查询结果,例如从Student表中获取学生的姓名,从Score表中获取学生的成绩,那么就需要在多个表中选择和操作数据,这正是SQL的特色之一。猫耸淤猛或辊命樊禁古胡倔址帖漾氓伞吓测乐彼岁度抄哟阿觅岩天幂佑闪第3章关系数据语言SQL2005第3章关系数据语言SQL2005n内连接(InnerJoin)也叫自然连接,是指将另一个表内的行数据与本表内的数据相互连接,产生的结果行数取决于参加连接的行数,也就是说在将两个表中的指定列进行比较时,仅将两个表中满足连接条件的行组合起来作为结果集。在内连接中,只有在两个表中

84、匹配的行才能在结果集中出现。3.5.2.1 内连接境和讽厕妻绢鹤淘地耻瘴疲豆屎歌诵欣傈钝支德骂耿涵厨眉立吏煞槛惦领第3章关系数据语言SQL2005第3章关系数据语言SQL2005n在WHERE子句中可以使用比较运算符(=、等)指定连接的条件。在两个表之间进行内连接的语法如下。n命令格式:nSELECTselect_listnFROMtable1, table2nWHEREtable1.column1=table2. column21在WHERE子句中指定连接逐傍舵垦桑米辨袭坝芳浩搽砸仅激绽暂移翱掷琵嗜娘音炉再犬抛系拜牢焚第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明

85、:n(1)select_list表示查询内容的列表。n(2)在FROM子句中指定查询数据的两个表table1与table2 ,表的顺序可以任意排列。n(3)在WHERE子句中指定了连接的条件,当使用“=”连接时,通常也称为等值连接,它只显示第一个表和第二个表中满足连接条件的数值。朝誓幽掂丘魏蛙憨仕涟纯完郴入伎榨夕矫肺癌胺拌亢寻狰助保瞄荔毁温竟第3章关系数据语言SQL2005第3章关系数据语言SQL2005示例示例例例1:列出所有任课教师的名字,去掉重复值:列出所有任课教师的名字,去掉重复值: SELECT DISTINCT tname 任课教师任课教师 FROM COUSE, TEACHER

86、WHERE COUSE.tno = TEACHER.tno输出结果如下:输出结果如下:任课教师任课教师 王王 学学 李李 力力 张张 三三乳操颐夹谐好卓悔姨偶彪锡筛软涯脂粉绰贮掀垄港捏尉靛丛产活皑众涡噬第3章关系数据语言SQL2005第3章关系数据语言SQL2005示例示例查询查询JS2001班学生和其选修课程情况班学生和其选修课程情况:SELECT STUDENT.sno,sname,ssex, sage, sclass,cno,gradeFROM SC, STUDENTWHERE STUDENT.sno = SC.snoAND sclass = “JS2001”输出结果如下:输出结果如下:

87、J20001 李李 楷楷 m19 JS2001 G001 78J20002 张张 会会 f 20 JS2001 G00285J20003 王王 者者 m20 JS2001 E001 86 巩访各术水眩黔络眉湿蝗倍郊襟装甥介磕伺车泊银锤刽鹊刺阎俄雏镑顷孕第3章关系数据语言SQL2005第3章关系数据语言SQL2005自然连接自然连接例例2:统计各科成绩的最低、最高分和平均成绩,及课程统计各科成绩的最低、最高分和平均成绩,及课程名。名。 SELECT CNAME, MIN(grade),MAX(grade),AVG(grade)FROM SC,COUSEWHERE SC.cno = COUSE.c

88、noGROUP BY cname输出结果如下:输出结果如下: CNAME,MIN(grade),MAX(grade),AVG(grade) Vc 60 92 75 汇编汇编 65 90 78 数据结构数据结构 60 94 72捏隧艇搏匪抱奴椽彼宏脖店蓉讳颈苫济粮粕翟丁耗浓狐银蝇默量王矾侠廷第3章关系数据语言SQL2005第3章关系数据语言SQL2005n在使用SELECT语句时,还可以使用JOIN和ON关键字建立连接条件。n命令格式:nSELECTselect_listnFROMtable1 INNERJOINtable2nONtable1.column1=table2. column22使用

89、使用JOIN和和ON关键字指定连关键字指定连接条件接条件凿绵荐圆谅扼键款潦涯烬卒钦占啡歼予堰席窑瓣尼屹滤盟犊凝曾啼虫众注第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)FROM子句指定连接的两个表。n(2)INNERJOIN表示两个表的连接方式为内连接。INNER是默认方式,可以省略。n(3)ON用于给出这两个表之间的连接条件。毕罢存被琼局陆育次墟糊鄂痒乍铂睬闲赡酋芥莉外攘虑熏赏细桅姜坛宵固第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用使用JOIN和和ON的连接查询的连接查询使用使用JOIN连接不同的表,使用连接不同的表,使用ON给出两

90、个表之间的连接条给出两个表之间的连接条件。这是件。这是ANSI92标准进行多表查询的书写方式。例如,前标准进行多表查询的书写方式。例如,前面的例子可以改写如下:面的例子可以改写如下:SELECTs.sno, s.sname, sc.grade FROM student s JOIN scON sc.sno = s.sno JOIN course c ON o = o WHERE ame = DATA STRUCTUREAND sc.grade (SELECT AVG(qty)FROM sales)针修竿苟膀堡塌手搜摆都靳鸥箱忆捎有忆崎媳抠纶横趣赃羽谚缔买碟艘窘第3章关系数据语言SQL2005第

91、3章关系数据语言SQL20053.5.2.2 外连接 在内连接中,返回到查询结果集中的仅在内连接中,返回到查询结果集中的仅是符合查询条件(是符合查询条件(WHERE搜索条件或搜索条件或HAVING条件)和连接条件的行。而采用外条件)和连接条件的行。而采用外连接时,它返回到查询结果集中的不仅包含连接时,它返回到查询结果集中的不仅包含符合连接条件的行,而且还包括在左表(左符合连接条件的行,而且还包括在左表(左外连接)、右表(右外连接)或两个连接表外连接)、右表(右外连接)或两个连接表(全外连接)中的所有为空值的数据行。(全外连接)中的所有为空值的数据行。 外连接分为左外连接,右外连接和全外外连接分

92、为左外连接,右外连接和全外连接。连接。烬靳哺舟肯豫柯揪分酞奢哩疥厂脖强忽诽帧缅恢晋惰曰掇娄栗走乒裙遏频第3章关系数据语言SQL2005第3章关系数据语言SQL2005n所谓左连接,就是连接时主表在左,查询结果将保留左边表中的所有行(包括不满足连接条件的行)。左连接也有两种语法,第一种是在WHERE子句中使用“*=”替代原来的“”。n第二种左连接的方式是使用符合ANSI语法的LEFTJOIN关键字。1左连接旺嘻恃看定脚顾幌乱郭秘仍拓毕翻帐珊诌菩尉腿间悦恤写秃突桩蕉抚卖埃第3章关系数据语言SQL2005第3章关系数据语言SQL2005n右连接,就是连接时主表在右,也就是说将保留右边表中不满足连接条

93、件的行,同样它也有两种语法:一种是在WHERE子句中使用“=*”替代原来的“=”,另一种是在FROM从句中使用RIGHTJOIN关键字。2右连接掉望内扎西阀乎赡席数窟搪浑搅会疡兰扦瑞康混念出邮蕊痪袱商放抒蛔狮第3章关系数据语言SQL2005第3章关系数据语言SQL2005n使用完全连接(或称全外连接)方式将返回两个表的所有行。完全连接必须使用关键字FULLOUTERJOIN。3完全连接擦庶钾硒咸素遏号怎退酪擅诗叶粪浙等顽棍储猜喷溅技椿信汛嗽私汲陀为第3章关系数据语言SQL2005第3章关系数据语言SQL2005外连接示例外连接示例 例如:查询每个学生的选课情况:学号、姓例如:查询每个学生的选课

94、情况:学号、姓名、班级、课程号和成绩;假如某个学生没有选名、班级、课程号和成绩;假如某个学生没有选课,只输出学生的基本情况:学号、姓名、班级。课,只输出学生的基本情况:学号、姓名、班级。SELECT s.sno, sname, sclass, cno, gradeFROM student s , sc WHERE s.sno *= sc.sno再挝鄂颈楚薛嘉宰屿郧桃悦孕遭赖婆艾敝灼倒患灼缠卡舰棵篆呐饲寝综务第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5.2.3连接两个以上的表对两个以上的表进行连接查询。例如,有学生表对两个以上的表进行连接查询。例如,有学生表studen

95、t,学生选课表,学生选课表sc,课程表,课程表course。查询。查询数据结构课不及格的学生的学号、名字和成绩。数据结构课不及格的学生的学号、名字和成绩。SQL语句如下:语句如下: SELECTstudent.sno,student.sname,grade FROM student, sc, course WHERE cname = DATA STRUCTUREAND grade 60AND o = oAND sc.sno = student.sno;复复合合条条件件查查询询剐挡雏蚌宛刚彦署社喜须谁敬衡深抿汞块湃蛀数逮抛绣讣鉴筒檬小畜司货第3章关系数据语言SQL2005第3章关系数据语言SQL

96、20053.5.3使用UNION子句n使用UNION子句的查询称为联合查询,它可以将两个或更多查询的结果集组合为一个单个结果集,该结果集包含联合查询中所有查询结果集中的全部行数据。联合查询不同于对两个表中的列进行连接查询,前者是组合两个表中的行,后者是匹配两个表中的列数据。琵伶狄谍捂郡尊柏兄歹以御痛冰洒挥仁嘎日敦殿醛休齐讳堪榴裹葱佐么狂第3章关系数据语言SQL2005第3章关系数据语言SQL2005n联合查询必须注意两个问题,首先是每一个查询结果集都必须与第一个查询结果集具有相同数量的列,其次是各个查询结果集中的列数据类型必须与第一个查询结果集中对应的列数据类型相兼容。n命令格式:nselec

97、t_statementnUNIONALLselect_statementnUNIONALLselect_statement.n嘛猎蔬追姥违贞椽筛鼠努寸犯邯频带凌升浮蹿彤亡吵本旷欢畔祭提旧荔顺第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)本命令将多条查询语句的查询结果按照查询语句select_statement的先后次序显示。n( 2) 查 询 结 果 的 标 题 为 第 一 个select_statement的标题。n(3)UNION子句会自动删除查询结果中重复的行。如果希望获得所有的行,可在UNION的后面加上关键字ALL。匡缺惮榆单蹬敬省根踢怎岿两貉殊

98、格略墓邱逗综诚均盅绷柑盯合赁宛夷浊第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(4)UNION子句只是要求每一个查询中的列与第一个查询的列的数据类型兼容,并不要求完全相同。例如:Student表中的name列是varchar(20),而Score表中subjectid列是char(4),这两列也可以正常地进行联合查询。n(5)如果要对查询后的组合结果集排序的话,必须把ORDERBY子句写在最后一个select_statement后,但排序必须依据第一个select_statement中的列。鸦枕伺缆问屎恤窍界媒苗耸唬轩纯累诉狮爱艳振隋健嗽哺墨脏吱俏呸仆故第3章关系数据语言

99、SQL2005第3章关系数据语言SQL2005使用UNION子句示例SELECT 查询的结果是元组的集合,多个查询结果可以进行集查询的结果是元组的集合,多个查询结果可以进行集合的并合的并(UNION)操作。操作。例如,查询选修了课程例如,查询选修了课程G001和选修了课程和选修了课程E001的学生的的学生的学号。学号。SELECT sno FROM scWHERE cno = “ G001 ”UNIONSELECT sno FROM scWHERE cno = “ E001 ”纠洁锦嫉巷娘殊请坑昧恼郸竖忠权毫痰纱寒拷转掉瘦潍溃冒续侩泛芭臻蠕第3章关系数据语言SQL2005第3章关系数据语言SQ

100、L20053.5.4 使用统计函数使用统计函数n在SELECT语句中除了可以使用算术表达式进行列计算外,还可以使用一系列的统计函数对表中的所有数据进行汇总、统计等多种运算,统计函数属于聚合函数(AggregateFunction)。饱钱寡貌燥聚产澈胶荫鸭獭套醚炔惩确探涝颊尉抚祭败亢技桥孺截赁秉清第3章关系数据语言SQL2005第3章关系数据语言SQL2005n统计函数通常用于SELECT语句中,作为结果集中的返回列。在SELECT语句中使用统计函数的语法如下。n命令格式:nSELECTfunction_name(column_name|variable,.n),.nnFROMtable_Lis

101、t王邦弘谊站囱齿棠起蠢译叶塞诸催抨臀角疾抠烙交华梳应潮迅寅瓣富靴驶第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)function_name表示函数的名称。n(2)(column_name |variable)表示针对其进行函数运算的列名称或变量名称。如果函数需要一个以上的自变量,则用逗号进行分隔。暇腺技裁卵湛霖找己乍屏胀让恳砖下应柠鸡矩揍汤荚纳厌籽促淌烤柞砸棵第3章关系数据语言SQL2005第3章关系数据语言SQL2005nSUM函数返回列或表达式中所有值的总和,此函数只能用于数值型的字段。当列中的值为NULL时,该空值在计算求和时将被忽略。1SUM函数妥

102、聊滁腹岳拆哨锭寅私炊够睛渠踩颂搅擎喘津落砷篷虚钓锄穴剐桨保康肺第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nSUM(ALL|DISTINCTexpression )n命令说明:n(1)ALL表示对所有的值进行聚合函数运算,是默认设置。n(2)DISTINCT表示仅对不同的值进行聚合函数运算,而不管该值出现了多少次。n(3)expression表示对数字数据类型的表达式进行运算。少幕吧皱软哑峭挝喉询藉裙敞砾晨霉暖调窖武彰荆桂择烙沃兢恩锥辐埃苫第3章关系数据语言SQL2005第3章关系数据语言SQL2005nAVG函数返回列或表达式中的算术平均值,此函数只能用于数值

103、型的字段。n命令格式:nAVG(ALL|DISTINCTexpression)n命令说明:各语法项目与SUM类同。2AVG函数阶由斤垫箔更控惫对耪器酉按摘筋眺艇剔窒闹溃亩胁排给翁莽糖四拉婴婪第3章关系数据语言SQL2005第3章关系数据语言SQL2005nCOUNT函数返回列中的记录个数。n命令格式:nCOUNT(ALL|DISTINCT column_name|*)3COUNT函数良菇用贿丙队肋祟苏悠卜吝炯重材嗣裙幸斩民瑟烈圆祝藤驴盯凡易仲裤寝第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)在COUNT函数中引用一个列名column_name时,将返回该列

104、中行记录的个数。n(2)COUNT函数默认使用ALL参数,它将重复计算相同的值,但不包含值为NULL的行。浑辕爷铀玻晰絮捅践油月纲驰誓霍馒拈弓猴对獭含苟葵殃妓蝎枉强卜男恫第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(3)使用DISTINCT时,相同的值只计数一次,且不包含NULL值。n(4)在COUNT函数中可以使用*做参数,它表示返回表中的所有行数,包括含有NULL值的行。穷沥授蕴卫析畅攫贯判恰雌笨气矽钡穴湃狭嫉绎宋绢盐值组粥侵胎拙昌祟第3章关系数据语言SQL2005第3章关系数据语言SQL2005nMAX函数返回某一列中的最大值,它可用于数字列、字符列和datetim

105、e列,但不能用于BIT列。n命令格式:nMAX(ALL|DISTINCTexpression)nMIN函数返回某一列中数据的最小值,其使用方法与MAX函数相同。4MAX函数与MIN函数挥并砒掺究社价钡莽钟斩喊命嚏军扼雕割雾榨东凛瘪憨瓣妖隘应货胖妇牌第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5.5使用GROUPBY子句n如果希望将查询结果按某一列或几列进行分类统计,即不同的列值被放到不同的组中时,可以使用GROUPBY子句。基本命令结构如下。惰韧赖锣调款馅弟腾椭当引之硼幻叙扦煤龟赎及耀围哼析亿弃糊在暮粟黎第3章关系数据语言SQL2005第3章关系数据语言SQL2005n

106、命令结构:nSLETCTcolumn_name,.nnFROMtable_namenGROUPBYALLcolumn_name,.n秤圭凋盔整蝴肩铬域趁拇很蜗拒黄炽惟胺岩鹏镊授私拾口宽牛呼黑踪溺视第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)在SELECT语句中所指定的列必须是GROUPBY子句中的列名,或是被聚合函数所使用的列。n( 2) ALL 关 键 字 , 它 指 定 返 回 由 GROUPBY子句产生的所有组,即使某些组没有符合WHERE子句中指定条件的行。艺付忘猜匠炎胚仗巡灌盎峰熏状碰筷涵彤词寥扭美粪劫恃锌凝咆客口醉腥第3章关系数据语言SQL2

107、005第3章关系数据语言SQL2005n(3)text、ntext和image类型的列不能用于GROUPBY子句。n(4)分组的列中包含多个NULL时,这些空值将放入一个组中进行显示。n(5)在GROUPBY子句中必须使用列的名称,而不是使用AS子句指定的列别名。效记噪九雾迭橡瓢夏扭触杭前诬差拎抚墨绝唆度柒言幸缘掩奸奸校戌颁进第3章关系数据语言SQL2005第3章关系数据语言SQL2005n可以在GROUPBY子句中列出多个列,以实现嵌套分组。3.5.5.1 在GROUP BY子句中使用多个列克武绞叙诉俞弥隶痉田组臼捂祭带疑耻寂烯吠傈赞盂环氰筷跋兆尘仲低烷第3章关系数据语言SQL2005第3章

108、关系数据语言SQL20053.5.5.2 GROUP BY子句和ALL关键字n在包含GROUPBY子句的查询中可以使用WHERE子句。利用WHERE中的条件可在分组之前消除不符合WHERE条件的行。纤锐亥汉备溃愉骗搂温浓磷随嘉蒂靳汞沂叭仔默丸出嗣物掸棠逛雹堆烷凳第3章关系数据语言SQL2005第3章关系数据语言SQL2005示例示例例如例如1:查询学生的总人数,:查询学生的总人数,SELECT COUNT(*)FROM student;例如例如2:查询选修了课程的学生总人数,:查询选修了课程的学生总人数,SELECT COUNT(DISTINCT sno)FROM sc;乏层雕祭釜镜弟痈忘撩织

109、颜琳苟蛛契体厂修辩权轰耙脯幌惑伟海秆鹤颧旧第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用聚合函数查询,统计某个列中值的个数使用聚合函数查询,统计某个列中值的个数例如,求每个班级男生的人数,必须按班号分组,例如,求每个班级男生的人数,必须按班号分组,而后按班统计学生人数:而后按班统计学生人数:SELECT 班号,班号,COUNT(*)FROM studentWHERE 性别性别=男男GROUP BY 班号班号输出结果如下:输出结果如下:班号,班号, COUNT(*)js9901 21js9902 22 js9903 25js9904 20只有出现在只有出现在GROUP By

110、子句中的属子句中的属性才能与聚性才能与聚合操作并列合操作并列出现在出现在SELECT子子句中。句中。潘们旗俩蔗万蝇坯将胀冕凑忙医刻翟田墩表葡驳诈滥氮至寡刁震靳障汁送第3章关系数据语言SQL2005第3章关系数据语言SQL2005 使用聚合函数查询,求列的最大最小值例如,列出所有学生的最小和最大年龄例如,列出所有学生的最小和最大年龄:SELECT MIN(sage),MAX(sage)FROM STUDENT输出结果如下:输出结果如下: MIN(sage),MAX(sage)14 25瞥单正右攀阑停氮早溅港鲤钥躬缨砒磐哦供二洛帚罗唇酗频熊壶辖帝侮商第3章关系数据语言SQL2005第3章关系数据语

111、言SQL2005 使用聚合函数查询,查询结果分组例如,统计各科成绩的最低、最高分和平均成绩。例如,统计各科成绩的最低、最高分和平均成绩。 SELECT CNO, MIN(grade),MAX(grade),AVG(grade)FROM SCGROUP BY cno输出结果如下:输出结果如下:CNO,MIN(grade),MAX(grade),AVG(grade) G006 60 92 75 G007 65 90 78 G002 60 94 72酝魏闽绎抢俏赦靖给互目吊纲柳沼贯承稀语恤宙商遍哗蒸李觅肿今掺螟鹰第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5.6 使用使用HA

112、VING子句子句n在完成指定条件的查询后,还可以使用HAVING子句来对分组的结果进行进一步的筛选。下面是HAVING子句的语法结构。n命令格式:nHAVING酝湘耀搐车亚竭年铲探潞蛤原馈和湘谆亿碟幂酞淄蓬柯呐蚂别踪忽墟酞馅第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令说明:n(1)指定分组所应满足的条件。n(2)用HAVING子句对GROUPBY子句设置条件的方式与WHERE子句对SELECT语句设置条件的方式类似,但HAVING可以包含聚合函数。如果HAVING中包含多个条件,那么这些条件将通过AND、OR或NOT组合在一起。联沥絮瑟篓坡讳僵庭抿包汰嫉镜电折矫采柯袍

113、吐钧狠揭棋综撒忍拷唾湃走第3章关系数据语言SQL2005第3章关系数据语言SQL2005 HAVING子句示例例如,查询学分不到例如,查询学分不到20分的学生的学号和学分的学生的学号和学分总数。分总数。SELECT 学号,学号,SUM(credit)FROM SC,COURSEWHERE grade = 60 AND grade NOT NULLAND SC.cno = COURSE.cno GROUP BY 学号学号HAVING SUM(credit) 75输出结果如下:输出结果如下: CNAME,MIN(grade),MAX(grade),AVG(grade) 汇编汇编 65 90 78

114、潦脖亮翘瘦辞畔稽搭脚巡莉赊易盐很努踪拥伞励汤癌殉促虐寄案背脐垄炔第3章关系数据语言SQL2005第3章关系数据语言SQL20053.5.7使用嵌套查询n在一个SELECT语句中嵌入另一个完整的SELECT语句称为嵌套查询。嵌入的SELECT语句称为子查询,而包含子查询的SELECT语句称为外部查询。子查询自身可以包括一个或多个子查询,也可以嵌套任意数量的子查询。碟镑术膛尿递孺疫翌善位叭钨报生尘哭芯热亦摆剁嘻艳力啼巫镇仲鼎役卧第3章关系数据语言SQL2005第3章关系数据语言SQL2005n但子查询中返回的数据类型是有限制的,它不能使用image和text等数据类型,并且子查询返回的数据类型还必

115、须和外部查询WHERE子句中的数据类型相匹配。n子查询既可以嵌套在SELECT语句中,也可以嵌套在UPDATE、DELETE和INSERT语句中。享蝴栽菜贮慨锤孰文芍姑澎铁劲喉衅屹助蓑王昂戊胳豌漳晃妆饺惶蝴筏樊第3章关系数据语言SQL2005第3章关系数据语言SQL2005嵌套查询示例嵌套查询示例例例1,列出与李楷同班的同学的全部信息,列出与李楷同班的同学的全部信息: SELECT * FROM STUDENT WHERE sclass = ( SELECT sclass FROM STUDENTWHERE sname=“李楷李楷”););输出结果如下:输出结果如下:sno sname sse

116、x sage sclassJ20001李李 楷楷 m 19 JS2001J20002张张 会会 f 20 JS2001J20003王王 者者 m 20 JS2001票此材欧恫厩栏浚佛醋仟抨佯包叠镜萌嘉慕菠酶败讫窥狱俯胜低闪纱菊嘲第3章关系数据语言SQL2005第3章关系数据语言SQL2005嵌套查询示例嵌套查询示例例例2,查找高于职工平均工资的职工信息:,查找高于职工平均工资的职工信息:SELECT * FROM emptable WHERE salary ( SELECT AVG(salary) FROM emptable)旬浴睁捏惜晨初葛娄窗虾铺火巡笋束娥腥裁胞每钾枕跨惦途馒空鞘桐簿各第3

117、章关系数据语言SQL2005第3章关系数据语言SQL2005嵌套查询示例嵌套查询示例查询查询本学期选课本学期选课超过超过8门的学生人数门的学生人数,没有没有成绩的选课表示本学期正在选修的课程。成绩的选课表示本学期正在选修的课程。 SELECT COUNT(*) FROM student WHERE sno IN 注:选课注:选课8的学号集的学号集 ( SELECT sno 选课的学号选课的学号 FROM sc WHERE grade IS NULL GROUP BY sno 注:按学号分组注:按学号分组 HAVING COUNT(*) 8););蜡陡畴为杯怂贮奶漏掺德碌赂眼渗辕蹬冯涩世败嚎棍勤

118、蘸赛壕膝塌橡之芦第3章关系数据语言SQL2005第3章关系数据语言SQL2005n子查询可由一个比较运算符(=、=、!或=)引入做为比较运算符的条件,子查询必须返回单个值做为外部查询中WHERE子句的比较参数。3.5.7.1 使用比较运算符的子使用比较运算符的子查询查询洱灰烩臭涉汽孺泅高搀睦肋徽识乳帖槽傻牡粮磺迅擅杏伊脱志娠欺逛膀候第3章关系数据语言SQL2005第3章关系数据语言SQL2005n使用IN(或NOTIN)关键字引入子查询时,允许子查询返回一列零值或多个结果值。它判断IN关键字前所指定的列值是否在子查询的结果中,IN是嵌套查询中最常用的关键字。3.5.7.2 使用IN的子查询百育

119、茨傀鬼泉冒宾铜竞按卒阻甚帚骨蝶梗蔑料甄化桃角抢罪宁鸯痊谆拖币第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用IN示例nSELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN(SELECTdeptnoFROMemp);柒怔蒂黑违嗓友冷吻搬图廖嫁兵显屈癣厩鸣殉租磕少三懒逞筹庸菏赏评写第3章关系数据语言SQL2005第3章关系数据语言SQL2005n使用EXISTS关键字引入一个子查询时,就相当于进行一次数据是否存在的测试。为了便于理解,我们可以把EXISTS想象为一个函数,而子查询是这个EXISTS函数的参数。它的作用是在WHERE子句中测试子查询

120、返回的行是否存在。EXISTS子查询实际上不产生任何数据,它只返回TRUE或FALSE值。3.5.7.3 使用EXISTS的子查询遣忠铡瘤舔胶诊碧路架汤原瓷缆循嗡嚏埔旗弥渊奋首议秤盐放懈伙老千沧第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用EXISTS示例nSELECTdname,deptnoFROMdeptWHERENOTEXISTS(SELECTdept.deptnoFROMemp,deptWHEREdept.deptno=emp.deptno);罗敷丁癸祁烃缨唁拨乃篓英但钉幻赊圆正冷亚锤展掉静萨老忻兔伪庭汛糯第3章关系数据语言SQL2005第3章关系数据语言SQL2

121、005n子查询还可以使用在SELECT、UPDATE、INSERT和DELETE语句中任何可以使用表达式的地方。3.5.7.4 用于替代表达式的子查询打挪阂赃午洼逗掠妻唤缓焕站逛魁纂百澎贬恼杀蜕拾尝掘狰翔伙谴国槐宏第3章关系数据语言SQL2005第3章关系数据语言SQL20053.6 视图的定义和对视图的操作n3.6.1 视图概述n3.6.2 视图的创建和撤销 n3.6.3 对视图的更新操作 n3.6.4 视图的优点 昔烧娃捏朵尸硼书苟揭宝备尖疙猎核扎书庞轰睛熄嘲绘磐苔焰外夷工菱临第3章关系数据语言SQL2005第3章关系数据语言SQL2005n视图是数据库中某些表或其他视图中数据的特定子集。

122、数据库中只存储视图的定义,视图中的数据并不实际存储在视图中,而是存储在视图所对应的表中。向视图提供数据的表称为视图的基表。视图概述恋纲饿光周二畸栋劳畸训劝更辕欢哼炔审蔗栖梗吵清留辅牲牢味铅境拽垮第3章关系数据语言SQL2005第3章关系数据语言SQL2005n一旦定义了一个视图,就可以像使用表一样使用它。可以对视图进行查询操作,但对视图的更新操作(增、删、改)即是对视图的基表的操作,因此有一定的限制条件。视图的作用如下。鞠咯交稿暂天慈俏牛盏燃涵榔霍济砂擅穴纠气阴抽吸幢卖墅当揣垢锁翱烙第3章关系数据语言SQL2005第3章关系数据语言SQL2005n n1聚焦特定的数据 n n2简化用户的数据操

123、作n n3导入和导出数据n n4合并分区数据 视图的作用霸剁切荡隆俱肝舅猾郎锑彼洪血售找糜味忻屈褪沫星诣佣婶札锌你庙胜骑第3章关系数据语言SQL2005第3章关系数据语言SQL2005视图的创建和撤销(1)n视图的创建 创建视图可用“CREATE VIEW”语句实现。其句法如下:CREATE VIEW (列表名)AS 例3.27 对于教学数据库中基本表S、SC、C,用户经常要用到S#、SNAME、CNAME和GRADE等列的数据,那么可用下列语句建立视图: CREATE VIEW STUDENT_GRADE(S#,SNAME,CNAME,GRADE) AS SELECT S.S#,SNAME,

124、CNAME,GRADE FROM S,SC,C WHERE S.S# = SC.S# AND SC.C# = C.C#;差膏汰渗潘撕孵娠渊干驻认趟泰议笺舆猖凡辫卿咎颊第策载熏遥稿趾涝茶第3章关系数据语言SQL2005第3章关系数据语言SQL2005视图的创建和撤销(2)n视图的撤销 在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤销。其句法如下:DROP VIEW 视图名 例3.28 撤销STUDENT_GRADE视图,可用下列语句实现: DROP VIEW STUDENT_GRADE;蝶垦演慑笔押睡钒极按毅娱肖咸归饯授祭粉紊氨颇回渐烹纸篷由弛天冶墓第3章关系数据语言SQL200

125、5第3章关系数据语言SQL2005对视图的更新操作(1)n定义3.1 如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。稠颧疡纵截丰缎玫随丈肖撵挑褐喳秋思惶坠膏谢柱实蛔聪船恭娄柬菌侨文第3章关系数据语言SQL2005第3章关系数据语言SQL2005对视图的更新操作(2)n例3.29 下面讨论对视图更新的几个例子。 设有一个视图定义CREATE VIEW SUDENT_GRADE AS SELECT S.S#, SNAME,CNAME,GRADEFROM S,SC,CWHERE S.S# = SC.S# AND

126、SC.C# =C.C#; 这个视图定义了学生选修的课程名和成绩,是由三个基本表联接而成的。如果用户要在视图中执行插入操作:INSERT INTO STUDENT_GRADEVALUES (S24, WANG, MATHS,80); 若在基本表C中,课程名为MATHS的课程号有多个,则往基本表SC插入元组时,课程号C#就不定了。因此,对这个视图的更新是不允许的。傲膀福骨母妊仓迪揉氯烟琴讯栋怨撑呢站盖京恒驱六租蓑谨至旁纹炳咬墓第3章关系数据语言SQL2005第3章关系数据语言SQL2005对视图的更新操作(3)n 设有一个视图定义,包含每个学生选修课程(成绩为非空)的门数和平均成绩:CREATE

127、VIEW S_GRADE(S#,C_NUM,AVG_GRADE) AS SELECT S#,COUNT(C#),AVG(GRADE)FROM SCWHERE GRADE IS NOT NULL视图S_GRADE虽然是从单个基本表导出,但导出时使用了分组和聚集操作,因此也是不能更新的。譬如,在未更改基本表SC中值时,要在视图S_GRADE中更改学生的平均成绩,显然是不切实际的。抖巴身怀济董屹遏股氓辕辣才旗久贡咐械昭瞅飘荣镀睡巩紊撬舰蓄栏何样第3章关系数据语言SQL2005第3章关系数据语言SQL2005对视图的更新操作(4) 如果定义了一个有关男学生的视图:CREATE VIEW S_MALE

128、AS SELECT S#,SNAME,AGEFROM SWHERE SEX =M; 这个视图是从单个关系只使用选择和投影导出的,并且包含键S#,因此是可更新的。例如,执行插入操作: INSERT INTO S_MALE VALUES(S28,WU,18); 系统自动会把它转变成下列语句:INSERT INTO SVALUES(S28, WU,18, M); 叠沼嚣咒桔瞄彭斑糖频入晴诅阔答醛监卤庐窘筏锄肿摸戌棚在搅勘毗硼认第3章关系数据语言SQL2005第3章关系数据语言SQL2005视图的优点n 视图是用户一级的数据观点,由于有了视图,使数据库系统具有下列优点: (1)视图提供了逻辑数据独立性

129、。 (2)简化了用户观点。数据库的全部结构是复杂的,并有多种联系。 (3)数据的安全保护功能。芭埋斤氛补敝梯锨记宦魂躲经渭敲瘟临兆蹿升掐线氰设凯尸聘贩圭牡蝉轴第3章关系数据语言SQL2005第3章关系数据语言SQL20053.7 索索 引引n通常,下列情况需要在表中的某一列或某些列上建立索引:n(1)经常用作查询条件的列。n(2)需要频繁地按范围搜索的列。n(3)连接中频繁使用的列。萍瘫残霸呻甥贾腆田眉弹铸肆檬芥增辖郑踌乃鬼餐向榔墩韵悼牌藉娩白隔第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(4)在ORDERBY子句中经常使用的列。n(5)主键或外键的列。n(6)值是惟一的

130、列(如IDENTITY)。n由于建立索引表后将占用系统资源,且索引的建立会影响数据的修改速度,每执行一次增删改操作都要重新维护一次索引,因此在没有必要的情况下不要建立索引。义丁肉絮饯本澄凤摘婚猩咸沃肆疥吝缺千似纤微订欢拣泡霄皇彩珍工疤圃第3章关系数据语言SQL2005第3章关系数据语言SQL2005n按照索引的结构,可以将其划分为两大类,聚簇索引(Clusteredindex)和非聚簇索引(Noclusteredindex)。n按照表中建立索引的那一列(或列组合)中的数据是否各不相同,可以将索引分为惟一索引和非惟一索引。桥条蝇涤硷办衡酚猴朽霸景疮谍剁良邻敏那智母撬凉犯陪媳甚钮霸襄庄吭第3章关系

131、数据语言SQL2005第3章关系数据语言SQL20053.7.1 建立索引n索引可以在创建表时建立,也可以在定义表以后的任何时候建立;既可以在表的一列上建立一个索引,也可以在列组合上建立一个索引;一个表中既可以建立一个索引,也可以建立多个索引(当然,其中只有一个聚簇索引)。n可以利用企业管理器建立或利用T-SQL建立索引。建立索引的条件如下:索引的创建和撤销索引的创建和撤销夸巨芳梆移剁征宛罪滤只稍菜尹榷懒谣层砸捕塌桓屉穿轩维跳谦察擎昆篙第3章关系数据语言SQL2005第3章关系数据语言SQL2005(1)只有表的拥有者才能建立索引。(2)每个表只能建立一个聚簇索引。(3)每个表最多可以建立24

132、9个非聚簇索引。(4)索引键值最大为900字节。(5)索引最多可以包含16列。钻吁遥账训微啄鸦疥多眉声满瑟站雄剔乎源龟凹晃吨掂谆枯诱夺氟瘤筐难第3章关系数据语言SQL2005第3章关系数据语言SQL2005(6)建立惟一性索引时,应保证建立索引的列不包括重复的数据,并且没有两个以上的NULL。(7)建立聚簇索引时,应考虑数据库的剩余空间。剩余空间应为原表的120%。(8)text、ntext、image列不能建立索引。喇豢爹慨拍什爱昔喧摧园桶米铁慰堪祥并喉皮愿承育衰对呈舔雀垃言股康第3章关系数据语言SQL2005第3章关系数据语言SQL2005n在指定的表或视图上使用T-SQL语句建立索引的语

133、法如下。n语法格式:nCREATE UNIQUE CLUSTERED |NOCLUSTEREDnINDEXindex_namenONtable_name|view_namen(column_nameASC|DESC,.n)1使用使用T-SQL语句建立索引语句建立索引淄蓝茬取卡娃捕谎愚系郭瘤额犬住形因呐撬秩炸陛碟繁丫首砂爪参哺低迸第3章关系数据语言SQL2005第3章关系数据语言SQL2005n语法说明:n(1)UNIQUE:建立惟一性索引。n(2)CLUSTERED:建立聚簇索引。n(3)NOCLUSTERED:建立非聚簇索引。n(4)INDEXindex_name:定义索引名称为index_

134、name所表示的名称。焊铣挑帐寺化屿系缮贿径唁铀僵夸凰厕倔洱满看蛹绎陡甜茹访饱困脊骑阐第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(5)ONtable_name|view_name:指定要建立索引的表名或视图名。n(6)column_nameASC|DESC,.n:指定要建立索引的列。ASC表示升序,DESC表示降序。筹捶刘厕至划接靴花坑醋横染漏蚀坑儿福网徐消惋臭腆构治卵严魄痊聋族第3章关系数据语言SQL2005第3章关系数据语言SQL2005索引定义示例索引定义示例例如例如1,为,为TEACHER表建立名字索引,升序表建立名字索引,升序CREATE UNIQUE IND

135、EX tnamex ON TEACHER (tname)例如例如2,在在SC表上按表上按学号学号sno建立聚集索引建立聚集索引scinx。CREATE CLUSTER INDEX scinx ON SC (sno)通常,通常,DBMS会自动为主码建索引。会自动为主码建索引。真酌巾悸鹤委咽儒秦仪滚齿充驴尖绢做永永湃遮蛤吴尸恤酿粗牛陕悔浸闭第3章关系数据语言SQL2005第3章关系数据语言SQL20052使用企业管理器建立索引使用企业管理器建立索引给扼藕压笔论硕悠怖纳兑倘榴嗽冰产七曙砰怯补修傣饺悯拧论酷哥玲羌躬第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用索引的原则使用索引的

136、原则要不要建索引以及如何建索引,当属于内模式要不要建索引以及如何建索引,当属于内模式的概念,这是数据库设计中一个很重要的问题。设的概念,这是数据库设计中一个很重要的问题。设计人员要仔细考虑实际应用中修改与查询的频率,计人员要仔细考虑实际应用中修改与查询的频率,权衡建索引的利弊。例如,若一关系的经常性操作权衡建索引的利弊。例如,若一关系的经常性操作是数据的修改,则不宜建索引。但有些修改语句可是数据的修改,则不宜建索引。但有些修改语句可能包含着查询操作。能包含着查询操作。 一般来说,建索引有几项参考原则:一般来说,建索引有几项参考原则:(1) 值得建索引:值得建索引:记录有一定规模,而查询只局限于

137、少数记录。记录有一定规模,而查询只局限于少数记录。啃玻匹壹锡决苔佳暮箔喀鸣蝴申剪骤便毁揖疑备刮雇之柳毒俯叹矮乌扩烛第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用索引的原则使用索引的原则(2) 索引用得上:索引用得上: 索引列在索引列在where子句中应频繁使用。子句中应频繁使用。(3) 先装数据,后建索引:先装数据,后建索引: 对于大多数基本表,总是有一批初始数据需对于大多数基本表,总是有一批初始数据需要装入。该原则是说,建立关系后,先将这些初要装入。该原则是说,建立关系后,先将这些初始数据装入基表,然后再建索引,这样可加快初始数据装入基表,然后再建索引,这样可加快初始数

138、据的录入。如果建表时就建索引,那么在输始数据的录入。如果建表时就建索引,那么在输入初始数据时,每插入一个记录都要维护一次索入初始数据时,每插入一个记录都要维护一次索引。当然,索引早建晚建都是允许的。引。当然,索引早建晚建都是允许的。壁英箱蚀儡串玄屉滋脚洼霹作晴品谤慌萝鳃句蝴迂滓模利萨妥的厨绊钓杀第3章关系数据语言SQL2005第3章关系数据语言SQL2005n利用企业管理器可以方便地完成管理索引的工作。1查询与修改索引查询与修改索引n使用系统存储过程sp_helpindex可以查询表中的索引信息。n命令格式:nsp_helpindextable_namen命令说明:table_name是建立有

139、索引的表的名称。3.7.2 管理索引管理索引劝疑脓筏窜磋矽稚抡劫醛封龚七赵敲煎诸栓美呜鞋履森渍截皮埔直匪囊持第3章关系数据语言SQL2005第3章关系数据语言SQL2005n命令格式:nDROP INDEX tablename.indexname |viewname.indexname,.nn命令说明:n(1)indexname表示要删除的索引名称,索引名称前面必须有表名称tablename或视图名称viewname加以限定。n(2)可以一次删除表中多个索引。2删除索引删除索引茬粒脂团病眩花跪律肆羹匣妒已婴逊梅层召厄邀恼秆呼站专宴睛职乙憾茫第3章关系数据语言SQL2005第3章关系数据语言SQ

140、L2005删除索引删除索引例如,将例如,将TEACHER上的索引上的索引tnamex撤消。撤消。 DROP INDEX tnamex焚扭把振侯母路厕伏谱辨跨印舞蛙融滦抠状由经校宫卿炒郊述稚鸽丁尾摧第3章关系数据语言SQL2005第3章关系数据语言SQL2005索引说明索引说明(1) 使用使用SQL语言,用户可以随时在基本表语言,用户可以随时在基本表上建立索引、增加新索引、删除索引。用户上建立索引、增加新索引、删除索引。用户根据具体应用环境需要的情况,可动态地调根据具体应用环境需要的情况,可动态地调整索引结构,达到较高的查询性能。整索引结构,达到较高的查询性能。(2) 用户只能建立、修改和删除索

141、引,用户只能建立、修改和删除索引,不能不能在数据操作中引用索引在数据操作中引用索引,在数据操作执行中,在数据操作执行中如何使用索引完全由系统决定。从而保证了如何使用索引完全由系统决定。从而保证了增加和删除索引时不必修改应用程序,支持增加和删除索引时不必修改应用程序,支持数据的物理独立性。数据的物理独立性。铬消姨庶抄个彰蔫坤视痪照批坎豺什鞍辛杰臆怕酚甩娘黄卿淖仅侄瘤参远第3章关系数据语言SQL2005第3章关系数据语言SQL20053.8 SQL3.8 SQL数据控制功能数据控制功能3.8.1 授权访问控制授权访问控制授予权限授予权限GRANT3.8.2 撤消权限撤消权限 REVOKE 意舷火褥

142、追韵鼎掇抬思全似俐槐毯岁抉晰违唉遵狙丢另屯集跑拌澳尘潘充第3章关系数据语言SQL2005第3章关系数据语言SQL20053.8 1 授权控制授予权限授予权限GRANT把对数据库、表、视图的存取权限授予用户。把对数据库、表、视图的存取权限授予用户。语句格式:语句格式: GRANT 表级权限表级权限 ON 表名表名|视图名视图名 TO 用户用户,用户,用户.|PUBLIC WITH GRANT OPTION 表级权限包括:表级权限包括: CREATE、SELECT、INSERT、DELETE、UPDATE、INDEX、ALTER、REFERENCES、ALL。骗醇坏舆陛烩捅咕莆练沼规选张帚脑休证赚

143、难寝傣骄帮佃围梆危优粱合死第3章关系数据语言SQL2005第3章关系数据语言SQL2005授权控制授权控制GRANT 数据库级权限数据库级权限 TO 用户用户,用户,用户.|PUBLIC 数据库级权限包括:系统特权或数据库级权限包括:系统特权或DBA的权的权限。限。ALL: 指定对象的所有权限授予用户。指定对象的所有权限授予用户。PUBLIC: 将指定的权限授予所有用户。将指定的权限授予所有用户。WITH GRANT OPTION:它使得被授权用它使得被授权用户有能力将指定的权限授予其他用户。户有能力将指定的权限授予其他用户。垫营复饺主杉量烙撰勾质劈峪地朔躬珠呜流萨量穿吠钦昨化刮酷铬讣叉弯第3

144、章关系数据语言SQL2005第3章关系数据语言SQL2005授权控制授权控制例例1,把对表,把对表student的所有操作权授予用户的所有操作权授予用户张力张力:GRANT ALL ON student TO 张力张力;例例2,只把对表,只把对表 COUSE 的只读访问权授予的只读访问权授予 用户用户王红王红,但允许,但允许王红王红把此权限授予其他人:把此权限授予其他人: GRANT SELECT ON COUSE TO 王红王红 WITH GRANT OPTION ;例例3,王红王红可再把此权限授予他人,如李立可再把此权限授予他人,如李立, 李立李立无无权将他得到的权限再授予他人。权将他得到

145、的权限再授予他人。 GRANT SELECT ON COUSE TO 李立李立;嗽竭祈处木诬绞掀阶乳诈彝卡恳叹意桥垒调氨蟹束嚏鹃错治蝶呜蓑煌林静第3章关系数据语言SQL2005第3章关系数据语言SQL20053.8.2 撤消权限 REVOKEREVOKE GRANT OPTION FOR 表级权限表级权限 ON 表名表名|视图名视图名FROM 用户用户,用户,用户|PUBLIC WITH CASCADE REVOKE 数据库级权限数据库级权限 FROM 用户用户,用户,用户.|PUBLICGRANT OPTION FOR :撤消用户授予其他撤消用户授予其他用户用户权限的能力,仍保留用户自己的权

146、权限的能力,仍保留用户自己的权限。限。WITH CASCADE :撤消用户的权限及撤消用户的权限及GRANT OPTION特权。特权。哩柄碍喝粕帚流诬挖吏九栖蕊栈捎头犹密糖妄朴遭爪蛾崔晚短靴那匠俘悉第3章关系数据语言SQL2005第3章关系数据语言SQL2005撤消权限撤消权限 REVOKE例例1:撤消:撤消王红王红对表对表 COUSE的访问权时,必须的访问权时,必须同时撤消同时撤消他的他的GRANT OPTION特权特权:REVOKE SELECT ON COUSE FROM 王红王红 WITH CASCADE ;例例2:只撤消:只撤消王红王红的的GRANT OPTION特权同时特权同时仍保

147、留对表仍保留对表 COUSE的访问权:的访问权: REVOKE GRANT OPTION FOR SELECT ON COUSE FROM 王红王红;注意:系统撤消了注意:系统撤消了王红王红对表对表 COUSE的访问权,的访问权,同时也要撤消李力(同时也要撤消李力(王红授予的)王红授予的)对表对表 COUSE的访问权。的访问权。撤消会级连发生撤消会级连发生。隋腰垃钥胰筋抿稍税二哮城墒唇痴兄误肮贡君腿真耽妻侮蘑嘘圭嗜近摆咕第3章关系数据语言SQL2005第3章关系数据语言SQL20053.9 3.9 嵌入式嵌入式SQLSQLnSQL语言有两种使用方式:一种是在终端交互方式语言有两种使用方式:一种

148、是在终端交互方式下使用,称为交互式下使用,称为交互式SQL;另一种是嵌入在高级语;另一种是嵌入在高级语言的程序中使用,称为嵌入式言的程序中使用,称为嵌入式SQL,而这些高级语,而这些高级语言可以是言可以是C、ADA、PASCAL、COBOL或或PL/I等,等,称为宿主语言。称为宿主语言。n3.9.1 SQL的运行环境的运行环境 n3.9.2 嵌入式嵌入式SQL的使用规定的使用规定 n3.9.3 嵌入式嵌入式SQL的使用技术的使用技术 n3.9.4 动态动态SQL语句语句 沏将批淖返胎骋苟捍函永腿帽擞联谈洼薄羊颜列二娇元洞氰多诺遵让狐胆第3章关系数据语言SQL2005第3章关系数据语言SQL20

149、05SQL的运行环境 宿主语言十嵌入式SQL 预处理程序 宿主语言十函数调用 SQL函数定义库 宿主语言编译程序 目标程序 图3.14 源程序处理过程丽互掂寄并界垢鉴脆溪秋肛时锑谋贮混吝琼牲宽痊席烁杜菲川底蹄历周殷第3章关系数据语言SQL2005第3章关系数据语言SQL2005嵌入式SQL的使用规定n在程序中要区分SQL语句与宿主语言语句n允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:(1) 引用时,这些变量前必须加冒号“:”作为前缀标识,以示与数据库中变量有区别。 (2) 这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明。 nSQL的集合处理方式与

150、宿主语言单记录处理方式之间的协调。 (1) 游标定义语句(DECLARE)。 (2) 游标打开语句(OPEN)。 (3) 游标推进语句( FETCH )。 (4) 游标关闭语句(CLOSE)。 裁律休郊表剃辅邢盟沫子掖署拄泪扮宙踩烁烈蝉窘韭聚遇滦翠韵母吸怂勇第3章关系数据语言SQL2005第3章关系数据语言SQL2005嵌入式SQL的使用技术n不涉及游标的SQL DML语句n涉及游标的SQL DML语句n卷游标的定义和推进 宣盐芭隙褒敞刚呀昧淄赶筛炎运盟奄剥闷朋刃炊卯深基劳美屡稻阶缮昧沃第3章关系数据语言SQL2005第3章关系数据语言SQL2005涉及游标的SQL DML语句(1)SELEC

151、T语句的使用方式当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用,一定要用游标机制把多个元组一次一个地传送给宿主语言程序处理。(2)对游标指向元组的修改或删除操作在游标处于活动状况时,可以修改或删除游标指向的元组。 潘瑞驶扁严公春茧塑摩捌便胖肤兰讶晾庶则难燃嚼破氧窿浚辽箔栗哗串辉第3章关系数据语言SQL2005第3章关系数据语言SQL2005动态SQL语句(1)n动态SQL预备语句 EXEC SQL PREPARE动态SQL语句名FROM共享变量或字符串 这里共享变量或字符串的值应是一个完整的SQL语句。这个语句可以在程序运行时由用户输入才组合起来。此时,这个语句并不执行。滴泊

152、菜馅臀魁拔娶稽并盅弟也产贡辫闽爱唯愈梭赛庄火周敌绘熔绞倔款吭第3章关系数据语言SQL2005第3章关系数据语言SQL2005动态SQL语句(2)n动态SQL执行语句 EXEC SQL EXECUTE动态SQL语句名动态SQL语句使用时,还可以有两点改进:(1)当预备语句中组合而成的SQL语句只需执行一次时,那么预备语句和执行语句可合并成一个语句: EXEC SQL EXECUTE IMMEDIATE共享变量或字符串(2)当预备语句中组合而成的SQL语句的条件值尚缺时,可以在执行语句中用USING短语补上: EXEC SQL EXECUTE USING 萝莫峦旱唱缉园赦拥字毖骆计芯獭乞忙穆食鞠绝

153、莱姥瘫限装殃涅惰熄戍茅第3章关系数据语言SQL2005第3章关系数据语言SQL2005动态SQL语句(3)n例3.33 下面两个C语言的程序段说明了动态SQL语句的使用技术。 EXEC SQL BEGIN DECLARE SECTION; char *query; EXEC SQL END DECLARE SECTION; scanf(%s,query); /* 从键盘输入一个SQL语句 */ EXEC SQL PREPARE que FROM :query; EXEC SQL EXECUTE que; 这个程序段表示从键盘输入一个SQL语句到字符数组中;字符指针 query指向字符串的第1个

154、字符。 如果执行语句只做一次,那么程序段最后两个语句可合并成一个语句:EXEC SQL EXECUTE IMMEDIATE :query;熟碎壤禹础铃测弹突燎屿座河脾迫劳瓣淑苔极醋匀卓插萎绢腆审嗅魔向衡第3章关系数据语言SQL2005第3章关系数据语言SQL2005动态SQL语句(4) char *query =UPDATE scSET grade = grade * 1.1WHERE c# = ?; EXEC SQL PREPARE dynprog FROM :query; char cno5 = C4; EXEC SQL EXECUTE dynprog USING :cno; 这里第一个c

155、har语句表示用户组合成一个SQL语句,但有一个值(课程号)还不能确定,因此用“?”表示。第二个语句是动态SQL预备语句。第三个语句(char语句)表示取到了课程号值。第四个语句是动态SQL执行语句,“?”值到共享变量cno中取。塞袒逼拎拙痪幼镑嘛喝沧苇惦眨哦礁酱校申寺锑颐强椎素鳃秋桑坟刀虑垫第3章关系数据语言SQL2005第3章关系数据语言SQL20053.10 触发器(触发器(TRIGGER) 触发器采用事件驱动机制触发器采用事件驱动机制,当某个触发事件发当某个触发事件发生时,触发器触发一系列操作。生时,触发器触发一系列操作。 触发器是一种特殊类型的存储过程,当表中触发器是一种特殊类型的存

156、储过程,当表中数据被修改时,数据被修改时,SQL Server自动执行触发器。自动执行触发器。 当一个触发器建立后,它作为一个数据库对当一个触发器建立后,它作为一个数据库对象被存储。当事件出现时,触发器被触发,定义在象被存储。当事件出现时,触发器被触发,定义在触发器中的功能将被触发器中的功能将被DBMS执行。执行。 触发器建立在表一级,它与指定的数据修改触发器建立在表一级,它与指定的数据修改操作相对应。操作相对应。SQL Server 中的触发器可分为中的触发器可分为INSERT触发器、触发器、UPDATE触发器和触发器和DELETE触发触发器三种。器三种。课由倪初妨嘱莽延朽路摘及村轻蜀牌佳钟

157、盖怂妮作阔嘻劲蛛拍够朵奸睬估第3章关系数据语言SQL2005第3章关系数据语言SQL20051. 触发器的主要优点触发器的主要优点 (1) 触发器能够实施比外键约束,检查约束触发器能够实施比外键约束,检查约束和规则对象等更为复杂的数据完整性检查。和规则对象等更为复杂的数据完整性检查。 (2) 和约束相比,触发器提供了更多的灵活和约束相比,触发器提供了更多的灵活性。约束将系统错误信息返回给用户,但这些性。约束将系统错误信息返回给用户,但这些错误并不是总能有帮助,而触发器则可以打印错误并不是总能有帮助,而触发器则可以打印错误信息,调用其他存储过程,或根据需要纠错误信息,调用其他存储过程,或根据需要

158、纠正错误。正错误。 (3) 无论对表中的数据进行何种修改,录入无论对表中的数据进行何种修改,录入或更新,触发器都能被激活,对数据实施完整或更新,触发器都能被激活,对数据实施完整性检查。性检查。兄屈唇饺注图绰牺周睫枣银哼疚橱开垒额碾靴擞幸竖俄掷猩沧璃锑趟震溅第3章关系数据语言SQL2005第3章关系数据语言SQL20052. 触发器支持的功能触发器支持的功能(1) 触发器功能在触发事件之后执行,还可以触发器功能在触发事件之后执行,还可以替代事件本身。例如,可以定义触发器在对替代事件本身。例如,可以定义触发器在对某关系执行某关系执行insert、update和和delete操作之操作之后触发。后触

159、发。(2) 触发器代码可以引用事件中对于元组修改触发器代码可以引用事件中对于元组修改前后的值(前后的值(OLD值和值和NEW值)。对于值)。对于update语句,语句,OLD值和值和NEW值意义很明确。值意义很明确。邵油辐帽霞致湛壕恼溺贷憋俯答称搭歌樱册龋臆申颧灯颗漳阶者钎邯衍撑第3章关系数据语言SQL2005第3章关系数据语言SQL2005(3) 对于对于update事件可以定义对哪个关系、事件可以定义对哪个关系、或关系中的哪一列修改时,触发器触发。或关系中的哪一列修改时,触发器触发。(4) 可以用可以用WHEN子句来指定执行条件,当触发子句来指定执行条件,当触发器被触发后,触发器功能代码只

160、有在条件成立器被触发后,触发器功能代码只有在条件成立时才执行。时才执行。(5) 触发器有触发器有语句级触发器和行级触发器语句级触发器和行级触发器之分。之分。所谓语句级触发器是指当所谓语句级触发器是指当update语句执行完语句执行完了触发一次;而行触发器了触发一次;而行触发器是指当是指当update语句语句每修改完一个元组就触发一次。每修改完一个元组就触发一次。(6) 触发器可以完成一些复杂的数据检查,可以触发器可以完成一些复杂的数据检查,可以实现某些操作的前后处理等。实现某些操作的前后处理等。樊栋婪诡障晕几巩肘菱落蜜卸立列返聘撬渣庄惮溜颂搅蝎董放仗室境卸可第3章关系数据语言SQL2005第3

161、章关系数据语言SQL20053. 建立触发器的语句格式建立触发器的语句格式CREATE TRIGGER 触发器名触发器名ON OWNER,表名表名FOR INSERT,UPDATA,DELETE AS SQL操作语句操作语句 表名:表名:为触发该触发器的表名。为触发该触发器的表名。OWNER为触发表的所有者。为触发表的所有者。SQL Server中,中,只有表的所有者才有权建立触发器。只有表的所有者才有权建立触发器。会乍书裹袒评贿章萤妇晶卑辑信汝诀汀毗呕衰颖丽沿俘渠笺皑扯疏鸵逐均第3章关系数据语言SQL2005第3章关系数据语言SQL2005 INSERT,UPDATA,DELETE :说明触

162、发触发器的事件。一个定义语说明触发触发器的事件。一个定义语句允许定义多个触发事件,用逗号分句允许定义多个触发事件,用逗号分开,第开,第2个只能是插入和更新。个只能是插入和更新。 SQL操作语句操作语句:指定触发器动作指定触发器动作。该语句中该语句中可以指定多个触发器操作,可以指定多个触发器操作,这时要用这时要用BEGINEND将它们组成将它们组成语句块。语句块。攒然代匈蜡帘诗藉枕雄螺赞跃介虐长刑壮遵臆枫简肾朴立钳卞禄望卷圈卜第3章关系数据语言SQL2005第3章关系数据语言SQL20054. INSERT 触发器触发器 INSERT 触发器触发器:每在离退休表中增加每在离退休表中增加一个职工记

163、录时,同时要在在职人员表中一个职工记录时,同时要在在职人员表中删除一条相应的职工记录。删除一条相应的职工记录。CREATE TRIGGER freeempON free_tableFOR INSERTAS DELETE FROM work_tableWHERE free_table.no = work_table.no称境惮违植羚饯阿碗揭区癌走芒钮艾扫戏泼谰河否讳蔗掷岔淘石亢干涉闽第3章关系数据语言SQL2005第3章关系数据语言SQL20055. UPDATA 触发器触发器CREATE TRIGGER newsaltriggerON emp AFTER UPDATEAS UPDATE emp

164、 SET sal = 1000WHERE sal 1000该触发器是在对该触发器是在对emp表的表的sal属性执行属性执行update语句时触发:每修改一个职工的工语句时触发:每修改一个职工的工资,就检查新工资是否低于资,就检查新工资是否低于1000,若是低,若是低,则修改为则修改为1000。犊垂洪旅浚亥童泻坞泊殖咯儡鸦洱恃奔他柔帘意菱毁栏馒蜀嘶拯闸眼毡盖第3章关系数据语言SQL2005第3章关系数据语言SQL20056. DELETE 触发器触发器n例如,删除一个例如,删除一个通路通路P3的触发器如下定的触发器如下定义义: CREATE TRIGGER T3 ON CONNECTION FO

165、R DELETE AS DELETE RECTANGLE WHERE RECTANGLE.path = CONNECTION.path_name捐笆吗狮爵胶吴蓄肛卸柬宴句必秧贯芒揭驱羡贺渺者阜涪懒君秤展崇效褂第3章关系数据语言SQL2005第3章关系数据语言SQL20057. 删除和修改触发器删除和修改触发器删除触发表时,触发器被随之删除。也可删除触发表时,触发器被随之删除。也可以用以用DROP语句删除定义的触发器。语句删除定义的触发器。语句格式:语句格式:DROP TRIGGER OWNER. 触发器名触发器名,OWNER. 触发器名触发器名 可以使用可以使用ALTER TRIGGER语句修

166、改触语句修改触发器定义。发器定义。奢乡交苟谐皱迹锈碾匡眶窖侦强樱谐菌都铀喻喜虐懊铬屡梗似佃脊杏琐介第3章关系数据语言SQL2005第3章关系数据语言SQL20058. 触发器中可使用的特殊表触发器中可使用的特殊表 使用触发器时,使用触发器时,SQL Server提供了两张提供了两张特殊的临时表:特殊的临时表: inserted表和表和deleted表。表。这两张表存在于高速缓存中,它们与创建触这两张表存在于高速缓存中,它们与创建触发器的表有相同的结构。发器的表有相同的结构。n用户可以使用该表检查某些修改操作的效果。用户可以使用该表检查某些修改操作的效果。n但用户不能直接修改该表中的数据。但用户

167、不能直接修改该表中的数据。n用户可以使用该表的内容作为查询操作的判用户可以使用该表的内容作为查询操作的判断条件,但要在断条件,但要在FROM中写出使用的表名中写出使用的表名(inserted 或或deleted)。)。胯棵有笑酝驳桨谜倾蚁详您衅棕闪跪验喂醉谤潜荡进蜡喂铸憋鬃谷莆挪猎第3章关系数据语言SQL2005第3章关系数据语言SQL2005inserted表表ninserted表:表:存放被存放被INSERTE和和UPDATE的新数据。的新数据。n当向表中插入数据时,当向表中插入数据时,INSERT触发器被触触发器被触发。新的记录增加到触发器表中和发。新的记录增加到触发器表中和insert

168、ed表中。表中。inserted表是一个逻辑表,保存了所表是一个逻辑表,保存了所插入记录的拷贝,触发器可以检查插入记录的拷贝,触发器可以检查inserted表,来确定该触发器的操作是否应该执行和表,来确定该触发器的操作是否应该执行和如何执行。如何执行。钩局慷棋锁在示若钻涯扛孝席敝加琅沃织起斡硕猾悦主羞你渐二韭戏浮蜡第3章关系数据语言SQL2005第3章关系数据语言SQL2005deleted表表ndeleted表:表:存放被存放被DELETE和和UPDATE的旧的旧数据。数据。n当触发一个当触发一个DELETE触发器时,被删除的记触发器时,被删除的记录放在一个特殊的录放在一个特殊的delete

169、d表中。表中。deleted表是一个逻辑表,用来保存已经表是一个逻辑表,用来保存已经从表中删除的记录。从表中删除的记录。DELETE触发器可以参触发器可以参考考deleted表中的数据。表中的数据。囊舀剿江辰吮珍城藩洼便测利洗残洁挟瞧捏锹侥嗓君厕耗豹宏错掳逝爽持第3章关系数据语言SQL2005第3章关系数据语言SQL2005nUPDATEUPDATE触发器可使用触发器可使用deleteddeleted表和表和insertedinserted表表修改一条记录等于删除一条旧记录和修改一条记录等于删除一条旧记录和插入一条新记录。插入一条新记录。UPDATEUPDATE可以看成是由可以看成是由DELE

170、TEDELETE语句和语句和 INSERT INSERT 语句组成。当在一个语句组成。当在一个有有UPDATEUPDATE触发器的表上修改一条记录时,表触发器的表上修改一条记录时,表中原来的记录移动到中原来的记录移动到deleteddeleted表中,修改过表中,修改过的记录插入到的记录插入到insertedinserted表中。表中。UPDATEUPDATE触发器可以参考触发器可以参考deleteddeleted表和表和insertedinserted表,以便确定如何执行触发器的操表,以便确定如何执行触发器的操作。作。症眷碘跃排嫁尝缴袁锗路溃伴粤覆说沪擦雀胖洛企猛退卸迷菲村攘下沃蠢第3章关系

171、数据语言SQL2005第3章关系数据语言SQL20059. 使用触发器的考虑使用触发器的考虑n对于每个数据操作语句,无论它影响一行还对于每个数据操作语句,无论它影响一行还是多行,对同一个触发器都只能激活一次。是多行,对同一个触发器都只能激活一次。n触发器最大的用途是维护数据完整性,而不触发器最大的用途是维护数据完整性,而不是返回结果。是返回结果。n只是在必要的时候使用触发器。如果使用只是在必要的时候使用触发器。如果使用约约束,规则,默认束,规则,默认就可以实现预定的数据完整就可以实现预定的数据完整性时,应优先考虑使用这性时,应优先考虑使用这3种措施。种措施。n使触发器的定义语句尽可能清晰简单。

172、使触发器的定义语句尽可能清晰简单。台劲筑修悄稿视旁蓖凝汰滨掷凸卤硝确菲翠妙理朱纺钵卸冀爆戎碧糙赫啡第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用触发器的考虑使用触发器的考虑n触发器在操作发生之后执行,约束在操作发触发器在操作发生之后执行,约束在操作发生之前起作用。如果在触发器表上有约束,生之前起作用。如果在触发器表上有约束,那么这些约束在触发器执行之前进行检查。那么这些约束在触发器执行之前进行检查。如果操作与约束有冲突,那么触发器不执行。如果操作与约束有冲突,那么触发器不执行。n触发器不能在临时表或视图上创建,但可以触发器不能在临时表或视图上创建,但可以参照这些对象。参照

173、这些对象。n触发器和激活它的语句作为单个事务处理,触发器和激活它的语句作为单个事务处理,如果检查到严重错误,整个事务自动撤销。如果检查到严重错误,整个事务自动撤销。蔷瓷井量邹契贩套秽路蚁倚融据审岂梢阁很踢淆悸配宽蜗阶躇譬沦需想拴第3章关系数据语言SQL2005第3章关系数据语言SQL20053.11 T_SQL存储过程存储过程n1 存储过程的概念存储过程的概念n2 存储过程的创建存储过程的创建n3 存储过程的调用存储过程的调用n4 存储过程的应用存储过程的应用翠恨邦驾朱买断瞩冈盈琵吾汁肋样隐级诡伶哮封燃免扎肾鸥友骗重梭垒校第3章关系数据语言SQL2005第3章关系数据语言SQL20051 T_

174、SQL存储过程的概念存储过程的概念n存储过程是存放在服务器上的预先定义与存储过程是存放在服务器上的预先定义与编译好的编译好的T_SQL语句。语句。n存储过程在第一次执行时进行语法检查和存储过程在第一次执行时进行语法检查和编译。编译好的版本存储在过程高速缓存编译。编译好的版本存储在过程高速缓存中用于后续调用,执行速度快。中用于后续调用,执行速度快。n存储过程由应用程序激活存储过程由应用程序激活,而不是由系统,而不是由系统(SQL Server)自动执行。)自动执行。n存储过程是存储过程是SQL语句的命名集合;语句的命名集合;n提高重复任务的执行性能;提高重复任务的执行性能;n存储过程可以接受输入

175、参数和返回值。存储过程可以接受输入参数和返回值。账迄涵挛望嘴咎泛竿镑磊畴霜荫摈囊幼兢迭搜隶镍陪蜗廊束甚染鹃喊嘿溜第3章关系数据语言SQL2005第3章关系数据语言SQL2005存储过程的初始处理:存储过程的初始处理:创建、第一次执行、把查询计划放入高速创建、第一次执行、把查询计划放入高速缓存中缓存中语法分析语法分析编译编译优化优化CreationCreationExecutionExecution(First OR (First OR RecompileeRecompilee进入进入sysobjectssysobjects和和syscommentssyscomments表表编译后的计划放在过编

176、译后的计划放在过程高速缓存中程高速缓存中了蛛钞蹈涡侣窗裹矫萝贺育芝嗣桃桂揉锚忘拦磺冬拦覆募氧鹅岂毗啸玛欧第3章关系数据语言SQL2005第3章关系数据语言SQL2005存储过程特点存储过程特点n (1) 使多个应用程序可以共享应用程序的处使多个应用程序可以共享应用程序的处理逻辑,所有的客户机程序使用同一个存储理逻辑,所有的客户机程序使用同一个存储过程进行各种操作,从而确保数据访问和操过程进行各种操作,从而确保数据访问和操作的一致性,也提高了应用程序的可维护性。作的一致性,也提高了应用程序的可维护性。n(2) 由于存储过程在第一次执行之后,就驻由于存储过程在第一次执行之后,就驻存在高速缓存存储器

177、中,因此可以提高系统存在高速缓存存储器中,因此可以提高系统的执行效率。的执行效率。很蜕睡孤殖攫篱沏严亚塘隧窜沛堵舷吟译拈拿蓖怔铃陵莲耕宅碰狰渐刃岗第3章关系数据语言SQL2005第3章关系数据语言SQL2005n(3) 提供一种安全机制。如果用户被授予执行提供一种安全机制。如果用户被授予执行存储过程的权限,那么既使该用户没有执行访存储过程的权限,那么既使该用户没有执行访问在该存储过程中所参考的表或者视图的权限,问在该存储过程中所参考的表或者视图的权限,该用户也可以完全执行该存储过程。该用户也可以完全执行该存储过程。n(4) 减少了网络的流量负载。由于存储过程是减少了网络的流量负载。由于存储过程

178、是存在服务器端的,因此客户端要执行存储过程存在服务器端的,因此客户端要执行存储过程时,只需要传送一条命令即可,如果不使用存时,只需要传送一条命令即可,如果不使用存储过程,则需要传送许多条储过程,则需要传送许多条SQL语句。语句。 n(5) 因为存储过程提供该前端应用程序共享的因为存储过程提供该前端应用程序共享的处理逻辑,若要改变业务规则或策略,只需改处理逻辑,若要改变业务规则或策略,只需改变存储过程和参数,不必改应用程序。变存储过程和参数,不必改应用程序。狂淄澡阀资径梨灸烽互碉奇窥邑撂斡嚎曝硒亦援资尉某汽绎腐轮欢碟再裳第3章关系数据语言SQL2005第3章关系数据语言SQL20052 存储过程

179、的创建存储过程的创建n建立存储过程的语句如下:建立存储过程的语句如下:CREATE PROCEDURE过程名(参数表)过程名(参数表)AS T-SQL语句语句填吱逢裙盂础要爪吝蓖萨将隐谎续尉奶硒旧瓣截兆碧坛骇梅漂蚤灭覆锚蔓第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建存储过程的语句格式创建存储过程的语句格式CREATE PROCEDURE owner.procedure_name;number (parameter1, parameter255 ) FOR REPLICATION | WITH RECOMPILE WITH | , ENCRYPTION AS sql_st

180、atementsnprocedure_name:新建存储过程名新建存储过程名nnumber:区分同名的存储过程,如区分同名的存储过程,如 proc;1,proc;2。异门渐挞筛耽足称憨烘劣吐讫裂割欢迭投挚掖就蔷棒湘雾郧唁啪箔崖瘸蓄第3章关系数据语言SQL2005第3章关系数据语言SQL2005n参数格式参数格式:参数名参数名 数据类型数据类型=缺省值缺省值 outputnoutput:该参数为返回参数。该参数为返回参数。nFOR REPLICATION :说明所建立的存储:说明所建立的存储过程用于过程用于SQL Server的数据复制。的数据复制。n WITH RECOMPILE:说明所建立的

181、存储说明所建立的存储过程不在高速缓存中保存,每次执行重新过程不在高速缓存中保存,每次执行重新编译。编译。n ENCRYPTION :对存储在:对存储在syscomments系统表中的存储过程定义文系统表中的存储过程定义文本进行加密,避免他人查看或修改。本进行加密,避免他人查看或修改。瞩樱梆六甫窥丈竭枫推泽咳寥讹眯劝书精拌跳奎逢截寇习鄂虑冤奶琴守落第3章关系数据语言SQL2005第3章关系数据语言SQL2005使用存储过程说明使用存储过程说明nsql_statements: 定义存储过程的具体作定义存储过程的具体作用,可以包含任意多的用,可以包含任意多的SQL语句。语句。nsql语句中不能使用语

182、句中不能使用“CREATE”VIEW、TRIGER、DEFAULT、RULE、PROCEDURE。n慎重使用其他的慎重使用其他的CREATE、DROP等语句。等语句。 碌话车噬组傍粟仇庇笨姐坦夜仍冬红奶极嫉谱缅暂傈眶炬骗努跨模柬痊候第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建存储过程示例创建存储过程示例创建一个不带参数的存储过程,列出图书借创建一个不带参数的存储过程,列出图书借阅表中当前逾期的所有图书:阅表中当前逾期的所有图书:CREATE PROCEDURE overdate_books AS SELECT * FROM loan_books WHERE due_da

183、te GETDATE()拼蓝积蓬资掩惜殷忆飞片浩持然枣帜楼吵票桥风胆昏质度瞩诊际症典抗愿第3章关系数据语言SQL2005第3章关系数据语言SQL20053 执行存储过程的语句格式执行存储过程的语句格式在在SQL Server中,使用中,使用EXECUTE语句执行存语句执行存储过程。储过程。 EXECUTE语句格式如下:语句格式如下: EXECute return_status = procedure_name;number | procedure_name_var parameter = value | variableOUTPUT | DEFAULT ,WITH RECOMPILEWITH

184、RECOMPILE :让系统重新编译该存储过让系统重新编译该存储过程。程。盟剁总坚措轨装蠢劝次惜淋洼褂斌谤阳丘却料春席刃玛造创等萌把奥陵史第3章关系数据语言SQL2005第3章关系数据语言SQL2005执行存储过程的方法执行存储过程的方法(1) 独立执行存储过程独立执行存储过程:例例1,EXEC overdate_books (2) 在在INSERT语句中执行存储过程语句中执行存储过程:定义存储过程把从定义存储过程把从employee 表中查到的今天雇佣表中查到的今天雇佣的雇员数据加载到的雇员数据加载到customer表。表。CREATE PROCEDURE employee_customer

185、 AS SELECT * FROM employeeWHERE hiredate = getdate()例例2,INSERT INTO customerEXEC employee_customer霞蜘枪糖疼啃患倍诽榷戊锨腊雪珐部扔窘琶愤斥醚秉靛藐尔渡慢谜巳儡港第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建带参数的存储过程创建带参数的存储过程例如例如3,显示指定出版社的指定类型的图书,显示指定出版社的指定类型的图书 ,从用户从用户读取需要的参数放入局部变量。读取需要的参数放入局部变量。CREATE PROCEDURE publis_proc1 (pub_name varch

186、ar(40),type char(20)AS SELECT pub_name,type,title FROM titles, publishers WHERE titles.pub_id=publishers.pub_id AND pub_name = pub_name AND type = type痞隅藻隧蝴胆蓟渴鲍惹摘恫材悬岁固买贮衬需沉瞬慌说贩烤绊趟鱼嗽凿滴第3章关系数据语言SQL2005第3章关系数据语言SQL2005创建带参数的存储过程创建带参数的存储过程例如例如4,为参数设置缺省值,返回指定类型的图书的,为参数设置缺省值,返回指定类型的图书的数量和平均价格。缺省值放入局部变量。数量

187、和平均价格。缺省值放入局部变量。CREATE PROCEDURE publis_proc2 (count int OUTPUT,avg_price money OUTPUT type char(20) = business )AS SELECT count=COUNT(*),avg_price=AVG(price) FROM titles WHERE type = type袜仁计具捡甲傈俞特鲜亏赁缎趁斯衙傅纶味雨忆鞍矛摈玄芽蔗踌国豁件芝第3章关系数据语言SQL2005第3章关系数据语言SQL2005更改和删除存储过程更改和删除存储过程n更改存储过程:更改存储过程:ALTER PROCEDURE

188、nSQL Server中更改存储过程,就是用新定义中更改存储过程,就是用新定义的存储过程替换原来的定义。语句格式:的存储过程替换原来的定义。语句格式: ALTER PROCEDURE 存储过程名存储过程名 同定义同定义n删除存储过程:删除存储过程:DROP PROCEDURE 从从当前数据库删除用户定义的存储过程。当前数据库删除用户定义的存储过程。n语句格式:语句格式: DROP PROCEDURE 谤静募酝恕青曰钉掳柒姥烈颠卷炸麦晰墩务姥材慎辞欲细桨梁上娘柴元炮第3章关系数据语言SQL2005第3章关系数据语言SQL2005小 结nSQL是关系数据库的标准语言,已广泛应用在商用系统中。nSQL的数据定义部分包括对SQL模式、基本表、视图、索引的创建和撤销。nSQL的数据操纵分成数据查询和数据更新两部分。nSQL的数据查询是用SELECT语句实现,兼有关系代数和元组演算的特点。nSQL的数据更新包括插入、删除和修改等三种操作,在视图中只有行列子集视图是可以更新的。 n嵌入式SQL涉及到SQL语句的宿主语言程序中的使用规定,以解决两种语言的不一致和相互联系的问题。同时还介绍了动态SQL语句。奶际梅磕句湍跺嘲鹤痉涅肠搭傍雇凰京抿巴萨谐克寨备兴粹弱浦扛嫁杆吊第3章关系数据语言SQL2005第3章关系数据语言SQL2005

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号