关系数据库标准语言-SQL课件

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

【文档说明】关系数据库标准语言-SQL课件.ppt,共(64)页,292.549 KB,由小橙橙上传

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

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

第3章关系数据库标准语言---SQL参考书籍曹军生等.SQLServer2000实用教程.北京:北京理工大学出版社,2003.教育部考试中心.全国计算机等级考试二级教程:VisualFoxPro程序设计(2011年版)[M].北京:高等教育出版社

,2011.刘丽.VisualFoxPro程序设计(第三版)[M].北京:中国铁道出版社,2011.3.1SQL概述(1)SQL发展:SQL(StructuredQueryLanguage):结构化查询语言1974年,Boyce和Chamberlin最早提出;1975-1979年,IBM

公司通过SystemR实现了商业用途;版本:SQL86(ANSI)-89—SQL92—SQL99同样VisualFoxPro也引入了SQL语言3.1SQL概述(2)一、SQL语言的特点:SQL是

结构化查询语言,其功能不仅仅是查询,他是一个通用的功能极强的关系数据库语言。1、综合统一:SQL语言集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)功能于一体;2、高度非过程化:3、面向集合的操作方式:可以同时对多个记录进行查询、

插入、更新、删除等操作;4、以同一种语法结构提供两种使用方式:即可独立使用,也可嵌入其它语言程序中;5、功能丰富,语言简练:SQL功能命令动词数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE3.1SQL概

述(3)二、VFP中SQL的功能:数据查询:数据定义:数据操纵:三、视图的定义:视图是从一个或几个数据库表中导出的“表”,它本身不独立存储在数据库中,是虚表。3.2数据定义功能(1)3.2.1表的定义一般格式如下:CREATETABLE|DBF<表名>;(<字段

名1><字段1类型>[字段1的完整性约束条件];[,<字段名2><字段2类型>[字段2的完整性约束条件]…];[,表的完整性约束条件(表间关系)])3.2表数据的定义功能(2)说明:1.Table与DBF是等价的,Table是

标准SQL的关键字,DBF是VFP的关键字;2.<表名>是基本表的名称,它可包含多个字段;3.字段的完整约束条件包括:1)满足实体完整性的主关键字(主索引)可用PRIMARYKEY|UNIQUE说明,UNIQUE也可指定关键字内容的唯一性。2)定义字段

值(字段内容)的有效性用CHECK约束,出错提示信息用ERROR说明(说明的内容为字符型数据),定义默认值用DEFAULT<默认值>3)用NULL或NOTNULL说明字段值是否可以为空值。3.2表数据的定义功能(3)4.此外还有描述表之

间联系的FOREIGNKEY和REFERENCES(用FOREIGNKEY<关键字>指定普通索引,用REFERENCES限定索引与表建立关系)等。5.字段类型用字母表示(见下页)有些类型需要用户给定字段宽度和小数位。3.2表数据的

定义功能(4)字段类型表示字段宽度小数位数说明Cm-字符型(character),宽度位mD--日期型(Date)T--日期时间型(DateTime)Nmn数字型(Numeric),宽度位m,小数位数位nL--逻辑型(Logical)M--备

注型(Memo)G--通用型(General)Y--货币型(Currency)I--整数型(Integer)B-m双精度型(Double),小数位数为mFmn浮点型(Float),宽度为m,小数位数为n3.2表数据的定义功能(5)【例3.1】用命令建立

一个名为“YYGL”的医院科室数据库,再用SQL新建一个名为“BUMEN”的科室信息表(要求有:科室编号,科室名,床位数,并对床位数进行有效性规则检查)。CreateDatabaseYYGLCREATETAB

