数据库的查询和视图培训课件

PPT
  • 阅读 158 次
  • 下载 0 次
  • 页数 85 页
  • 大小 656.000 KB
  • 2022-12-05 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
数据库的查询和视图培训课件
可在后台配置第一页与第二页中间广告代码
数据库的查询和视图培训课件
可在后台配置第二页与第三页中间广告代码
数据库的查询和视图培训课件
可在后台配置第三页与第四页中间广告代码
数据库的查询和视图培训课件
数据库的查询和视图培训课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 85
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】数据库的查询和视图培训课件.ppt,共(85)页,656.000 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-92426.html

以下为本文档部分文字说明:

数据库的查询和视图(优选)数据库的查询和视图4.1数据库的查询下面介绍SELECT语句,它是T-SQL的核心。语法主体格式如下:SELECT<输出列>/*指定查询结果输出列*/[INTO新表]/*指定查询结果存入新表*/[FROM{<表源>}[,...]]/*指定查询源:

表或视图*/[WHERE<条件>]/*指定查询条件*/[GROUPBY<分组条件>]/*指定查询结果分组条件*/[HAVING<分组统计条件>]/*指定查询结果分组统计条件*/[ORDERBY<排序顺序>]/*指定查询结果排序顺序*/选择查询结果输出列1.选择所

有列使用“*”表示选择一个表或视图中的所有列。【例4.1】查询pxscj数据库中xsb表的所有记录。T-SQL命令如下:USEpxscjSELECT*FROMxsb选择查询结果输出列执行结果如图4.1所示。选择查询结果输出列2.选择一个表中指定的列可选择一个表中

的部分列,各列名之间要以逗号分隔。【例4.2】查询xsb表中计算机专业学生的学号、姓名和总学分。T-SQL命令如下:SELECT学号,姓名,总学分FROMxsbWHERE专业='计算机'选择查询结果输出列3.定义列别名当希望查询结果中的列使用自

己选择的列标题时,可以AS更改列标题名,该列标题称为该列的别名。【例4.3】查询xsb表中计算机系同学的学号、姓名和总学分,查询结果中各列的标题分别指定为number、name和mark。T-SQL命令如下:SELECT学号ASn

umber,姓名ASname,总学分ASmarkFROMxsbWHERE专业='计算机'执行结果如图4.2所示。选择查询结果输出列也可以使用“列别名=表达式”更改列标题。例如:SELECTnumber=学号,name=姓名,

mark=总学分FROMxsbWHERE专业='计算机'当自定义的列标题中含有空格时,必须使用引号将标题括起来。例如:SELECT'Studentnumber'=学号,姓名AS'Studentname',mark=总学分FROMxsbWHERE专业='计算机'选择查询

结果输出列4.替换查询结果中的数据在对表进行查询时,有时希望对所查询的某些列得到的数据进行变换。要替换查询结果中的数据,则可使用CASE表达式,格式为:CASEWHEN条件1THEN表达式1WHEN条件2THEN表达式2……E

LSE表达式END选择查询结果输出列【例4.4】查询xsb表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换,列标题更改为“等级”。若总学分为空值,则替换为“尚未选课”;若总学分小于

50,则替换为“不及格”;若总学分在50与52之间,则替换为“合格”;若总学分大于52,则替换为“优秀”。T-SQL命令如下:SELECT学号,姓名,等级=CASEWHEN总学分ISNULLTHEN'尚未选课'WHEN总学分<50THEN'不及格'WHEN总学

分>=50and总学分<=52THEN'合格'ELSE'优秀'ENDFROMxsbWHERE专业='计算机'选择查询结果输出列执行结果如图4.3所示。选择查询结果输出列5.计算列值使用SELECT对列进行

查询时,在结果中除了输出列值,也可以输出表达式值。格式为:SELECT表达式[,表达式]【例4.5】查询通信工程专业学生的年龄。T-SQL命令如下,执行结果如图4.4所示。SELECT学号,姓名,出生时间,year(getdate(

))-year(出生时间)AS年龄FROMxsbWHERE专业='通信工程'计算列值使用算术运算符:+(加)、(减)、*(乘)、/(除)和%(取余),其中,算术运算符(+、、*、/)可以用于任何数字类型的列,包括int、smallint、tinyint、decimal、

numeric、float、real、money和smallmoney;%可以用于上述除money和smallmoney以外的数字类型。选择查询结果输出列图4.4执行结果4.5及时完成领导交待的其他各项工作。11.2货物的数量不足或表面瑕疵,买方应在验收时

当面提出;对其它质量问题有异议的应在安装调试后七(7)天内提出。6.1卖方应根据合同货物的不同形状与特点,对所提供的全部货物均应按标准保护措施进行包装,以防止货物在转运中损坏或变质。这类包装应采取防潮、防晒、防锈、防腐蚀、防震动及防止其它损坏的必要

保护措施,从而保护货物能够经受多次搬运、装卸及长途运输。1、安全生产管理制度31.2资格性检查是依据法律法规和招标文件的规定,对投标文件中资格证明、投标保证金等进行审查,以确定投标人是否具备投标资格。(十)决定任用。拟

