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

上传人(卖家):晟晟文业 文档编号:4953690 上传时间:2023-01-28 格式:PPT 页数:64 大小:292.55KB
下载 相关 举报
关系数据库标准语言-SQL课件.ppt_第1页
第1页 / 共64页
关系数据库标准语言-SQL课件.ppt_第2页
第2页 / 共64页
关系数据库标准语言-SQL课件.ppt_第3页
第3页 / 共64页
关系数据库标准语言-SQL课件.ppt_第4页
第4页 / 共64页
关系数据库标准语言-SQL课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第第3章章 关系数据库标关系数据库标准语言准语言-SQL参考书籍参考书籍v曹军生等曹军生等.SQL Server 2000实用教程实用教程.北京:北京:北京理工大学出版社,北京理工大学出版社,2003.v教育部考试中心教育部考试中心.全国计算机等级考试二级教全国计算机等级考试二级教程:程:Visual FoxPro程序设计(程序设计(2011年版)年版)M.北京:高等教育出版社,北京:高等教育出版社,2011.v刘丽刘丽.Visual FoxPro程序设计(第三版)程序设计(第三版)M.北京:中国铁道出版社,北京:中国铁道出版社,2011.3.1 SQL概述(1)SQL 发展:发展:vSQL(

2、Structured Query Language):结构化结构化查询语言查询语言v1974年,年,Boyce 和和Chamberlin 最早提出;最早提出;v1975-1979年,年,IBM公司通过公司通过System R实现实现了商业用途;了商业用途;v版本:版本:SQL86(ANSI)-89SQL92SQL99v同样同样 Visual FoxPro也引入了也引入了SQL语言语言3.1 SQL概述(2)v一、一、SQL语言的特点:语言的特点:vSQL是结构化查询语言,其功能不仅仅是查是结构化查询语言,其功能不仅仅是查询,他是一个通用的功能极强的关系数据库询,他是一个通用的功能极强的关系数据

3、库语言。语言。1、综合统一:、综合统一:SQL语言集数据定义语言语言集数据定义语言(DDL)、数据操纵语言()、数据操纵语言(DML)、数据控制语)、数据控制语言言(DCL)功能于一体;功能于一体;2、高度非过程化高度非过程化:3、面向集合的操作方式:可以同时对多个记录、面向集合的操作方式:可以同时对多个记录进行查询、插入、更新、删除等操作;进行查询、插入、更新、删除等操作;4、以同一种语法结构提供两种使用方式:即可、以同一种语法结构提供两种使用方式:即可独立使用,也可嵌入其它语言程序中;独立使用,也可嵌入其它语言程序中;5、功能丰富,语言简练:、功能丰富,语言简练:SQL功能功能命令动词命令

4、动词数据查询数据查询SELECT数据定义数据定义CREATE,DROP,ALTER数据操纵数据操纵INSERT,UPDATE,DELETE3.1 SQL概述(3)v二、二、VFP中中SQL的功能:的功能:数据查询:数据查询:数据定义:数据定义:数据操纵:数据操纵:v三、视图的定义:三、视图的定义:视图是从一个或几个数据库表中导出的视图是从一个或几个数据库表中导出的“表表”,它本身不独立存储在数据库中,是虚表。它本身不独立存储在数据库中,是虚表。3.2 数据定义功能(1)v3.2.1 表的定义表的定义一般格式如下:一般格式如下:CREATE TABLE|DBF ;(字段字段1的完整性约束条件的完

5、整性约束条件;,字段字段2的完整性约束条件的完整性约束条件;,表的完整性约束条件(表间关系),表的完整性约束条件(表间关系))3.2 表数据的定义功能(2)v说明:说明:v1.Table与与DBF是等价的,是等价的,Table是标准是标准SQL的关键的关键字,字,DBF是是VFP的关键字;的关键字;v2.是基本表的名称,它可包含多个字段;是基本表的名称,它可包含多个字段;v3.字段的完整约束条件包括:字段的完整约束条件包括:1)满足实体完整性的主关键字(主索引)可用)满足实体完整性的主关键字(主索引)可用PRIMARY KEY|UNIQUE 说明,说明,UNIQUE也可指定关也可指定关键字内容