LEBUMEN(科室编号C(3)PRIMARYKEY,科室名C(10),床位数ICHECK(床位数>0)ERROR"床位数应该大于0!")3.2表数据的定义功能(6)【例3.2】用SQL的命令建立医生信息表(YSXX

)于医院管理库。createtableysxx(编号c(6)primarykey,姓名c(6),性别c(2),职称c(10),年龄Icheck(年龄>=15and年龄<=30)error"年龄范围在1

5-30!"default19,科室编号c(3),参加工作日期d,学历c(8),毕业学校c(24),foreignkey科室编号tag科室编号referencesbumen)【例3.3】用SQL的命令建立病人信息表(BRXX)

。createtablebrxx(床位号C(4)primarykey,姓名c(6),性别c(2),入院日期D,年龄icheck年龄>0error"年龄值不合法!",科室编号c(3),主治大夫编号c(6),foreignkey科室编号tag科室编

号referencesbumen,foreignkey主治大夫编号tag编号referencesysxx)通过3个例题,共建立3个关系:BUMEN科室编号-YSXX科室编号BUMEN科室编号-BRXX科室编号YSXX编号BRXX主治大夫编号3.2表数据的定义功能(7)3.

2.2修改基本表的结构【格式一】ALTERTABLE<表名>ADD|ALTER[COLUMN]<字段名><数据类型>[完整性约束]该用法可以添加(ADD)新的字段或修改(ALTER)己有的字段,它的句法基本可以与CREATETABLE的句法相对应。注意:该用法用于增

加字段或修改字段的类型、宽度。以及重新定义有效性规则、错误信息、默认值,主关键字和联系等;但是不能修改字段名,不能删除字段等。3.2表数据的定义功能(8)【例3.4】为科室信息表(BUMEN)增加一个“职工

数”字段,并且要求该字段值不能为零。【例3.5】将医生信息表(YSXX)的“姓名”字段的宽度改为8。3.2表数据的定义功能(9)【格式二】ALTERTABBLE<表名>ALTER[COLUMN]<字段名>[NULL|NOTNULL][SETDEFAULT<默认值>][SETC

HECK有效性规则[ERROR提示信息]][DROPDEFAULT][DROPCHECK]注意:该格式主要用于修改和删除有效性规则和默认值定义。3.2表数据的定义功能(10)【例3.6】修改或

定义科室信息表(BUMEN)“职工数”字段的有效性规则。【例3.7】删除科室信息表(BUMEN)的有效性规则。3.2表数据的定义功能(11)【格式三】ALTERTABLE<表名>[DROP[COLUMN]字

段名][ADDPRIMARYKEY关键字TAG索引名[FOR条件]][DROPPRIMARYKEY][ADDUNIQUE关键字[TAG索引名[FOR条件]]][DROPUNIQUETAG索引名][ADDFOREIGNKEY[关键字]TAG

索引名[FOR条件]REFERENCES表名[TAG索引名]][DROPFOREIGNKEYTAG索引名[SAVE]][RENAME[COLUMN]字段名TO新字段名]该用法可以删除字段(DROP[C

OLUMN])、可以修改字段名(RENAMECOLUMN)。可以定义、修改和删除表一级的有效性规则等。3.2表数据的定义功能(12)【例3.8】将科室信息表(BUMEN)的“职工数”字段名改为“职工人数”。

【例3.9】删除科室信息表(BUMEN)中的“职工人数”字段。【例3.10】将科室信息表(BUMEN)的“床位数”为候选索引(候选关键字),索引名是TEMP_CWS。【例3.11】删除科室信息表(BUMEN)的候选索引T

EMP_CWS。altertablebumendropuniquetagTemp_cws3.2表数据的定义功能(13)3.2.3表的删除DropTable<表名>注意:删除数据库中表时,数据库要打开。3.3

数据查询功能(1)数据库查询是SQL的核心操作.Select一般格式:SELECT[ALL|DISTINCT]<目标字段表达式1>[,<目标字段表达式2>]...FROM<表名1>[,表名2]…[WHERE<条件

表达式>][GROUPBY<字段名1>[HAVING<条件表达式>]][ORDERBY<字段名2>[ASC|DESC]]3.3数据查询功能(2)3.3.1简单查询(单表查询):一、选择表中的任意列(字段):1、查询指定列:

【例3.12】查询全体医生的姓名与学历。select姓名,学历fromysxx【例3.13】查询全体医生的姓名、学历和编号。select姓名,学历,编号fromysxx2.查询全部列:【例3.14】查询全体医生的详细记录。Select*fromysxx3.3

数据查询功能(3)3、查询经过计算的值:SELECT子句的<目标列表达式>不仅可以是表中的字段,也可以是表达式。【例3.15】查询全体医生的姓名及其出生年份。Select姓名,2012-年龄fromysxxSe

lect姓名,year(date())-年龄as出生年份fromysxx3.3数据查询功能(4)二、选择表中的若干记录(行):1、消除取值重复的行:Distinct2、查询满足条件的记录:where查询条件谓词比较=,>,<,>=,<=,<>

,!>,!<确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件AND,OR3.3数据查询功能(5)【例3.17】查询所有年龄在3

0岁以下的医生姓名及其年龄。【例3.18】查询年龄在30-40岁(包括30岁和40岁)之间的医生的姓名和年龄。【例3.19】查询科室编号为“101”、“102”,“103”的医生的全部信息。【例3.20】查询编号为“101001”的医生的详细情况。SELECT*FROMYSXXWHERE编

号LIKE“101001”等价于:SELECT*FROMYSXXWHERE编号=“101001”3.3数据查询功能(6)【例3.21】查询所有姓“雷”的医生的全部信息。SELECT*FROMYSXXWHERE姓名LIKE“雷%”【例3.22】查询姓名中

姓“刘”,且姓名只有两个字的医生的姓名。SELECT姓名FROMYSXXWHERE姓名LIKE“刘_”【例3.23】查询所有不姓刘的医生的姓名。SELECT姓名FROMYSXXWHERENOT姓名LIKE“刘%”3.3数据

查询功能(7)【例3.24】某些医生有来医院工作意向但没有报到上班,所以有个人信息而没有参加工作日期。查询缺少参加工作日期的医生的姓名。SELECT姓名FROMYSXXWHERE参加工作日期ISNULL3.3数据查询功能(8)【例3.25】查询科室编号为“101”的年龄在40岁以下的医

生姓名。SELECT姓名FROMYSXXWHERE科室编号=“101”AND年龄<403.3数据查询功能(9)三.对查询结果排序:用户可以用ORDERBY子句对查询结果按照一个或多个字段的升序(

ASC)或降序(DESC)排列,缺省值为升序。【例3.26】查询所有医生的姓名和年龄,查询结果按年龄的降序排列。select姓名,年龄fromysxxorderby年龄desc注:SELECT命令要显示的行数可以是TOPn[Percent](TOP必须与Orderby同时使用).3.3数

据查询功能(10)四.使用集函数:集函数(使用格式)函数功能COUNT(*)统计记录个数COUNT([DISTINCT|ALL]<字段名>)统计一列中值的个数SUM([DISTINCT|ALL]<字段名>)计算一列值的总和(此列必

须是数值型)AVG([DISTINCT|ALL]<字段名>)计算一列值的平均值(此列必须是数值型)MAX([DISTINCT|ALL]<字段名>)求一列值中的最大值MIN([DISTINCT|ALL]<字段名>)求一列值中的最小

值3.3数据查询功能(11)【例3.27】查询医生的总人数。Selectcount(*)fromysxx【例3.28】查询病人信息表中医生的人数。Selectcount(distinct主治大夫编号)frombrxx【例3.29】查询医

生中年龄最大的年龄。Selectmax(年龄)fromysxx3.3数据查询功能(12)五.对查询结果进行分组:GROUPBY子句将查询结果表按某一列或多列的值分组,值相等的为一组。对查询结果分组的目的是为

了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,如上面的例3.27、例3.28、例3.29。分组后集函数将作用于每一个组,即每一组都有一个函数值。3.3数据查询功能(13)【例3.30】求各个科室的医生相应人数。SELECT科室编号,COUN

T(科室编号)FROMYSXXGROUPBY科室编号如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。【例3.31】查询医生人数超过1人的科室编号和科室的医生人数。3.3.2联接查询(1)若一个查询同时涉及两个或两个以上的表,

则称之为联接查询。分类:等值、非等值、自身联接查询、超联接查询。3.3.2联接查询(2)1.等值与非等值联接查询:其一般格式为:[表名1.]<字段名1>比较运算符[表名2.]<字段名2>(联接

谓词)当联接运算符为=时,称为等值联接。使用其他运算符称为非等值联接。联接谓词中的字段名称为联接字段。联接条件中的各联接字段类型必须是可比的。但不必是相同的。3.3.2联接查询(3)【例3.32】查询每个医生及其对应科室情况。医生情况存放在YSXX表

中,科室情况存放在BUMEN表中,所以本查询实际上涉及两个表。这两个表之间的联系是通过公共字段科室编号实现的若在等值联接中把目标字段中重复的字段去掉则为自然联接。SELECTYSXX.科室编号,姓名,性别,职称,年龄,参加

工作日期,学历,毕业学校,职务,科室名,床位数FROMYSXX,BUMENWHEREYSXX.科室编号=BUMEN.科室编号3.3.2联接查询(4)2.自身联接查询(命名别名来实现):联接操作不仅可以在两个表

之间进行,也可以是一个表与其自己进行联接,称为表的自身联接。【例3.34】查询医生信息表中是科室主任的医生是哪些医生的科室主任。SELECTZW.姓名,"是",YS.姓名,"的主任"FROMYSXXZW,YSXXYSWHEREZW.科室编号=YS.科室编号ANDZW.职务="主任

"ANDYS.职务<>"主任"3.3.2联接查询(5)3.超联接查询:首先保证一个表中满足条件的记录都在结果表中,然后将满足联接条件的记录与另一个表的记录进行联接,不满足联接条件的则将应来自另一表的属性值置为空值(NULL)。【格式】SELECT……FROM<表名1

>INNER|LEFT|RIGHT|FULLJOIN<表名2>ON<联接条件>WHERE<条件>3.3.2联接查询(6)说明:1.INNERJOIN等价于JOIN,为普通的联接(等值联接),在VisualFoxPro中称为内部联接。

2.LEFTJOIN为左联接。3.RIGHTJOIN为右联接。4.FULLJOIN可以称为完全联接,即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应内容部分为NULL。5.ON联接条件:指定联接的条件3.3.2联接查询(7)【例3.35

】查询医生与病人间的诊治关系,按医生编号的升序排列。SELECT编号,Ysxx.姓名,Ysxx.性别,参加工作日期,Brxx.床位号,Brxx.姓名FROMYsxxinnerJOINBrxxONYsxx.编号=BRx

x.主治大夫编号ORDERBYYsxx.编号3.3.3嵌套查询(1)在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询

嵌套查询是基于多个表的查询,这类查询所要求的结果出自一个表,但相关的条件却涉及多个表。上层的查询块称为外层查询或父查询,WHERE后的下层查询块称为内层查询或子查询。SQL语言允许多层嵌套查询。3.3.3嵌套查询(2)1.带有IN谓词的子查询:

在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。【例3.36】查询与“肖冰”同在一个科室住院治疗的病人。SELECT*FROMBRXXWHERE科室编号IN(SELECT科室编号FROMBRXXWHERE姓名=“肖冰”)3

.3.3嵌套查询(3)【例3.37】哪些科室有45岁以上的职工?SELECTDISTINCT科室名,"有45岁以上职工"FromBumenWHERE科室编号IN(SELEC科室编号FROMYsxxWHERE年龄>45)3.3.3嵌套查询(4)

2、带有比较运算符的子查询:返回是单值3、带有ANY(SOME)和ALL谓词的子查询:【例3.38】查询出只要年龄小于或等于“内科”(科室编号为102)中某一名医师年龄的医师编号。这个查询可以使用ANY或SOME量词。SELECT编号FROMYsxxWHERE年龄<=ANY;(SEL

ECT年龄FROMYsxxWHERE科室编号="102")and科室编号<>"102"3.3.3嵌套查询(5)【例3.39】查询出年龄大于或等于“内科”(科室编号为102)中所有医师年龄的医师编号。这个查询使用ALL量词。SELECTDISTINCT编号FROMYsxxWHERE年

龄>=ALL;(SELECT年龄FROMYsxxWHERE科室编号="102")and科室编号<>"102"3.3.3嵌套查询(6)=<>或!=<<=>>=ANYALLIN----NOTIN<MAX<MIN<=MAX<=MIN>MIN>MAX>=MI

N>=MAX3.3.3嵌套查询(7)4、带有EXISTS谓词的子查询:EXISTS(NOTEXISTS)代表存在(不存在)量词。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“Ture“或逻辑

假值“False”,用来检查在子查询中是否有结果返回,即存在记录或不存在记录。3.3.3嵌套查询(8)【例3.40】在Brxx表检索那些在ysxx表中无主治大夫编号的病号记录。使用谓词NOTEXISTS:S

ELECT*FROMBrxxWHERENOTEXISTS(SELECT*FROMYsxxWHERE编号=Brxx.主治大夫编号)SELECT*FROMBrxxWHERE主治大夫编号NOTIN(SELECT编号FROMYsxx)3.3.3嵌套查询(9)所有带IN谓词

、比较运算符、ANY(SOME)和ALL谓词的子查询都能用带EXISTS谓词的子查询等价替换3.3.4集合查询(1)SELECT语句查询的结果是记录的集合,所以多个SELECT语句的结果可再进行集合操作。集合操作主要包括”并”操作(UNION)。【例3.41】查询“内科”(科室编号为1

02)的医生以及年龄不大于30岁的医生的信息。SELECT*FROMYSXXWHERE科室编号="102"UNIONSELECT*FROMYSXXWHERE年龄<=303.3.4集合查询(2)注意:参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同。

【例3.42】查询“内科”(科室编号为102)的医生及年龄不大于30岁的医生交集。【例3.43】查询“内科”(科室编号为102)的医生与年龄小于30岁的医生的差集。Select*fromysxxwhere科室编号=“102”and年龄>=303.3.5设定输出目标1.输出到自由表:

INTOTABLE<表名>2.输出到数组:INTOARRAY<数组名>3.输出到临时表:INTOCURSOR<表名>4.输出到文本文件:TOFILE<文本文件名>3.3.6其他子句(1)NOCONSOLE:禁止将查询结果发送到文件、打印机和VisualFoxP

ro主窗口。(2)PLAIN:防止列标题出现在查询结果的主窗口显示中。(3)NOWAIT:打开浏览窗口,并将查询结果输出到这个窗口后继续程序的执行;程序并不等待关闭浏览窗口,而是立即执行紧接在SELECT语句后面的程序行。3.4数据更新功能(1)

3.4.1插入数据:SQL的数据插入语句INSERT通常有两种形式。一种是插入一条记录,另一种通过数组或变量等插入多条记录。1.插入单条记录:INSERTINTO<表名>[(字段名1[,字段名2,…])]VALUES(常量1[,常量2,…])3.4数据更新功能(2)[例3.47]向表YS

XX中插入记录,记录内容如下:(106002王明男主任医师551061980.10.1本科滨州医学院教师)INSERTINTOYSXXVALUES("106002","王明","男","主任医师",55,"106",{^1980-10-1},

"本科","滨州医学院","教师",null)INSERTINTOYSXX(编号,姓名,性别,职称,年龄,科室编号,参加工作日期,学历,毕业学校,职务)VALUES("106002","王明","男","主任医师",55,"106",{^1980-10-1},"本科","滨州医学院","教师")

3.4数据更新功能(3)2.对批量生成的数据操作:INSERTINTO<表名>FROMARRAY<数组>|MEMVAR说明:(1)FROMARRAY从指定的数组中插入记录值;(2)FROMMEMVAR从同名的内存变量中插入记录值。3.4数据更新功能(4)【例3.48】USE

YsxxSELE*FROMysxxINTOARRAYarr1COPYSTRUTOOrd1INSERTINTOOrd1FROMARRAYarr1SELECTOrd1BROWSEUSEDELETEFILEOrd1.dbf【例3.49】USEYsxxSCATTER

MEMVARCOPYSTRUTOOrd2INSERTINTOOrd2FROMMEMVARSELECTOrd2BROWSEUSEDELETEFILEOrd2.dbf3.4数据更新功能(5)3.4.2修改数据:格式:UPDAT

E<表名>SET<字段1>=<表达式1>[[,字段2=表达式2]…]WHERE<条件>[例3.50]将病人“刘星一”的主治大夫编号改为”105003”UPDATEBRXXSET主治大夫编号=”105003”WHERE姓名=”刘星一”[例3.51]将所有病人的年龄增加1岁。3.4数

据更新功能(6)3.4.3删除数据:格式:DELETEFROM<表名>where<条件>[例3.52]删除BRXX表中床位号为8的记录.DELETEFROMBRXXWHERE床位号=“8”3.5视图的使

用(1)视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,它是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍旧存放在原来的基本表中。所以当基本表中的数据发生变化时,视图中的数据会随之发

生变化。格式:CREATE[SQL]VIEW<视图名>[(<列1>[,<列2>]…)]AS<SELECT查询>3.5视图的使用(2)注意:组成视图的属性名,或者全部省略,或者全部指定,没有第三种选择。但在下列三种情况下必须明确指定组成视图的所有字段名:(1)某个目标列不

是单纯的属性名,而是集函数或字段表达式;(2)多表联接时,选了几个同名字段作为视图的字段;(3)需要在视图中为某个字段启用新的名字。3.5视图的使用(3)[例3.53]创建包含YSXX表中所有字段的名为“医院管理视图”的视图。CREATEVIEW医院管理视图ASSELECT*FROM

YSXX3.5视图的使用(4)[例3.54]在医院yygl数据库中,按科室编号相等建立一个包含表bumen和表ysxx所有字段的视图。OPENDATABASEYYGLCREATEVIEWYYGL_VIEWASSELE

CT*FROMYYGL!YSXXINNERJOINYYGL!BUMENONYSXX.科室编号=BUMEN.科室编号本章结束!

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