进行换届的团组织将团员大会选举结果报所在部门党组织和上级团组织,由企业党委发文公布任职通知。13.合同的支付10、确定成交候选人6.4长期不用的管线,应将两头封住,避免其他气体介质进入管线。产品的多元化,对达到顾客满意具有重要的意

义。同样道理,单一的服务标准也不能满足所有的顾客。因此,要根据顾客需要对服务标准进行区隔划分。例如时下流行的足浴,师傅会询问顾客水的温度如何:顾客觉得烫就加点冷水,顾客觉得水冷就加点热水。这是提供差异化的服务。9.2未按规定时间和数额交纳磋商保证金的响应文件,应视为非响应性响应予以拒绝。17.

1卖方应按照招标文件中确定的交货期完成交货和提供服务。除了行走的姿态和速度,服务人员在走动的时候要时刻注意服务的礼仪。比如说跟顾客在一起走,要注意引导在前,陪同贵宾的时候上、下楼梯要注意引导贵宾,进、出电梯要为顾客开门关门。此外还要注意服务人员的鞋子大小要合适,否则走起路来会发出令

人不悦的响声。选择查询结果输出列6.消除结果集中的重复行对表只选择其某些列时,可能会出现重复行。可以使用DISTINCT关键字消除结果集中的重复行,格式为:SELECTDISTINCT|ALL列名[,列名…]【例4.6】对p

xscj数据库的xsb表只选择专业,消除结果集中的重复行。代码如下,执行结果如图4.5所示。SELECTDISTINCT专业FROMxsb与DISTINCT相反,当使用关键字ALL(默认值)时,将保留结果集的所有行。选择查询结果输出列7.限制结果集返回行数如果查询结果集

的行数非常多,那么可以使用TOP选项限制其返回的行数。格式为:[TOP表达式[PERCENT][WITHTIES]]其中,“表达式”可以是指定数目或百分比数目的行。若带PERCENT关键字,则以表达式值作为返回结果集百分数。

【例4.7】对pxscj数据库的xsb表选择姓名、专业和总学分,返回结果集的前6行。T-SQL命令如下:SELECTTOP6姓名,专业,总学分FROMxsb选择查询结果输出列8.聚合函数聚合函数常常用于对一组值进行计算,然后返回单个值。通常与GROUPBY子句一起使用。如果一个SE

LECT语句中有一个GROUPBY子句,则这个聚合函数对所有列起作用;如果没有,则SELECT语句只产生一行作为结果。SQLServer所提供的聚合函数列于表4.1中。函数名说明AVG求组中值的平均值BINARY_CHECKSUM返回对表中的行或表达式列表计算的二进制校验

值,可用于检测表中行的更改CHECKSUM返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引CHECKSUM_AGG返回组中值的校验值COUNT求组中项数,返回int类型整数COUNT_BIG求组中项数,返回bigint类型整数GROUPING产生一

个附加的列GROUPING_ID为聚合列列表中的每一行创建一个值以标识聚合级别MAX求最大值MIN求最小值SUM返回表达式中所有值的和STDEV返回给定表达式中所有值的统计标准偏差STDEVP返回给定表达式中所有值的填充统计标准偏差VAR返回给定表达式中所有值的统计方差VA

RP返回给定表达式中所有值的填充的统计方差选择查询结果输出列(1)SUM和AVG。SUM和AVG分别用于求表达式中所有值项的总和与平均值,格式为:SUM/AVG([ALL|DISTINCT]表达式)其中,“表达式”可以是常量、列、函数或表达式,其数据类型只能是int、smallin

t、tinyint、bigint、decimal、numeric、float、real、money和smallmoney。【例4.8】求所有课程的总学分和选修101课程的学生的平均成绩。T-SQL命令如下,执行结果如图4.6所示。SELECTSUM(学分)AS'总学分'FROMkcbSE

LECTAVG(成绩)AS'计算机基础平均成绩'FROMcjbWHERE课程号='101'选择查询结果输出列图4.6执行结果选择查询结果输出列(2)MAX和MIN。MAX和MIN分别用于求表达式中所有值项的最大值与最小值,语法格式为:MAX/MIN([ALL|D

ISTINCT]表达式)其中,“表达式”可以是常量、列、函数或表达式,其数据类型可以是数字、字符和时间日期类型。【例4.9】求选修101课程的学生的最高分和最低分。T-SQL命令如下,执行结果如图4.7所示。SELECTMAX(成绩)AS'计

算机基础最高分',MIN(成绩)AS'计算机基础最低分'FROMcjbWHERE课程号='101'选择查询结果输出列(3)COUNT。COUNT用于统计组中满足条件的行数或总行数,格式为:COUNT({[ALL|DISTINCT]表

达式}|*)其中,“表达式”的数据类型是除text、image或ntext之外的任何类型。【例4.10】求学生的总数、专业个数和总学分在50分以上的人数。T-SQL命令如下,执行结果如图4.8所示。SELECTCOUNT(*)AS'学生总数',COUNT(DISTINCT专业)AS'专

业个数'FROMxsb;GOSELECTCOUNT(总学分)AS'总学分>50分人数'FROMxsbWHERE总学分>50;GO选择查询条件:WHERE子句1.表达式比较比较运算符用于比较两个表达式值,共有