6、的唯一性。键字内容的唯一性。2)定义字段值(字段内容)的有效性用)定义字段值(字段内容)的有效性用CHECK约束,约束,出错提示信息用出错提示信息用ERROR说明(说明的内容为字符型数说明(说明的内容为字符型数据)据),定义默认值用定义默认值用 DEFAULT3)用)用NULL或或NOT NULL 说明字段值是否可以为空值。说明字段值是否可以为空值。3.2 表数据的定义功能(3)v4此外还有描述表之间联系的此外还有描述表之间联系的 FOREIGN KEY和和 REFERENCES(用(用FOREIGN KEY指定普通索引,用指定普通索引,用REFERENCES限限定索引与表建立关系)等。定索引

7、与表建立关系)等。v5字段类型用字母表示(见下页)有些类型字段类型用字母表示(见下页)有些类型需要用户给定字段宽度和小数位。需要用户给定字段宽度和小数位。3.2 表数据的定义功能(4)字段类型表示字段类型表示字段宽度字段宽度小数位数小数位数说明说明Cm-字符型(字符型(character),宽度位),宽度位mD-日期型(日期型(Date)T-日期时间型(日期时间型(DateTime)Nmn数字型(数字型(Numeric),宽度位),宽度位m,小数位数位,小数位数位nL-逻辑型(逻辑型(Logical)M-备注型(备注型(Memo)G-通用型(通用型(General)Y-货币型(货币型(Curr

8、ency)I-整数型(整数型(Integer)B-m双精度型(双精度型(Double),小数位数为),小数位数为 mFmn浮点型(浮点型(Float),宽度为),宽度为m,小数位数为,小数位数为n3.2 表数据的定义功能()v【例例3.1】用命令建立一个名为用命令建立一个名为“YYGL”的医院科室数的医院科室数据库,再用据库,再用SQL新建一个名为新建一个名为“BUMEN”的科室信息的科室信息表表(要求有:科室编号,科室名,床位数,并对床位数要求有:科室编号,科室名,床位数,并对床位数进行有效性规则检查)。进行有效性规则检查)。vCreate Database YYGL vCREATE TAB

9、LE BUMEN(科室编号科室编号 C(3)PRIMARY KEY,科室名科室名 C(10),床位数床位数 I CHECK(床位数床位数0)ERROR 床位数应该大于床位数应该大于0!)3.2 表数据的定义功能(6)v【例例3.2】用用SQL的命令建立医生信息表(的命令建立医生信息表(YSXX)于医院管理库。于医院管理库。v create table ysxx(编号编号 c(6)primary key,姓名姓名 c(6),性别性别 c(2),职称职称 c(10),年龄年龄 I check(年龄年龄=15 and 年龄年龄0 error 年龄值不合法!年龄值不合法!,科室编号科室编号 c(3),

10、主治大夫编主治大夫编号号 c(6),foreign key 科室编号科室编号 tag 科室编号科室编号 references bumen,foreign key 主治大夫编号主治大夫编号 tag 编号编号 references ysxx)v通过通过3个例题,共建立个例题,共建立3个关系:个关系:BUMEN 科室编号科室编号-YSXX 科室编号科室编号BUMEN 科室编号科室编号-BRXX 科室编号科室编号YSXX 编号编号BRXX 主治大夫编号主治大夫编号3.2 表数据的定义功能(7)v3.2.2修改基本表的结构修改基本表的结构【格式一格式一】ALTER TABLE ADD|ALTERCOLU

11、MN 完整性约束完整性约束该用法可以添加(该用法可以添加(ADD)新的字段或修改()新的字段或修改(ALTER)己)己有的字段,它的句法基本可以与有的字段,它的句法基本可以与 CREATE TABLE 的句的句法相对应。法相对应。注意:该用法用于增加字段或修改字段的类型、宽度。注意:该用法用于增加字段或修改字段的类型、宽度。以及重新定义有效性规则、错误信息、默认值,主关键以及重新定义有效性规则、错误信息、默认值,主关键字和联系等;字和联系等;但是不能修改字段名,不能删除字段等。但是不能修改字段名,不能删除字段等。3.2 表数据的定义功能(8)v【例例3.4】为科室信息表(为科室信息表(BUME

12、N)增加一)增加一个个“职工数职工数”字段,并且要求该字段值不能字段,并且要求该字段值不能为零。为零。v【例例3.5】将医生信息表(将医生信息表(YSXX)的)的“姓名姓名”字段的宽度改为字段的宽度改为8。3.2 表数据的定义功能(9)v【格式二格式二】ALTER TABBLE vALTERCOLUMNvNULL|NOT NULLvSET DEFAULT vSET CHECK 有效性规则有效性规则 ERROR 提示信提示信息息vDROP DEFAULTvDROP CHECKv注意:该格式主要用于修改和删除有效性规则和默注意:该格式主要用于修改和删除有效性规则和默认值定义。认值定义。3.2 表数

13、据的定义功能(10)v【例例3.6】修改或定义科室信息表(修改或定义科室信息表(BUMEN)“职工数职工数”字段的有效性规则。字段的有效性规则。【例例3.7】删除科室信息表(删除科室信息表(BUMEN)的有效)的有效性规则。性规则。3.2 表数据的定义功能(11)v【格式三格式三】ALTER TABLE vDROPCOLUMN字段名字段名v ADD PRIMARY KEY 关键字关键字 TAG 索引名索引名 FOR 条件条件v DROP PRIMARY KEYv ADD UNIQUE 关键字关键字 TAG索引名索引名FOR 条件条件v DROP UNIQUE TAG索引名索引名v ADD FO

14、REIGN KEY关键字关键字TAG索引名索引名FOR 条件条件v REFERENCES 表名表名TAG 索引名索引名v DROP FOREIGN KEY TAG索引名索引名SAVEv RENAME COLUMN 字段名字段名 TO 新字段名新字段名 v该用法可以删除字段(该用法可以删除字段(DROPCOLUMN)、可以修改)、可以修改字段名(字段名(RENAME COLUMN)。可以定义、修改和删除)。可以定义、修改和删除表一级的有效性规则等。表一级的有效性规则等。3.2 表数据的定义功能(12)v【例例3.8】将科室信息表(将科室信息表(BUMEN)的)的“职工数职工数”字段名改为字段名改

15、为“职工人数职工人数”。v【例例3.9】删除科室信息表(删除科室信息表(BUMEN)中的)中的“职工职工人数人数”字段。字段。v【例例3.10】将科室信息表(将科室信息表(BUMEN)的)的“床位数床位数”为候选索引(候选关键字),索引名是为候选索引(候选关键字),索引名是TEMP_CWS 。v【例例3.11】删除科室信息表(删除科室信息表(BUMEN)的候选索)的候选索引引TEMP_CWS。v alter table bumen drop unique tag Temp_cws3.2 表数据的定义功能(13)v3.2.3 表的删除表的删除Drop Table 注意:删除数据库中表时,数据库要

16、打开。注意:删除数据库中表时,数据库要打开。3.3 数据查询功能(1)v数据库查询是数据库查询是SQL的核心操作的核心操作Select一般格式:一般格式:SELECT ALL|DISTINCT ,FROM表名表名1,表名,表名2 WHERE GROUP BY HAVING ORDER BY ASC|DESC3.3 数据查询功能(2)v3.3.1 简单查询(单表查询):简单查询(单表查询):v一、选择表中的任意列一、选择表中的任意列(字段字段):1、查询指定列:、查询指定列:【例例3.12】查询全体医生的姓名与学历。查询全体医生的姓名与学历。select 姓名姓名,学历学历 from ysxx【

17、例例3.13】查询全体医生的姓名、学历和编号。查询全体医生的姓名、学历和编号。select 姓名姓名,学历学历,编号编号 from ysxxv 2查询全部列查询全部列:【例例3.14】查询全体医生的详细记录。查询全体医生的详细记录。Select*from ysxx3.3 数据查询功能(3)v 3、查询经过计算的值查询经过计算的值:SELECT子句的子句的不仅可以是表中不仅可以是表中的字段,也可以是表达式。的字段,也可以是表达式。【例例3.15】查询全体医生的姓名及其出生年份。查询全体医生的姓名及其出生年份。Select 姓名姓名,2012-年龄年龄 from ysxxSelect 姓名姓名,y

18、ear(date()-年龄年龄 as 出生年份出生年份 from ysxx3.3 数据查询功能(4)v二、选择表中的若干记录(行):二、选择表中的若干记录(行):1、消除取值重复的行:、消除取值重复的行:Distinct2、查询满足条件的记录:、查询满足条件的记录:where查查 询询 条条 件件谓词谓词比比 较较=,=,=,!,!确定范围确定范围BETWEEN AND,NOT BETWEEN AND确定集合确定集合IN,NOT IN字符匹配字符匹配LIKE,NOT LIKE空空 值值IS NULL,IS NOT NULL多重条件多重条件AND,OR3.3 数据查询功能(5)v【例例3.17】

19、查询所有年龄在查询所有年龄在30岁以下的医生姓名及岁以下的医生姓名及其年龄。其年龄。v【例例3.18】查询年龄在查询年龄在30-40岁岁(包括包括30岁和岁和40岁岁)之之间的医生的姓名和年龄。间的医生的姓名和年龄。v【例例3.19】查询科室编号为查询科室编号为“101”、“102”,“103”的医生的全部信息。的医生的全部信息。v【例例3.20】查询编号为查询编号为“101001”的医生的详细情的医生的详细情况。况。v SELECT*FROM YSXX WHERE 编号编号 LIKE“101001”v等价于:等价于:SELECT*FROM YSXX WHERE 编号编号=“101001”3.

20、3 数据查询功能(6)v【例例3.21】查询所有姓查询所有姓“雷雷”的医生的全部信息。的医生的全部信息。v SELECT*FROM YSXX WHERE 姓名姓名 LIKE “雷雷%”v【例例3.22】查询姓名中姓查询姓名中姓“刘刘”,且姓名只有两个字的医生,且姓名只有两个字的医生的姓名。的姓名。v SELECT 姓名姓名 FROM YSXX WHERE 姓名姓名 LIKE “刘刘_”v 【例例3.23】查询所有不姓刘的医生的姓名。查询所有不姓刘的医生的姓名。v SELECT 姓名姓名 FROM YSXX WHERE NOT 姓名姓名 LIKE “刘刘”3.3 数据查询功能(7)v【例例3.2

21、4】某些医生有来医院工作意向但没某些医生有来医院工作意向但没有报到上班,所以有个人信息而没有参加工有报到上班,所以有个人信息而没有参加工作日期。作日期。查询缺少参加工作日期的医生的姓查询缺少参加工作日期的医生的姓名。名。v SELECT 姓名姓名 FROM YSXX WHERE 参加工作日期参加工作日期 IS NULL 3.3 数据查询功能(8)v【例例3.25】查询科室编号为查询科室编号为“101”的年龄在的年龄在40岁以下的医生姓名。岁以下的医生姓名。vSELECT 姓名姓名FROM YSXX WHERE 科室科室编号编号=“101”AND 年龄年龄403.3 数据查询功能(9)v三三.对

22、查询结果排序:对查询结果排序:用户可以用用户可以用ORDER BY子句对查询结果按照一个或多个子句对查询结果按照一个或多个字段的升序字段的升序(ASC)或降序或降序(DESC)排列,缺省值为升序。排列,缺省值为升序。【例例3.26】查询所有医生的姓名和年龄,查询结果按年查询所有医生的姓名和年龄,查询结果按年龄的降序排列。龄的降序排列。select 姓名姓名,年龄年龄 from ysxx order by 年龄年龄 desc注:注:SELECT命令要显示的行数可以是命令要显示的行数可以是 TOP n Percent(TOP 必须与必须与Order by 同时使用同时使用)3.3 数据查询功能(1

23、0)v四四.使用集函数:使用集函数:集函数(使用格式)集函数(使用格式)函数功能函数功能COUNT(*)统计记录个数统计记录个数COUNT(DISTINCT|ALL)统计一列中值的个数统计一列中值的个数SUM(DISTINCT|ALL)计算一列值的总和计算一列值的总和(此列必须是数值型此列必须是数值型)AVG(DISTINCT|ALL)计算一列值的平均值计算一列值的平均值(此列必须是数值型此列必须是数值型)MAX(DISTINCT|ALL)求一列值中的最大值求一列值中的最大值MIN(DISTINCT|ALL)求一列值中的最小值求一列值中的最小值3.3 数据查询功能(11)v【例例3.27】查询

24、医生的总人数。查询医生的总人数。vSelect count(*)from ysxx v【例例3.28】查询病人信息表中医生的人数。查询病人信息表中医生的人数。vSelect count(distinct 主治大夫编号主治大夫编号)from brxxv【例例3.29】查询医生中年龄最大的年龄。查询医生中年龄最大的年龄。vSelect max(年龄年龄)from ysxx 3.3 数据查询功能(12)v五五.对查询结果进行分组:对查询结果进行分组:GROUP BY子句将查询结果表按某一列或多列子句将查询结果表按某一列或多列的值分组,的值分组,值相等的为一组。值相等的为一组。对查询结果分组的对查询结

25、果分组的目的是为了细化集函数的作用对象。如果未对查目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,如询结果分组,集函数将作用于整个查询结果,如上面的例上面的例3.27、例、例3.28、例、例3.29。分组后集函数。分组后集函数将作用于每一个组,即每一组都有一个函数值。将作用于每一个组,即每一组都有一个函数值。3.3 数据查询功能(13)v【例例3.30】求各个科室的医生相应人数。求各个科室的医生相应人数。v SELECT 科室编号,科室编号,COUNT(科室编号科室编号)FROM YSXX GROUP BY 科室编号科室编号 v 如果分组后还要求按一定的条件对

26、这些组进行筛选,如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用最终只输出满足指定条件的组,则可以使用HAVING短语指定筛选条件。短语指定筛选条件。v【例例3.31】查询医生人数超过查询医生人数超过1人的科室编号和科人的科室编号和科室的医生人数。室的医生人数。3.3.2 联接查询(1)v若一个查询同时涉及两个或两个以上的表,若一个查询同时涉及两个或两个以上的表,则称之为联接查询。则称之为联接查询。v分类:等值、非等值、自身联接查询、超联分类:等值、非等值、自身联接查询、超联接查询。接查询。3.3.2 联接查询(2)v1.等值与非等值联接查询:等值与非等值联

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

28、所以本查询实际上涉及两个表。这表中,所以本查询实际上涉及两个表。这两个表之间的联系是通过公共字段两个表之间的联系是通过公共字段科室编号科室编号实现的实现的 v若在等值联接中把目标字段中重复的字段去掉则为若在等值联接中把目标字段中重复的字段去掉则为自然联接自然联接。v SELECT YSXX.科室编号科室编号,姓名姓名,性别性别,职称职称,年龄年龄,参参加工作日加工作日期期,学历学历,毕业学校毕业学校,职务职务,科室名科室名,床位数床位数 FROM YSXX,BUMEN WHERE YSXX.科室编号科室编号=BUMEN.科室编号科室编号3.3.2 联接查询(4)v2.自身联接查询自身联接查询(

29、命名别名来实现命名别名来实现):联接操作不仅可以在两个表之间进行,也可以是联接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行联接,称为表的自身联接。一个表与其自己进行联接,称为表的自身联接。【例例3.34】查询医生信息表中是科室主任的医生查询医生信息表中是科室主任的医生是哪些医生的科室主任。是哪些医生的科室主任。SELECT ZW.姓名姓名,是是,YS.姓名姓名,的主任的主任 FROM YSXX ZW,YSXX YS WHERE ZW.科室编科室编号号=YS.科室编号科室编号 AND ZW.职务职务=主任主任 AND YS.职务职务主任主任3.3.2 联接查询(5)v3.超联接查询:

30、超联接查询:首先保证一个表中首先保证一个表中满足条件满足条件的记录都在结果表中,然后的记录都在结果表中,然后将将满足联接条件的满足联接条件的记录与另一个表的记录进行联接,不记录与另一个表的记录进行联接,不满足联接条件的则将应来自另一表的属性值置为空值满足联接条件的则将应来自另一表的属性值置为空值(NULL)。)。【格式格式】SELECT FROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE 3.3.2 联接查询(6)v说明:说明:1 INNER JOIN 等价于等价于 JOIN,为普通的联接(等值联,为普通的联接(等值联接),在接),在 Visual FoxPro

31、中称为内部联接。中称为内部联接。2 LEFT JOIN 为左联接。为左联接。3 RIGHT JOIN 为右联接。为右联接。4 FULL JOIN 可以称为完全联接可以称为完全联接,即两个表中的记录即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应内容部分为不满足联接条件的记录对应内容部分为 NULL。5 ON 联接条件联接条件:指定联接的条件:指定联接的条件 3.3.2 联接查询(7)v【例例3.35】查询医生与病人间的诊治关系,查询医生与病人间的诊治关系,按医生编号的升序排列。按医生编号的升序排列。SE

32、LECT 编号,Ysxx.姓名,Ysxx.性别,参加工作日期,Brxx.床位号,Brxx.姓名 FROM Ysxx inner JOIN Brxx ON Ysxx.编号=BRxx.主治大夫编号 ORDER BY Ysxx.编号3.3.3 嵌套查询(1)v在在SQL语言中,一个语言中,一个SELECTFROMWHERE语句称为一个查询块。将一个查询块嵌套在另一个语句称为一个查询块。将一个查询块嵌套在另一个查询块的查询块的WHERE子句或子句或HAVING短语的条件中的短语的条件中的查询称为嵌套查询查询称为嵌套查询v嵌套查询是基于多个表的查询,这类查询所要求的嵌套查询是基于多个表的查询,这类查询所

33、要求的结果出自一个表,但相关的条件却涉及多个表。结果出自一个表,但相关的条件却涉及多个表。v上层的查询块称为上层的查询块称为外层查询或父查询外层查询或父查询,WHERE后后的下层查询块称为的下层查询块称为内层查询或子查询内层查询或子查询。SQL语言允语言允许多层嵌套查询。许多层嵌套查询。3.3.3 嵌套查询(2)v1.带有带有IN谓词的子查询:谓词的子查询:在嵌套查询中,子查询的结果往往是一个集合,在嵌套查询中,子查询的结果往往是一个集合,所以谓词所以谓词IN是嵌套查询中最经常使用的谓词。是嵌套查询中最经常使用的谓词。【例例3.36】查询与查询与“肖冰肖冰”同在一个科室住院治同在一个科室住院治

34、疗的病人。疗的病人。SELECT*FROM BRXX WHERE 科室编号科室编号 IN(SELECT 科室编号科室编号 FROM BRXX WHERE 姓姓名名=“肖冰肖冰”)3.3.3嵌套查询(3)v【例例3.37】哪些科室有哪些科室有45岁以上的职工?岁以上的职工?vSELECT DISTINCT 科室名,有45岁以上职工 From Bumen WHERE 科室编号 IN(SELEC 科室编号 FROM Ysxx WHERE 年龄45)3.3.3 嵌套查询(4)v2、带有比较运算符的子查询:返回是、带有比较运算符的子查询:返回是单值单值v3、带有带有ANY(SOME)和)和ALL谓词的子

35、查询:谓词的子查询:【例例3.38】查询出只要年龄小于或等于查询出只要年龄小于或等于“内科内科”(科室(科室编号为编号为102)中)中某某一名医师年龄的医师编号。这个查询可一名医师年龄的医师编号。这个查询可以使用以使用ANY或或SOME量词。量词。SELECT 编号编号 FROM Ysxx WHERE 年龄年龄=ANY;(SELECT 年龄年龄 FROM Ysxx WHERE 科室编号科室编号=102)and 科室编号科室编号1023.3.3 嵌套查询(5)v【例例3.39】查询出年龄大于或等于查询出年龄大于或等于“内科内科”(科室编号为(科室编号为102)中所有医师年龄的医师)中所有医师年龄

36、的医师编号。这个查询使用编号。这个查询使用ALL量词。量词。SELECT DISTINCT 编号 FROM Ysxx WHERE 年龄=ALL;(SELECT 年龄 FROM Ysxx WHERE 科室编号=102)and 科室编号1023.3.3 嵌套查询()或或!=ANYALLIN-NOT INMAXMIN=MAXMINMAX=MIN=MAX3.3.3 嵌套查询()v、带有、带有EXISTS谓词的子查询谓词的子查询:EXISTS(NOT EXISTS)代表存在(不存在)代表存在(不存在)量词。带有量词。带有EXISTS谓词的子查询不返回任何数谓词的子查询不返回任何数据,只产生逻辑真值据,只

37、产生逻辑真值“Ture“或逻辑假值或逻辑假值“False”,用来检查在子查询中是否有结果返回,用来检查在子查询中是否有结果返回,即存在记录或不存在记录。即存在记录或不存在记录。3.3.3嵌套查询(8)v【例例3.40】在在Brxx表检索那些在表检索那些在ysxx表中表中无主治大夫编号的病号记录。使用谓词无主治大夫编号的病号记录。使用谓词 NOT EXISTS:SELECT *FROM Brxx WHERE NOT EXISTS (SELECT *FROM Ysxx WHERE 编号=Brxx.主治大夫编号主治大夫编号)SELECT*FROM Brxx WHERE 主治大夫编号 NOT IN (

38、SELECT 编号 FROM Ysxx)3.3.3嵌套查询(9)v所有带所有带IN谓词、比较运算符、谓词、比较运算符、ANY(SOME)和和ALL谓词的子查询谓词的子查询都能用带都能用带EXISTS谓词的谓词的子查询等价替换子查询等价替换 3.3.4 集合查询(1)v SELECT语句查询的结果是记录的集合,所语句查询的结果是记录的集合,所以多个以多个SELECT语句的结果可再进行集合操语句的结果可再进行集合操作。集合操作主要包括作。集合操作主要包括”并并”操作操作(UNION)。v【例3.41】查询“内科”(科室编号为102)的医生以及年龄不大于30岁的医生的信息。vSELECT *FROM

39、 YSXX WHERE 科室编号=102 UNION SELECT*FROM YSXX WHERE 年龄=303.3.5 设定输出目标v1.输出到自由表输出到自由表:INTO TABLE v2.输出到数组:输出到数组:INTO ARRAY v3.输出到临时表:输出到临时表:INTO CURSOR v4.输出到文本文件:输出到文本文件:TO FILE 3.3.6 其他子句v(1)NOCONSOLE:禁止将查询结果发送到禁止将查询结果发送到 文文件、打印机和件、打印机和Visual FoxPro主窗口。主窗口。v(2)PLAIN:防止列标题出现在查询结果的主窗防止列标题出现在查询结果的主窗口显示中

40、。口显示中。v(3)NOWAIT:打开浏览窗口,并将查询结果输打开浏览窗口,并将查询结果输出到这个窗口后继续程序的执行;程序并不出到这个窗口后继续程序的执行;程序并不等待关闭浏览窗口,而是立即执行紧接在等待关闭浏览窗口,而是立即执行紧接在SELECT语句后面的程序行。语句后面的程序行。3.4 数据更新功能(1)v3.4.1 插入数据插入数据:SQL的数据插入语句的数据插入语句INSERT通常有两种形式。通常有两种形式。一种是插入一条记录,另一种通过数组或变量等一种是插入一条记录,另一种通过数组或变量等插入多条记录。插入多条记录。1.插入单条记录插入单条记录:INSERT INTO (字段名字段

41、名1,字段名字段名2,)VALUES(常量常量1,常量常量2,)3.4 数据更新功能(2)v例例3.47向表向表YSXX中插入记录,记录内容如中插入记录,记录内容如下下:(:(106002 王明王明 男男 主任医师主任医师 55 106 1980.10.1 本科本科 滨州医学院滨州医学院 教师)教师)INSERT INTO YSXX VALUES(106002,王明,男,主任医师,55,106,1980-10-1,本科,滨州医学院,教师,null)INSERT INTO YSXX(编号,姓名,性别,职称,年龄,科室编号,参加工作日期,学历,毕业学校,职务)VALUES(106002,王明,男,

42、主任医师,55,106,1980-10-1,本科,滨州医学院,教师)3.4 数据更新功能(3)v2.对批量生成的数据操作对批量生成的数据操作:INSERT INTO FROM ARRAY|MEMVAR说明:()FROMARRAY 从指定的数组中插入记录值;()FROM MEMVAR 从同名的内存变量中插入记录值。3.4 数据更新功能(4)v【例3.48】vUSE Ysxx vSELE*FROM ysxx INTO ARRAY arr1vCOPY STRU TO Ord1 vINSERT INTO Ord1 FROM ARRAY arr1vSELECT Ord1 vBROWSE vUSE vDE

43、LETE FILE Ord1.dbfv【例3.49】vUSE Ysxx vSCATTER MEMVARvCOPY STRU TO Ord2 vINSERT INTO Ord2 FROM MEMVARvSELECT Ord2 vBROWSE vUSE vDELETE FILE Ord2.dbf3.4 数据更新功能(5)v3.4.2 修改数据:修改数据:格式:格式:vUPDATE SET=,字段=表达式 WHERE 例3.50将病人“刘星一”的主治大夫编号改为”105003”vUPDATE BRXX SET 主治大夫编号”105003”WHERE 姓名”刘星一”例3.51将所有病人的年龄增加岁。3

44、.4 数据更新功能(6)v3.4.3 删除数据:删除数据:v格式:DELETE FROM where v例3.52删除BRXX 表中床位号为的记录.DELETE FROM BRXX WHERE 床位号=“8”3.5 视图的使用(1)v视图视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,它是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍旧存放在原来的基本表中。所以当基本表中的数据发生变化时,视图中的数据会随之发生变化。v格式:CREATE SQL VIEW(,)AS 3.5 视图的使用(2)v注意:组成视图的属性名,或者全部省略,或者全部指组成视图的属性名,或

45、者全部省略,或者全部指定,没有第三种选择。定,没有第三种选择。但在下列三种情况下必须明确指定组成视图的所有字段名:(1)某个目标列不是单纯的属性名,而是集函数或字段表达式;(2)多表联接时,选了几个同名字段作为视图的字段;(3)需要在视图中为某个字段启用新的名字。3.5 视图的使用()v例3.53创建包含YSXX表中所有字段的名为“医院管理视图”的视图。CREATE VIEW 医院管理视图 AS SELECT*FROM YSXX3.5 视图的使用(4)v例3.54在医院yygl数据库中,按科室编号相等建立一个包含表bumen和表ysxx所有字段的视图。vOPEN DATABASE YYGLvCREATE VIEW YYGL_VIEW AS SELECT*FROM YYGL!YSXX INNER JOIN YYGL!BUMEN ON YSXX.科室编号=BUMEN.科室编号v本章结束!本章结束!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(关系数据库标准语言-SQL课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|