第四章 查询与视图 4.1 SQL结构化查询语言 ? ? ? ? ? 1、SQL简介 Structured Query Language(结构化查询 语言)的缩写。 是一种国际标准,大部分DBMS产品都支持 SQL,SQL已成为操作数据库的标准语言。 有“方言”,支持程度不同。 Visual Foxpro6.0支持SQL,但支持程度与 其它DBMS产品有区别,也与标准SQL有差异。 4.1 SQL结构化查询语言 ? ? ? ? ? 2. SQL的特点 非过程化 一体化 两种使用方式,统一的语法结构 简洁 4.1 SQL结构化查询语言 ? ? ? ? 3. SQL的功能 数据定义(DDL) Create、Drop、Alter 数据操纵(DML) 数据修改:Insert、Update、Delete 数据查询:Select 数据控制(DCL) Grant、Revoke 4.1.1 SQL数据定义功能(DDL) ? ? 数据定义语言(Data Definition Language) Create、Drop、Alter 数据对象的类型 基本表 视图 属性的值域(数据类型) 完整性约束 索引 4.1.1 SQL数据定义功能(DDL) ? ? ? 1、 表的定义 Create Table 表名 (字段1 数据类型1 ,…,字段n 数据类型n ) 在使用CREATE TABLE命令定义表时,字段 类型用相应的字母(C、N、F,I,Y、D、 T、M、G)表示,有些类型需要用户给定字 段宽度和小数位。 ? 1、 表的定义 ? ? 例1:创建学生档案表,该表的字段为:学 号,c型,长度为10;姓名,c型,长度为 10;性别,c型,长度为2;出生日期,d型; 班级,c型,长度20。 create table 学生档案 (学号 c(10), 姓名 c(10), 性别 c(2), 出生日期 d, 班级 c(20)); 1、 表的定义 ? ? ? ? ? ? 举一反三: 创建一个“课程”表,字段有: 课程代号,c型,10位; 课程名称,c型,20位; 学时,N型,5位,小数1位; 学分,N型,4位,小数1位。 1、 表的定义 ? ? 用 CREATE TABLE命令建立表时可同时创建: 满足实体完整性的主关键字(主索引)PAIMARY KEY; ? 定义域完整性的CHECK约束及出错提示信息 ERROR; 定义默认值的 DEFAULT等; ? ? 此外还有描述表之间联系的 FOREIGN KEY和 REFERENCES等。 1、 表的定义-列级约束 例2:新建一个“专业”表,含字段:专业名称, c型,10位;所属系,c型,12位;学生数,I型; 增设日期,D型。同时指定专业名称为主索引, 并且要求学生数大于0,否则提示“学生数应该 大于0”。 CREATE TABLE 专业( ; 专业名称 C(10)PRIMARY KEY, 所属系 C (12), ; 学生数 I CHECK(学生数>0)ERROR “学生数应 该大于0!”,增设日期 D) ? 1、 表的定义-表级约束 ? 例3:创建“学生选课”表,字段为:学号 C(10), 课程代号 C(10),成绩 N(8,2)。与学生档案表按学号 建立外键联系,与课程表按课程代号建立外键联系。 CREATE TABLE 学生选课( ; 学号 C(10), 课程代号 C(10),成绩N(8,2), ; FOREIGN KEY 学号 TAG FK_Xh REFERENCES; 学生档案,; FOREIGN KEY 课程代号 TAG FK_Kh; REFERENCES 课程; ); 4.1.1 SQL的数据定义功能 ? ? ? ? ? ? ? 2、表结构的修改 ALTER TABLE 表名 修改字段名; 修改字段类型; 删除字段; 添加字段; 修改主键和联系。 2、表结构的修改-字段改名 ? 例4:将“专业”表的增设日期字段名改 为开办日期。 ALTER TABLE 专业 RENAME COLUMN 增设日期 to 开办日期; 2、表结构的修改-修改字段类型 ? ? 例5: 将学生档案表的学号字段的宽度改为 10。 ALTER TABLE 学生档案 ALTER 学号 C (10) 2、表结构的修改-删除字段 ? 例6:删除专业表中的开办日期字段。 ALTER TABLE 专业 DROP COLUMN 开办日期; 2、表结构的修改-增加字段 ? ? 例7:为课程表增加一个学分字段,并且 要求学分字段不能为零。 ALTER TABLE 课程 ADD 学分 N(4,1) CHECK 学分>0 ERROR "学分字段应 该大于零!" 2、表结构的修改-增加字段 ? ? 练习: 为课程表增加一个字段:任课教师,C (10)。 2、表结构的修改-增加索引 ? 例8:将课程表的任课教师定义为候选索引 (候选关键字),索引名是emp_sup。 ALTER TABLE 课程 ADD UNIQUE 任课教 师 TAG emp_sup 2、表结构的修改-删除索引 ? 例9:删除课程表的候选索引emp_sup。 ALTER TABLE 课程名称 DROP UNIQUE TAG emp_sup 4.1.1 SQL的数据定义功能 3 、表的删除 ? 删除表的SQL命令是: 【格式】DROP TABLE table_ name ? DROP TABLE 直接从磁盘上删除 table_name 所对应的dbf文件。 ? 4.1.2 SQL的数据操作功能 ? 数据操作包括: 插入数据、更新数据、删除数据。 insert update delete 1、 插入数据 ? ? ? 标准SQL 插入一条: INSERT INTO 表名 [(字段1[,字段 2,…])] VALUES(表达式1[,表达 式2,…]) 插入多条: (VFP6不支持) Insert into 表名1[(字段1[,字段 2,…])] select [(字段1[,字段 2,…])] from 表名2 1、插入数据 ? ? ? VFP特有格式 INSERT INTO dbf_name FROM ARRAY Arrayname | FROM MEMVAR 说明: ① FROM ARRAY ArrayName说明从指定 的数组中插入记录值; ② FROM MEMVAR 说明根据同名的内存变 量来插入记录值,如果同名的变量不存在, 那么相应的字段为默认值或空。 1、插入数据 插入一条 ? 例36:新增一个学生信息 Insert Into xsda (学号,姓名,性别,出生日期, 专业) Values ( ?2006090799?, ?张 三’,?男’,{^1986-10-12}, ?会计’) ? 1、插入数据 ? ? ? 插入多条 例37:给“会计”专业的学生开设必修课财 务管理,建立选课信息 Insert Into xsxk; Select 学号,课程代号,null From xsda,pkqk Where 专业= ?会计’ and 课程代号 = ?财务管理’; VFP不支持 2、更新数据 ? ? ? ? ? 【格式】UPDATE TableName SET Column_Name1 = eExpression1 [,Column_Name2 = eExpression2 …] WHERE Condition 说明:一般使用 WHERE 子句指定条件,以更新 满足条件的一些记录的字段值,并且一次可以更新 多个字段;如果不使用 WHERE 子句,则更新全 部记录。 2、更新数据 ? ? 例14,给编号为“05002”的职工提高 10 % 的职务补贴,可以用如下命令: UPDATE Rsgz SET 职务补贴 = 职 务补贴*1.10 WHERE 编号 = “05002" 例15,给所有职工增加 100 元其它补贴: UPDATE Rsgz SET 其它补贴 =其它 补贴十100 3、删除数据 ? ? ? ? 数据删除(Delete) 只能对整个元组操作,不能只删除某些属性 上的值 只能对一个关系起作用,若要从多个关系中 删除元组,则必须对每个关系分别执行删除 命令 格式:Delete From r Where P——从关系 r 中删除满足P的元组。 3、删除数据 ? ? 删除单个元组 例16:删除学号为00015001的学生的信息 delete from 学生 Where 学号 = ?00015001? 3、删除数据 ? ? 删除多个元组 例17:删除选课而未参加考试的学生的选课 信息 Delete From 选课 Where 成绩 is null 删除整个关系中的所有数据 例18:删除所有学生的选课信息 Delete From 选课 4.1.3 SQL的数据查询命令 数据查询是数据库应用的核心功能 一、基本结构 Select A1, A2, ..., An From r1, r2, ..., rm Where P 二、说明 SELECT:说明要查询的列(字段)数据; FROM:要查询的字段来自哪个或哪些表; WHERE:查询条件,即选择记录的条件。 1、基本查询 ? ? ? ? Select子句(选择表中若干列) Where子句(选择表中若干行) Order By子句(对查询结果排序) 聚集函数(求和、求平均等) 1、基本查询(选择列:投影运算) ? ? 语法结构 select 列名1,列名2,…… from 表名 例s1:查看rsda.dbf数据表中的姓名和职称 select 姓名,职称 from rsda; 1、基本查询(选择列:投影运算) ? ? ? 为列更改显示名称: select 列名1 as 新名称,…… from 表1 此用法并不实际更改数据表结构。 例s2:把rsda2中的name显示为职工姓名 Select name as 职工姓名,职称 from rsda2; 1、基本查询(选择列:投影运算) ? ? 显示全部列 (1)select 后罗列出所有列名; (2)用*代替列名。 例s3:显示rsda中所有列 select * from rsda; 1、基本查询(选择列:投影运算) ? ? 列的计算 例s4a:求每人工资的3% Select 基本工资*0.03 from rsda; 1、基本查询(选择行:选择运算) ? ? ? 使用where子句 select 列 from 表 where 条件 条件一般是关系表达式或逻辑表达式,返回 真值或假值。 基本原理是DBMS依次判断在每条记录上是 否满足条件,若满足显示,否则不显示。 1、基本查询(选择行:选择运算) ? 例s4:查找rsda表中教授的信息。 select * from rsda where 职称=“教 授”; 1、基本查询(选择行:选择运算) ? ? 复合条件 例s5:在RSDA数据表中查找90年1月1号 以后参加工作的女职工。 select * from rsda where ; 工作日期>{^1990-1-1} ; and 性别=“女”; 1、基本查询(选择行:选择运算) ? ? ? ? 消除取值重复的行 Select 子句的缺省情况是保留重复元组 可用 Distinct 去除重复元组 例s6:从rsda表中查看一下共有哪些职称。 //select 职称 from rsda; select distinct 职称 from rsda; 1、基本查询 (选择行:where子句的运算符) ? ? ? ? ? ? 比较:=、>、<、>=、<=、!=、 <>、!>、!<、not + ~ 确定范围: Between A and B、Not Between A and B 确定集合:IN、NOT IN 字符匹配:LIKE,NOT LIKE 空值:IS NULL、IS NOT NULL 多重条件:AND、OR、NOT 1、基本查询(选择行:比较大小) ? 例s7:查询基本工资大于1000的员工 select * from rsda where 基本工资 >1000; 1、基本查询(选择行:确定范围) ? ? ? Between and 例s8:查询工资大于等于800但小于等于 1000的员工 select * from rsda where 基本工资 between 800 and 1000; 思考:该语句可用哪条语句代替? 1、基本查询(选择行:确定集合) In/not in ? 例s9:查询不是讲师、工程师的员工 select * from rsda where 职称 not in (“讲师”,”工程师”); ? 思考:该语句可用哪条语句代替? select * from rsda where 职称<> “讲师” and 职称<>”工程师”; ? 1、基本查询(选择行: like) ? ? ? 通配符 % —— 匹配任意字符串 “%A”——查以“A”结尾的 “A%”——查以“A”开头的 “%A%”——查任意位置含有“A”的 _ —— 匹配任意一个字符 1、基本查询(选择行: like) 例s10:查找所有王姓员工 select * from rsda where 姓名 like “王%”; ? 例s11:查找所有名字结尾为“玲”的员工 select * from rsda where 姓名 like “% 玲”; ? 例s12:查找名字中含有“文”的员工 select * from rsda where 姓名 like “%文 %”; ? 1、基本查询(选择行: null查询) ? 例s13:在xsxk数据表中查询选课了但没有 该门课成绩的情况 select * from xsxk where 成绩 is null; 1、基本查询(设定排序条件) ? ? ? 使用order by子句: ORDER BY Order_Item[ASC | DESC][,Order_Item[ASC | DESC]…] 默认 ASC(升序) 例s14:按参加工作时间早晚排序 select * from rsda order by 工作日期 1、基本查询 (聚合函数:Having子句) ? ? ? 针对聚合函数的结果值进行筛选(选择), 它作用于分组计算结果集 跟在Group By子句的后面,没有Group By 则针对全表 例s21:显示平均基本工资大于900的职称 select 职称,avg(基本工资) from rsda group by 职称 having avg(基本工 资)>900; 1、基本查询 (聚合函数:Having子句) ? ? 思考: 从xsxk中选出两门(含)以上不及格的学生 学号。 2、多表查询/联接查询 若一个查询同时涉及两个以上的表,则称之为 连接查询,包括: ? 内连接 ? 外连接 ? 自连接 ? 复合条件连接 2、联接查询 ? 联接形成新的关系 2、联接查询(内联接) ? ? ? ? ? 它是条件连接,这个条件称为连接条件或连 接谓词 可以是等值连接,也可以是不等值连接 新的关系的属性集是参加连接的关系的属性 的组合,不去除重复属性 Inner是缺省的连接方式 也可以用笛卡儿积 + 选择的方法实现 2、联接查询(内联接) Join/inner join ? 列出两个表中仅满足联接条件的记录,为默认联接 类型。 ? 例s22:查询每个已选课学生的全部信息及其选课 情况 SELECT xsda.*, xsxk.* FROM xsda INNER JOIN xsxk ON xsda.学号 = xsxk.学号; SELECT xsda.*, xsxk.* FROM xsda ,xsxk Where xsda.学号 = xsxk.学号;(笛卡尔乘积+选 择) ? 2、联接查询(左联接) Left outer join ? 列出左边表(父表)的所有记录和右边表 (子表)满足联接条件的记录。 ? 例s23:查询每个学生的全部信息及其选课 情况 SELECT xsda.*, xsxk.* FROM xsda LEFT OUTER JOIN xsxk ON xsda.学号 = xsxk. 学号; ? 思考:例s22与例s23有何不同? ? 2、联接查询(右联接) Right outer join ? 列出右边表(子表)的所有记录和左边表 (父表)满足联接条件的记录。 ? 例s24 : select * from xsxk right outer join pkqk; on xsxk.课程代号=pkqk.课程代号 ? 思考:怎样列出没有学生选的课程? ? 2、联接查询(完全联接) Full outer join ? 完全联接:列出两个表的所有记录、不论是 否满足联接条件。 ? 例s25: Select * from xsda full outer join xsxk on xsda.学号=xsxk.学号; ? 2、联接查询(三表联接) 例s26:查看学生选课情况:学号,姓名, 课程代号,课程名称 select xsda.学号,xsda.姓名,pkqk.课程代 号,pkqk.课程名称 from xsda; right outer join xsxk; left outer join pkqk; on xsxk.课程代号=pkqk.课程代号; on xsda.学号=xsxk.学号; ? 2、联接查询(自联接) ? ? ? ? ? ? 一个表与自身相联 需要使用表的别名 SQL允许在 FROM 短语中为关系名定义别 名,格式为: <关系名> as <别名> As可用空格代替。 例s27:select x.学号 from xsda x; 2、联接查询(自联接) 例s28:select l.姓名 as 小组长,“带领”,f.姓 名 as 成员 from xsda2 as l,xsda2 as f; where l.学号=f.小组长 2、联接查询(自联接) 3、子查询/嵌套查询 ? ? ? 子查询是嵌套在另一查询中的 SelectFrom-Where 表达式(Where/Having) SQL允许多层嵌套,由内而外地进行分析, 子查询的结果作为父查询的查找条件 可以用多个简单查询来构成复杂查询,以增 强SQL的查询能力 3、嵌套查询(单值查询) 子查询只返回一行一列 ? 父查询与单值子查询之间用比较运算符进行 连接 ? 运算符:>、>=、=、<=、<、 <> ? 例s29:找出与王刚职称相同的员工 Select * from rsda where 职称=(select 职称 from rsda where 姓名=“王刚”) ? 3、嵌套查询(多值查询) ? ? 子查询返回多行一列 运算符:In、All、Some|Any、Exists 3、嵌套查询(多值成员In) ?标量值与子查询返回集中的某一个相等,true ?IN 被用来测试多值中的成员 ?例s30:查询选修‘A001?课程的学生的学号、 姓名。 Select 学号,姓名 From xsda; Where 学号 IN; (Select 学号 From xsxk; Where 课程代号 = ?A001?); 子查询 多行1列 3、嵌套查询(多值成员In) ? 例s31:查询选修了 ‘高等数学’的学生的学号和姓 名 Select 学号,姓名 查询选择了高等 数学的学生的学 From xsda 号 Where 学号 IN ( Select 学号 From xsxk 查询高等数学 Where 课程代号 IN 的课程代号 ( Select 课程代号 From pkqk Where 课程名称 = ?高等数学?)); ? 但VFP6不支持深层子查询。 3、嵌套查询(多值比较 ALL) ?多值比较:多行一列 ?父查询与多值子查询之间的比较需用All来连接 ?标量值s比子查询返回集R中的每个都大时, s>All R 为True ?All表示所有 ?>all、< all、<=all、>=all、<> all ?<>all 等价于 not in 3、嵌套查询(多值比较 ALL) ?例s32:查询女生中年龄比男生都小的女生 的姓名 select 姓名 from xsda where 出生日期 > all (select 出生日期 from xsda where 性别 = ?男’) and 性别 = ?女’; 3、嵌套查询(多值比较 ALL) ? ? 思考: 找出具有最高平均成绩的学生的学号及平均 成绩。 3、嵌套查询(多值比较some/Any) ?父查询与多值子查询之间的比较需用 Some/Any来连接,some与any等价。 ?标量值s只要比子查询返回集R中的一个大, ? > some、< some、<=some、>=some、 <> some ?= some 等价于 in、<> some 不等价于 not in ?s > Some R 为True ?s > Any R 为True 或 3、嵌套查询(多值比较some) ? 例s33:找出不是出生最晚(年龄最小)的学生 Select * From xsda Where 出生日期 < some ( Select 出生日期 From xsda ); Select * From xsda Where 出生日期 < ( Select max(出生日期) From xsda ); 3、嵌套查询(存在判断Exists) ?Exists + 子查询用来判断该子查询是否返回元组 ?当子查询的结果集非空时,Exists为True ?当子查询的结果集为空时,Exists为False ?不关心子查询的具体内容,因此一般用 Select * ?具有外部引用的子查询,称为相关子查询 (Correlated Queries) ?外层元组的属性值作为内层子查询的条件 3、嵌套查询(存在判断Exists) 例s34:查看已选课的学生信息 select * from xsda where exists; (select * from xsxk where xsxk.学号 =xsda.学号); ? 例s35:查看未选课的学生信息 select * from xsda where not exists; (select * from xsxk where xsxk.学号 =xsda.学号); ? 3、嵌套查询(存在判断Exists) ? 基本原理 3、嵌套查询(存在判断Exists) ? ? 思考: 列出没有选’A008?课程的学生的学号、姓 名。 4、计算查询(聚合函数) 把一列中的值进行聚合运算,返回单值的函数 ?五个预定义的聚合函数 平均值:Avg(ALL|DISTINCT<字段名>) 总和: Sum(ALL|DISTINCT<字段名>) 最小值:Min(ALL|DISTINCT<字段名>) 最大值:Max(ALL|DISTINCT<字段名>) 计数: Count(ALL|DISTINCT<字段名>) ? 4、计算查询(聚合函数) ? ? ? ? ? 例s15:求所有职工基本工资总和 select sum(基本工资) as 工资总和 from rsda; 例s16:求所有职工基本工资平均值 例s17:求最高工资 例s18:求最低工资 例s19:求教授人数 select count(教授) from rsda; (×) select count(职称) from rsda where 职称 ="教授“; 5、分组查询(Group By子句) ? ? 将查询结果集按某一列或多列的值分组,值 相等的为一组,一个分组以一个元组的形式 出现。 例s20:求各职称的平均基本工资 select 职称,avg(基本工资) from rsda group by 职称; 6、两种特殊联结查询 ? ? ? ? (1)别名与自联接查询 格式为:<数据表名> <别名> (2)内外层互相关嵌套查询 这时内层查询的条件需要外层查询提供值, 而外层查询的条件需要内层查询的结果。 见 例4-33 7、设定输出目标 ? ? ? ? ? ? ? (1)输出到独立的表。使用短语 INTO DBF | TABLE TableName (2)输出到数组。使用短语 INTO ARRAY ArrayName (3)输出到临时表。使用短语 INTO CURSOR CursorName (4)将结果发送到已有的报表或标签中(报表或 标签的内容在第八章介绍),在SELECT-SQL语句 中使用REPORT FROM短语或LABEL FROM短语。 7、设定输出目标 ? ? ? ? (5)输出到主窗口。使用短语TO SCREEN (6)输出到默认的浏览窗口。不需要指定 去向。 (7)将查询结果存放到文本文件。使用短 语 TO FILE FileName [ADDITIVE]。 (8)将查询结果直接输出到打印机。使用 短语 TO PRINTER [PROMPT]。 8、 SQL的集合操作 ? SQL的结果集是元组的集合 ? 多个 Select 语句的结果可以进行集合操作, 使结果为“集合” ? SQL-92支持 ? 参加集合操作的关系(结果集)必须是相容 的 8、SQL的集合操作(相容) ? 属性个数必须一致 ? 对应的类型必须一致 ? 属性名无关 ? 最终结果集采用第一个结果的属性名 ? 缺省为自动去除重复元组,除非显式说明 ? Order By放在整个语句的最后 ALL 8、集合操作类型 ? ? ? 并 交 差 4.2 查询 ? ? 4.2.1 建立查询文件 4.2.2 查询结果处理 4.2.1 建立查询文件 ? ? ? 1. 利用查询设计器建立查询文件 建立查询文件的方法: 一是通过“文件”菜单中的“新建”命令; 二是通过项目管理器;三是通过命令creat query 查询文件名;这三种方法都可以进行 查询设计器。 4.2.1 建立查询文件 ? ? ? 2. 利用查询向导建立查询文件 利用查询设计器可以创建各种复杂查询,但 是要求用户自行选择字段、设定筛选条件、 设定分组条件等。 设计者只要按照向导指示的步骤,可以轻松 地创建用户所需的大部分查询。 4.2.2 查询结果处理 ? ? 1.实现查询结果的分组 【例4-42】我们想知道职工中相同职称职工 的平均基本工资,则可以把对应职称的记录 集合到一组中,然后计算平均值。即每种职 称一组,求出平均基本工资后形成一个数据 记录,结果按平均基本工资升序排列。 4.2.2 查询结果处理 ? ? ? ? ? ? 2.查询文件的维护 (1)执行查询 查询的执行有两种情况,一个是在查询设计器中设计好查 询时,直接执行;另一种情况是将查询作为文件保存起来 之后再执行。 ①在查询设计器中设计过程中,系统菜单给出“查询”菜 单,在“查询”菜单下选择“运行查询”。也可以单击工 具栏上的“”执行查询。 ②在命令窗口输入“Do <文件路径和文件名>.qpr”即可运 行指定的查询。也可以运行查询命令加入到程序和菜单中 运行。 ③打开查询文件所在的项目管理器,选取查询文件,单击 项目管理器右侧的“运行”按钮,便可执行查询,得到查 询结果。 2.查询文件的维护 (2)修改查询文件 ? 修改查询文件也是在查询设计器中完成的,方法如 下: ? ①在查询文件所在的项目管理器中选定查询文件, 单击“修改”按钮,便可启动查询设计器。 ? ②使用“文件”菜单中的“打开”命令,打开指定 的查询文件,进入查询设计器。 ? 象利用查询设计器设计查询一样,可以修改原先的 任何一项设计,完成后,在“文件”菜单项中选择 “保存”,修改后的查询文件将替代原来的文件。 ? ? ? (3)查看查询内容 在查询文件中保存的内容并不是查询的结果数据, 而是设定的查询条件,所以当数据源改变时,查询 的结果也会随着改变。查询文件是使用SQL命令建 立起来的,可以检查查询文件中的SQL命令是否正 确,也可以将其拷贝到程序中运行。 查看查询文件的方法有两种。在设计查询过程中, 可以在工具栏中选择“SQL”按钮查看;也可以在 查询设计器窗口中选择“查询”菜单下的“查看 SQL”。 4.2.2 查询结果处理 ? ? 3.输出重定向 查询结果默认的输出去向是以浏览窗口的形式显示在屏幕 上。实际上我们还可以利用“查询”菜单项的“查询去向” 重新确定查询结果的输出去向。 4.3 视图 ? ? ? 4.3.1 视图及其优点 4.3.2 视图的建立 4.3.3 SQL命令定义视图 4.3.1 视图及其优点 ? 视图是由其他一表或多表中所选择的信息所 形成的虚拟表,可以像表一样使用。 视图与表的区别:表中的数据是物理存在, 并存储在介质上的,而视图本身没有存储任 何实际数据,只是一种逻辑对象,它所有的 数据通过引用基表反映出来。 视图有以下优点:保护基表上的数据 、 方 便数据的管理、简化数据操作、方便与其它 应用程序联系等 ? ? 4.3.2 视图的建立 ? ? ? ? 视图和查询非常相似,创建视图与创建查询 的步骤也基本相同。 与查询不同的是,视图可选择如何将视图中 所做的数据修改传给原始文件,或建立视图 的基表。 利用视图向导建立视图 利用视图设计器建立视图 3.视图的修改:在视图设计器中进行 4.视图应用:不但可以用它来显示和更新数据,而 且还可以通过调整它的属性来提高性能。 5.视图操作的几个命令 ? (1)视图修改 ? 【格式】MODIFY VIEW <视图名> ? (2)视图重命名 ? 【格式】RENAME VIEW <旧视图名> TO <新视图 名> ? (3)删除视图 ? 【格式一】DELETE VIEW <视图名> ? 【格式二】DROP VIEW <视图名> 6.关于视图的说明 4.3.2 视图的建立 4.3.3 SQL命令定义视图 ? ? 1、创建视图 CREATE [SQL] VIEW View_name[(Column_name[, Column_name]…)] AS Select_statement 说明: Selec_statemen可以是任意的SELECT查询语 句,它说明和限定了视图中的数据; 当没有为视图指定字段名(Column_name) 时,视图的字段名将与 Select_ statement中指 定的字段名或表中的字段名同名。 4.3.3 SQL命令定义视图 ? ? ? 1、创建视图 例: CREATE SQL VIEW rsda_view AS select 编号,姓名 from rsda where 职称 =“教授”; 4.3.3 SQL命令定义视图 ? ? ? 2、删除视图 【格式】 Drop view 视图名