9个,分别是=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)、!=(不等于)、!<(不小于)、!>(不大于)。比较运算的格式为:表达式1{比较运算符}表达式2其中,“表达式”是除text、ntext和image以外类型的表达式

。【例4.11】查询xsb表中通信工程专业总学分大于等于42的同学的情况。T-SQL命令如下:SELECT*FROMxsbWHERE专业='通信工程'AND总学分>=42选择查询条件:WHERE子句2.模式匹配LI

KE谓词用于指出字符串是否与指定的字符串相匹配,返回逻辑值TRUE或FALSE。格式为:表达式[NOT]LIKE模式串[ESCAPE转义符]说明:(1)表达式:一般为字符串表达式,在查询语句中可以是列名。(2)模式串:可以使用通配符,表

4.2列出了LIKE谓词可以使用的通配符及其说明。(3)转义符:应为有效的SQLServer字符,没有默认值,且必须为单个字符。当模式串中含有与通配符相同的字符时,应通过该字符前的转义符指明其为模式串中

的一个匹配字符。使用ESCAPE可指定转义符。(4)NOTLIKE:使用NOTLIKE与LIKE的作用相反。通配符说明%代表倒数_(下画线)代表单个字符[]指定范围(如[a-f]、[0-9])或集合(如[abcdef])中的任何单个字符[^]指定不属于范围(如[^a-f]、[^0-9])或

集合(如[^abcdef])的任何单个字符选择查询条件:WHERE子句【例4.12】查询xsb表中姓“王”且单名的学生情况。T-SQL命令如下,执行结果如图4.9所示。SELECT*FROMxsbWHERE姓名LIKE'王_'选择查询条件:WHERE子句【例4.1

3】查询xsb表中学号倒数第5个数字为9,且倒数第1个数在1~5之间的学生学号、姓名及专业。T-SQL命令如下,执行结果如图4.10所示。SELECT学号,姓名,专业FROMxsbWHERE学号LIKE'%9___[1-5]'选择查询条件:WHERE子句【

例4.13】查询xsb表姓名中倒数第2个字为’玉’的学生学号、姓名及专业。T-SQL命令如下,执行结果如图4.10所示。SELECT学号,姓名,专业FROMxsbWHERE学号LIKE‘%玉_’3以顾客为关注焦点,服务至上,理解顾客当前和未来的要求,

满足顾客要求并争取超越顾客的期望。11.检验和验收依据《中华人民共和国招标投标法》、《中华人民共和国政府采购法》和《评标委员会和评标方法暂行规定》,结合项目特点,评标严格按照招标文件的要求和条件进行。“公平、公正、择优、效益”为本次评标的基本原则,评标委员会将按照这一原则的要求

,公正、平等地对待各投标人。同时,在评标时恪守以下原则:EVALUATE——塑造顾客价值人们在改变惯性的时候会觉得不舒服和不习惯,潜意识会不由自主地回到从前。如何来克服这种情况呢?例如,藤本身具有很强的弹性,在制作藤椅的过程中,需要用火烘烤藤,使之慢慢变形,在压力

的作用下,藤才会真正变成所期望的形状。1、总则:为增强员工安全生产、环境保护意识,提高员工的安全操作和自我保护能力,确保安全生产,防止环境污染,并依据国家安全生产相关的法律法规,结合我加气站实际情况,制定本制度6.1熟悉CNG汽车充气工艺和检查标准。4.6.3岗位安

全技术操作规程,岗位将衔接配合的安全注意事项五、自我约束机制(15)无重大违法记录声明10、确定成交候选人8.1竞争性磋商响应文件正本、所有副本,应分别封装于不同的密封袋内,密封袋上应分别标上“正本”、“副本”、并

注明竞争性磋商响应人名称、采购项目编号、采购项目名称。1、货、款监控选择查询条件:WHERE子句3.范围比较(1)当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:表

达式[NOT]BETWEEN表达式1AND表达式2当不使用NOT时,若“表达式”的值在“表达式1”与“表达式2”之间(包括这两个值),则返回TRUE,否则返回FALSE;当使用NOT时,返回值刚好相反。【例4.1

4】查询xsb表中不在1995年出生的学生情况。T-SQL命令如下,执行结果如图4.11所示。SELECT学号,姓名,专业,出生时间FROMxsbWHERE出生时间NOTBETWEEN'1995-1-1'and'1995-12-31'也可使用下列命令:SELECT学号,姓名,专业,出生

时间FROMxsbWHEREWHEREyear(出生时间)!=1995选择查询条件:WHERE子句图4.11执行结果选择查询条件:WHERE子句(2)使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回TRUE,否

则返回FALSE。格式为:表达式IN(表达式[,…])【例4.15】查询xsb表中专业为“软件工程”或“通信工程”学生情况。T-SQL命令如下:SELECT*FROMxsbWHERE专业IN('软件工程','

通信工程')下列T-SQL命令等价:SELECT*FROMxsbWHERE专业='计算机'OR专业='通信工程'选择查询条件:WHERE子句4.空值比较当需要判定一个表达式的值是否为空值时,使用ISNULL关键字,格式

为:表达式IS[NOT]NULL当不使用NOT时,若表达式的值为空值,则返回TRUE,否则返回FALSE;当使用NOT时,结果刚好相反。【例4.16】查询总学分尚不定的学生情况。SELECT*FROMxsbWHERE备注ISNULL选择查询

条件:WHERE子句5.子查询1)IN子查询IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为:表达式[NOT]IN(子查询)当表达式与子查询的结果表中的某个值相等时,IN谓词返回TRUE,否则

返回FALSE;若使用了NOT,则返回的值刚好相反。【例4.17】查询选修了课程号为206的课程的学生情况。T-SQL命令如下:SELECT*FROMxsbWHERE学号IN(SELECT学号FROMcjbWH

ERE课程号='206')本例中,先执行子查询:SELECT学号FROMcjbWHERE课程名='206'选择查询条件:WHERE子句【例4.18】查询未选修离散数学的学生学号和姓名。T-SQL命令如下:SELECT

学号,姓名FROMxsbWHERE学号NOTIN(SELECT学号FROMcjbWHERE课程号IN(SELECT课程号FROMkcbWHERE课程名='离散数学'))选择查询条件:WHERE子句2)比较子查询这种子查询可以认为是IN子查询的扩展,

它使表达式的值与子查询的结果进行比较运算,格式为:表达式{比较运算符}{ALL|SOME|ANY}(子查询)其中,ALL、SOME和ANY说明对比较运算的限制。【例4.19】查询选修了离散数学的学生学号和姓名。T-SQL命令

如下:SELECT学号FROMcjbWHERE课程号=(SELECT课程号FROMkcbWHERE课程名='离散数学');选择查询条件:WHERE子句【例4.20】查询比所有计算机系的学生年龄都大的学生。T-SQL命令

如下:SELECT*FROMxsbWHERE出生时间<ALL(SELECT出生时间FROMxsbWHERE专业='计算机')【例4.21】查询206课程号成绩不低于101课程号最低成绩的学生学号。T-SQL命令如下:SELECT学号FROMcjbWH

ERE课程号='206'AND成绩!<ANY(SELECT成绩FROMcjbWHERE课程号='101')选择查询条件:WHERE子句3)EXISTS子查询EXISTS谓词用于测试子查询的结果是否为空表,若子查询的结果集不为空,则

EXISTS返回TRUE,否则返回FALSE。EXISTS还可与NOT结合使用,即NOTEXISTS,其返回值与EXISTS刚好相反。格式为:[NOT]EXISTS(子查询)【例4.22】查询选修206课程的学生姓名。T-SQL命令如下:SELECT姓名FROMxs

bWHEREEXISTS(SELECT*FROMcjbWHERE学号=xsb.学号AND课程号='206')选择查询条件:WHERE子句【例4.23】查询选修了全部课程的同学的姓名。SELECT姓名FROMxsbWHERE

NOTEXISTS(SELECT*FROMkcbWHERENOTEXISTS(SELECT*FROMcjbWHERE学号=xsb.学号AND课程号=kcb.课程号))选择查询条件:WHERE子句另外,子查询还可以用在SELECT语句的其他子句中,如FROM子句。SELECT关键字后

面也可以定义子查询。【例4.24】从xsb表中查询所有女学生的姓名、学号及其与“191301”号学生的年龄差距。T-SQL命令如下,执行结果如图4.12所示。SELECT学号,姓名,YEAR(出生时间)-YEAR((SELECT出生时间FROMxsbWHERE学号='19130

1'))AS年龄差距FROMxsbWHERE性别=0指定查询对象:FROM子句1.表或视图名SELECT语句可查询的表或视图,表和视图可以是一个或多个,有关视图的内容将在下一节中介绍。【例4.25】查询“191301”号学生的计算机基础课的成绩。T-SQL命令

如下:SELECT成绩FROMcjb,kcbWHEREcjb.课程号=kcb.课程号AND学号='191301'AND课程名='计算机基础'指定查询对象:FROM子句【例4.26】查询选修了与学号为191302的同学所选修的全部课程的同学的学号。分析:本例即要查找这样的学号y,对所有的课程号x,

若191302号同学选修了该课,那么y也选修了该课。T-SQL命令如下:SELECTDISTINCT学号FROMcjbASCJ1WHERENOTEXISTS(SELECT*FROMcjbASCJ2WHERECJ2.学号='191

302'ANDNOTEXISTS(SELECT*FROMcjbASCJ3WHERECJ3.学号=CJ1.学号ANDCJ3.课程号=CJ2.课程号))9.2卖方提供的服务的费用应含在货物的合同总价中,买方不再另行支付。1、完工后必须报管理处组织验收,未经验收或验收不

合格不得使用。(2)提供虚假的财务状况或者业绩;21.4因不可抗力造成合同双方或任何一方无法继续履行合同时,经双方协商后可解除合同。协商不能达成一致,则按本合同条款第22条的规定处理。3.5当班调度有权根据品质要求对原燃材料、半成品、成品库存进行调配,对公司的物流流量负责,对

生产物料平衡负责。服务人员和顾客之间是一种互动沟通。“镜子原理”说明了顾客与服务人员之间的互动关系:你对镜子笑,镜中人就会笑;你对镜子哭,镜中人就会哭;你伸手打人,他也伸手打人。因此,当顾客出现不礼貌的言行时,服务人员必须忍耐,否则双方争执不

下,只会加重恶化事态。如果表现得非常理性、礼让有加,顾客就会平心静气,事态也会发生转变。9.服务从备受肯定、服务品质名扬金融业的玉山银行建立植根式服务文化的成功经验来看,全面落实满意服务品质的执行技术必须包括以下三项策略:领导重视、经营者主导;规划贴心的服务质量;定期进行服务质量的检

测。7.7对违章作业和不遵守站内规章制度的现象有权向站长建议进行处罚,对安全工作有突出贡献的进行奖励。区隔服务在实践中怎样具体应用呢?知心服务和遇心服务怎样开展呢?以下将通过一些案例,对知心服务和遇心服务进行比照说明。(2)提供货物组装和维修所需的

专用工具和辅助材料;服务是一种感受,服务人员把这种感受反馈给客户。通过情景体验式的服务训练,可以强化被培训者的感受和价值。强化训练要使受培训者达到这样的认识:服务不是依靠强制执行的东西,而是发自内心的体验和经验在实际行动中的转化。指定查询对象:FROM子句2.导出表导出表表示由子查询中

SELECT语句的执行而返回的表,但必须使用AS关键字为子查询产生的中间表定义一个别名。【例4.27】从xsb表中查询总学分大于50的男同学的姓名和学号。T-SQL命令如下:SELECT姓名,学号,总学分FROM(SELECT姓名

,学号,性别,总学分FROMxsbWHERE总学分>=50)ASstudentWHERE性别=1执行结果如图4.13所示。指定查询对象:FROM子句【例4.28】在xsb表中查询在1995年1月1日以前出生的学生的姓名和专业。T-SQL

命令如下,执行结果如图4.14所示。SELECTstudent.name,student.specialityFROM(SELECT*FROMxsbWHERE出生时间<'19950101')ASstudent(num,name,sex,birthday,s

peciality,score,mem)连接1.连接谓词在SELECT语句的WHERE子句中使用比较运算符给出连接条件对表进行连接,称为连接谓词表示形式。【例4.29】查询pxscj数据库每个学生的情况以及选修的课程情况。USEpxscj

GOSELECTxsb.*,cjb.*FROMxsb,cjbWHERExsb.学号=cjb.学号连接(1)自然连接。它在目标列中去除相同的字段名。【例4.30】自然连接查询。T-SQL命令如下:SELECTxsb.*,cjb.课程号,cjb

.成绩FROMxsb,cjbWHERExsb.学号=cjb.学号本例所得的结果表包含xsb的使用字段、课程号、成绩。若选择的字段名在各个表中是唯一的,则可以省略字段名前的表名。如本例的SELECT语句也可写为:SELECTxsb.*,课程号,成绩FROMxsb,cjbW

HERExsb.学号=cjb.学号连接【例4.31】查询选修了206课程且成绩在80分以上的学生姓名及成绩。T-SQL命令如下,执行结果如图4.15所示。SELECT姓名,成绩FROMxsb,cjbWHERExsb.学号=cjb.学号AND课程号='206'AND成绩>=8

0连接(2)多表连接。有时,用户所需要的字段来自两个以上的表,那么就要对两个以上的表进行连接,称之为多表连接。【例4.32】查询选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。T-SQL命令如下,执行结果如图4.16所示。SELECTx

sb.学号,姓名,课程名,成绩FROMxsb,kcb,cjbWHERExsb.学号=cjb.学号ANDkcb.课程号=cjb.课程号AND课程名='计算机基础'AND成绩>=80连接2.以JOIN关键字

指定的连接T-SQL扩展了以JOIN关键字指定连接的表示方式,使表的连接运算能力有所增强。FROM子句的<连接表>表示将多个表连接起来。格式如下:<连接表>::={<表源><类型><表源>ON<查询条件>

|<表源>CROSSJOIN<表源>|左表源{CROSS|OUTER}APPLY右表源|[()<连接表>[]]}连接说明:(1)<表源>:准备要连接的表。(2)<类型>:表示连接类型。格式为:<类型>::=[{INNER|{{LEFT|RIGHT|FULL}[OUTER]}}[<连接提示>]]J

OIN其中,INNER表示内连接,OUTER表示外连接。(3)ON:用于指定连接条件,<查询条件>为连接的条件。(4)APPLY运算符:使用APPLY运算符可以为实现查询操作的外部表表达式返回的每个行调用表值函数。(5)CROSSJOIN:表示交叉连接。连接因此,以JOIN关键字指定的连接有三种类

型:内连接、外连接、交叉连接。①内连接。指定了INNER关键字的连接是内连接,内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。【例4.33】查询每个学生的情况以及选修的课程情况。T-SQL命令如下:SELECT*FROMxsbINNERJ

OINcjbONxsb.学号=cjb.学号执行的结果将包含xsb表和cjb表的所有字段(不去除重复字段——学号)。【例4.34】查询选修了206课程且成绩在80分以上的学生姓名及成绩。T-SQL命令如下:SELECT姓名,成绩FROMxsbJOINcjbONxsb.学号=cjb.学号WHERE

课程号='206'AND成绩>=80连接【例4.35】查询选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。T-SQL命令如下:SELECTxsb.学号,姓名,课程名,成绩FROMxsbJOINcjbJOINkcbONcjb.课程号=kcb.课程

号ONxsb.学号=cjb.学号WHERE课程名='计算机基础'AND成绩>=80作为一种特例,可以将一个表与它自身进行连接,称为自连接。【例4.36】查询不同课程成绩相同的学生的学号、课程号和成绩。T-SQL命令如下:

SELECTa.学号,a.课程号,b.课程号,a.成绩FROMcjbaJOINcjbbONa.成绩=b.成绩ANDa.学号=b.学号ANDa.课程号!=b.课程号执行结果如图4.17所示。连接②外连接。指定了OUTER关键字的为外连接,外连接的结果表不但包含满足连接

条件的行,还包括相应表中的所有行。外连接包括以下三种:LEFTOUTERJOIN(左外连接):结果表中除了包括满足连接条件的行外,还包括左表的所有行。RIGHTOUTERJOIN(右外连接):结果表中除了包括满足连接条件的行外,还包括右表的

所有行。FULLOUTERJOIN(完全外连接):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。连接【例4.37】查询所有学生情况,以及他们选修的课程号。T-SQL命令如下,执行结果如图4.18所示。SELECTxsb.*,课程号FROMxsbLEFTOUTERJOINcjbON

xsb.学号=cjb.学号连接【例4.38】查询被选修了的课程的选修情况和所有开设的课程名。SELECTcjb.*,课程名FROMcjbRIGHTJOINkcbONcjb.课程号=kcb.课程号连接③交叉连接。交叉连接实际上是将两个表进行笛卡儿积运算,结果表是由第一个表的

每一行与第二个表的每一行拼接后形成的表,因此结果表的行数等于两个表的行数之积。【例4.39】列出学生所有可能的选课情况。T-SQL命令如下,执行结果如图4.19所示。SELECT学号,姓名,课程号,课程名FROMxsbCROSSJOINkcb指定查询结果分组方法:GROUPBY子句

这里介绍ISO标准的GROUPBY子句。语法格式如下:GROUPBY{<列表达式>|ROLLUP(<复合元素列表>)|CUBE(<复合元素列表>)|GROUPINGSETS(<分组集合项列表>)}指定查询结果分组方法:GROUPBY子句【例4.40】在pxscj数据库xsb表中分

别用GROUPBYROLLUP、GROUPBYCUBE和GROUPBYGROUPINGSETS对(专业,性别)产生一个结果集。(1)采用GROUPBYROLLUP。SELECT专业,性别,COUNT(*)AS'人数'FROMxsbGROUPBYROLLUP(专业,性别)(2)采用GROUP

BYCUBE。SELECT专业,性别,COUNT(*)AS'人数'FROMxsbGROUPBYCUBE(专业,性别)指定查询结果分组方法:GROUPBY子句(3)采用GROUPBYGROUPINGSETS。执行结果如图4.20所示。SELECT专业,性别,COUNT(*)AS

'人数'FROMxsbGROUPBYGROUPINGSETS(专业,性别)(a)(b)(c)图4.20执行结果指定查询结果分组后筛选条件:HAVING子句使用GROUPBY子句和聚合函数对数据进行分组后,还可以使用HA

VING子句对分组数据做进一步的筛选。格式为:[HAVING<查询条件>]其中,<查询条件>与WHERE子句的查询条件类似,不过HAVING子句中可以使用聚合函数,而WHERE子句中不可以。【例4.41】查询平均成绩在85分以上的学生的学号和平均成绩。T-SQL命令如下,执行结果如图4.21所示。

SELECT学号,AVG(成绩)AS'平均成绩'FROMcjbGROUPBY学号HAVINGAVG(成绩)>=85指定查询结果分组后筛选条件:HAVING子句【例4.42】查询选修课程超过2门且成绩都在80分以上的学生的学号。T-SQL命令如下:S

ELECT学号FROMcjbWHERE成绩>=80GROUPBY学号HAVINGCOUNT(*)>2指定查询结果分组后筛选条件:HAVING子句【例4.43】查询通信工程专业平均成绩在85分以上的学生的学号和平均成绩。

T-SQL命令如下,执行结果如图4.22所示。SELECT学号,AVG(成绩)AS'平均成绩'FROMcjbWHERE学号IN(SELECT学号FROMxsbWHERE专业='通信工程')GROUPBY学号HAVINGAVG(成绩)>=85指定查询结果排序顺序:ORDERBY子

句在应用中经常要对查询的结果排序输出,如将学生成绩由高到低排序。在SELECT语句中,使用ORDERBY子句对查询结果进行排序。格式为:[ORDERBY{排序表达式[COLLATE排序名][ASC|DESC]}]指定查询结果排序顺序

:ORDERBY子句【例4.44】将通信工程专业的学生按出生时间先后顺序排序。T-SQL命令如下,执行结果如图4.23所示。SELECT*FROMxsbWHERE专业='通信工程'ORDERBY出生时间指定查询结果排序顺序:ORDERBY子

句【例4.45】将计算机专业学生的“计算机基础”课程成绩按降序排列。T-SQL命令如下,执行结果如图4.24所示。SELECT姓名,课程名,成绩FROMxsb,kcb,cjbWHERExsb.学号=cjb.学号ANDcjb.课程号=kcb.课程号AND课程名='计算机基础'AN

D专业='计算机'语句的其他语法1.INTO使用INTO子句可以将SELECT查询所得的结果保存到一个新建的表中。INTO子句的格式为:[INTO新表]其中,“新表”是要创建的新表名。【例4.46】由xsb表创

建“计算机学生”表,包括学号和姓名。T-SQL命令如下:SELECT学号,姓名INTO计算机学生FROMxsbWHERE专业='计算机'语句的其他语法同样再创建一个“通信工程学生”表。完成后,刷新表后的对象资源管理器如图4.25所示。语句的其他语法2.UNION

使用UNION子句可以将两个或多个SELECT查询的结果合并成一个结果集,其格式为:{<查询规范>|(<查询表达式>)}UNION[ALL]<查询规范>|(<查询表达式>)[UNION[ALL]<查询规范>|(<查询表达式>)[…]]其中,<查询

规范>和<查询表达式>都是SELECT查询语句。使用UNION组合两个查询的结果集的基本规则是:(1)所有查询中的列数和列的顺序必须相同。(2)数据类型必须兼容。语句的其他语法【例4.47】在“计算机学生”表和“通信工程学生”表中查询学号为191301和学号为221301

的两位同学的姓名。T-SQL命令如下:SELECT*FROM计算机学生WHERE学号='191301'UNIONALLSELECT*FROM通信工程学生WHERE学号='221301'执行结果如图4.26所示。语句的其他语法3.EXCEPT和INTERSECTEXCEPT和INTER

SECT用于比较两个查询的结果,返回非重复值。语法格式如下:{<查询规范>|(<查询表达式>)}{EXCEPT|INTERSECT}{<查询规范>|(<查询表达式>)}其中,<查询规范>和<查询表达式>都是SELECT

查询语句。【例4.48】查询计算机专业女学生的信息。T-SQL命令如下:SELECT*FROMxsbWHERE专业='计算机'EXCEPTSELECT*FROMxsbWHERE性别=1执行结果如图4.27所示。语句的其他语法【例4.49】查询总学分大于42

的男学生信息。T-SQL命令如下:SELECT*FROMxsbWHERE总学分>42INTERSECTSELECT*FROMxsbWHERE性别=1语句的其他语法4.CTE在SELECT语句的最前面可以使用一条WITH子句来指定临时结果集,语法格式如下:[WITH<公用表表达式>[,

...]]SELECT......其中:<公用表表达式>::=表达式名[(列名[,...])]AS(CTE查询定义)语句的其他语法【例4.50】使用CTE从cjb表中查询选了101课程的学生学号、成绩,并定义新的列名为number、po

int。再使用SELECT语句从CTE和xsb中查询姓名为“王林”的学生学号和成绩情况。T-SQL命令如下,执行结果如图4.28所示。USEpxscjGOWITHcte_stu(number,point)AS(SELECT学号,成绩FROMcjbWHERE课程号='101')S

ELECTnumber,pointFROMcte_stu,xsbWHERExsb.姓名='王林'ANDxsb.学号=cte_stu.number4.2视图视图概念视图一经定义以后,就可以像表一样被查询、修改、删除和更新。使用视

图有下列优点:(1)为用户集中数据,简化用户的数据查询和处理。有时,用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户进行数据查询和处理。(2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。(3)简化用户权限的

管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。(4)便于数据共享。各用户不必都定义和存储自己所需的数据,而可共享数据库的数据,这样,同样的数据只需存储一次。(5)可以重新

组织数据以便输出到其他应用程序中。创建视图1.通过界面创建视图下面以在一个数据库中创建视图为例说明在“SSMS”中创建视图的过程。【例4.51】在pxscj数据库学生表(xsb)中创建名为cxs视图,视图中仅仅包含计算机专业学生。1)创建名cxs视图步骤如下:(1)在“对象资源管

理器”中展开“数据库”→“pxscj”,选择其中的“视图”项,右击鼠标,在弹出的快捷菜单上选择“新建视图”菜单项。(2)在随后出现的“添加表”对话框中,添加视图所需要关联的对象。这里在“表”选项卡中选择“xsb”表,单击“添加”按钮,单

击“关闭”按钮。创建视图(3)在窗口下部“输出”栏中去除创建的视图中不所需的字段,在“排序类型”栏中指定列的排序方式,在“筛选器”栏中指定创建视图的规则。本例在“专业”字段的“筛选器”栏中填写“计算机”,如图4.29所示。(4)完成后,

单击面板上的“保存”按钮,在“保存视图”对话框中输入视图名“cxs”,并单击“确定”按钮,便完成了视图的创建。创建视图2)显示cxs视图刷新pxscj数据库下的视图,展开“数据库”→“pxscj”→“视图”,选择“db

o.cxs”,右击鼠标,在弹出的快捷菜单中选择“设计”菜单项,可以查看并修改视图结构,选择“编辑前200行”菜单项,将可查看视图数据,如图4.30所示。创建视图3)视图的好处创建视图可以向最终用户隐藏复杂

的表连接,简化了用户的SQL程序设计。通过在创建视图时指定限制条件和指定列来限制用户对基本表的访问。例如,若限定某用户只能查询视图cxs,实际上就是限制了它只能访问xsb表的专业字段值为“计算机”的行。创建视图

2.通过命令创建视图T-SQL中用于创建视图的语句是CREATEVIEW语句,其格式为:CREATEVIEW视图名[WITH<视图属性>[,...]]ASSELECT语句[;][WITHCHECKOPTION]1)语句主体主体结构说明如下。(1

)架构名:数据库架构名。(2)列名:视图中包含的列,可以有多个列名。若使用与源表或视图相同的列名,则不必给出列名。(3)WITH<视图属性>:指出视图的属性。(4)SELECT语句:用来创建视图的语句,源表可以是基本表,也可以是视图

。(5)WITHCHECKOPTION:指出在视图上所进行的修改都要符合SELECT语句所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。创建视图2)<视图属性>定义<视图属性>定义的具体格式如下:<视图属性>::=

{[ENCRYPTION][SCHEMABINDING][VIEW_METADATA]}(1)ENCRYPTION:在系统表syscomments中存储CREATEVIEW语句时进行加密。(2)SCHEMABINDING:将视图与其

所依赖的表或视图结构相关联。(3)VIEW_METADATA:当引用视图的浏览模式的元数据时,向DBLIB、ODBC或OLEDBAPI返回有关视图的元数据信息,而不返回基表的元数据信息。创建视图【例4.52】创建ccj视图,包括计算机专业各学生的学号、其选修的

课程号及成绩。要保证对该视图的修改都符合专业为计算机的这个条件。T-SQL命令如下:CREATEVIEWccjWITHENCRYPTIONASSELECTxsb.学号,课程号,成绩FROMxsb,cjbWHERExsb.学号=cjb.学号AND专业='计算机'WITHCHECKOPTION

【例4.53】创建计算机专业学生的平均成绩视图ccj_avg,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。T-SQL命令如下:CREATEVIEWccj_avg(num,score_a

vg)ASSELECT学号,AVG(成绩)FROMccjGROUPBY学号创建视图3)分区视图在一般情况下,如果视图为下列格式,则称其为分区视图。CREATEVIEW视图名ASSELECT<选择列表1>FROMT1UNIONALLSELECT<选择

列表2>FROMT2UNIONALL...SELECT<选择列表n>FROMTn创建视图3.视图查询视图定义后,就可以像查询基本表那样对视图进行查询了。【例4.54】显示ccj和ccj_avg视图中的内容。T-SQL命令如下:SELEC

T*FROMccj执行结果如图4.31(a)所示。SELECT*FROMccj_avgWHEREscore_avg>=75执行结果如图4.31(b)所示。更新视图1.可更新视图(1)满足以下条件的视图。创建视图的SELECT语句中没有聚合函数,且没有TOP、GROUPBY、UNION子

句及DISTINCT关键字。创建视图的SELECT语句中不包含从基本表列通过计算所得的列。创建视图的SELECT语句的FROM子句中至少要包含一个基本表。(2)可更新的分区视图。在实现分区视图之前,必须先实现水平分区表。原始表

被分成若干个较小的成员表,每个成员表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。(3)通过INSTEADOF触发器创建的可更新视图。更新视图2.插入数据使用INSERT语句通过视图向基本表插入数据。【例4.55】向cxs视图中插入以下记录

:'191315','刘明仪',1,'1996-3-2',50T-SQL命令如下:INSERTINTOcxsVALUES('191315','刘明仪',1,'1996-3-2',50)执行结果如图4.32所示。更新视图3.修改数据使用UPDATE语句可以通过

视图修改基本表的数据。(1)对一个基本表视图修改数据。【例4.56】将cxs视图中所有学生的总学分增加1。T-SQL命令如下:UPDATEcxsSET总学分=总学分+1该语句实际上是将cxs视图所依赖的基本表xsb中所有专业为“计算机”的记录的总学分字段值在原来的基础上增加1。UPDATEcxsS

ET总学分=总学分-1更新视图(2)一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。【例4.57】将ccj视图中学号为191301的学生的101课程成绩改为90。T-SQL命令如下:UPDATEccjSET成绩=90WHERE学号='

191301'AND课程号='101'因为视图ccj依赖于两个基本表(xsb和cjb),对该视图的一次修改只能改变学号(源于xsb表)或者课程号和成绩(源于cjb表)。以下的修改是错误的:UPDATEccjSET学号='191320',课程号='208'WHERE学号='191301'AND

课程号='101'更新视图4.删除数据使用DELETE语句可以通过视图删除基本表的数据。但要注意,对于依赖于多个基本表的视图,不能使用DELETE语句。【例4.58】删除cxs中女同学的记录(实际不操作)。T

-SQL命令如下:DELETEFROMcxsWHERE性别=0修改视图的定义1.以界面方式修改视图在“对象资源管理器”中右击视图“dbo.cxs”,在弹出的快捷菜单中选择“设计”菜单项,进入视图修改窗口。该窗口与创建视图的窗口类似,其中可以查看并可修改视图结构,修改完后单击

“保存”图标即可。2.使用命令修改视图语法格式:ALTERVIEW视图名[WITH<视图属性>[,...]]ASSELECT语句[;][WITHCHECKOPTION]

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?