第6讲 数据查询与视图
- 格式:ppt
- 大小:423.00 KB
- 文档页数:40


5.1 创建查询1. 查询的概念查询:就是向一个数据库发出检索信息的请求,从中提取符合特定条件的记录。
查询文件:即保存实现查询的SELECT-SQL命令的文件。
查询文件保存时,系统自动给出扩展名.qpr;查询被运行后,系统还会生成一个编译后的查询文件,扩展名为 .qpx。
查询结果:通过运行查询文件得到的一个基于表和视图的动态的数据集合。
查询结果可以用不同的形式来保存。
查询中的数据是只读的。
查询的数据源:可以是一张或多张相关的自由表、数据库表、视图。
2. 用查询设计器创建查询基本步骤:打开查询设计器→ 添加创建查询所基于的数据表→定义输出内容→设置联接、筛选、排序、分组条件→ 选择查询结果的输出形式→保存查询文件→运行查询。
(1)打开查询设计器方法1:从文件菜单或工具栏上单击新建→查询→新建文件→进入查询设计器方法2:当所用到的数据表已在项目中时,从项目管理器窗口中单击数据→ 查询→新建→ 新建查询→进入查询设计器方法3:从命令窗口中输入命令:create query 查询文件名& 创建新查询modify query 查询文件名& 修改已存在的查询(2) 定义查询的输出内容单击字段选项卡→从可用字段列表框中单击所需字段(当输出的列不是直接来源于表中的字段时,单击函数和表达式框边的… 按钮,打开表达式生成器,构造出所需的表达式)→单击添加按钮→所需字段自动出现在选定字段框中。
(3) 设置查询的筛选条件筛选条件决定将哪些记录显示出来。
在筛选框中构造筛选条件表达式时,要注意在实例框中输入不同数据类型时的格式:1) 字符串可以不带引号(当与源表中的字段名相同时才用引号);2) 日期型数值要用{ }括起来;3) 逻辑型数据两侧要带 .号,如 .T.,.F.(4) 设置查询结果的排序依据排序决定查询输出结果中记录显示的顺序。
设置方法:单击排序依据→ 从选定字段框选中字段→选择升序或降序→单击添加。
视图和查询的区别1:什么是视图2:视图和查询的区别3:视图的优点4:如何创建和管理视图5:如何通过视图修改基本表的数据6:如何通过视图实现数据的安全性A:什么是视图:视图(view):从一个或几个基本表中根据用户需要而做成一个虚表1:视图是虚表,它在存储时只存储视图的定义,而没有存储对应的数据2:视图只在刚刚打开的一瞬间,通过定义从基表中搜集数据,并展现给用户B:视图与查询的区别:视图和查询都是用由sql语句组成,这是他们相同的地方,但是视图和查询有着本质区别: 它们的区别在于:1:存储上的区别:视图存储为数据库设计的一部分,而查询则不是.2:更新限制的要求不一样要注意:因为视图来自于表,所以通过视图可以间接对表进行更新,我们也可以通过update语句对表进行更新,但是对视图和查询更新限制是不同的,以下我们会知道虽然通过视图可以间接更新表但是有很多限制.3:排序结果:通过sql语句,可以对一个表进行排序,而视图则不行.比如:创建一个含有order by子句的视图,看一下可以成功吗?C:视图的优点:为什么有了表还要引入视图呢?这是因为视图具有以下几个优点: 1:能分割数据,简化观点可以通过select和where来定义视图,从而可以分割数据基表中某些对于用户不关心的数据,使用户把注意力集中到所关心的数据列.进一步简化浏览数据工作.2:为数据提供一定的逻辑独立性如果为某一个基表定义一个视图,即使以后基本表的内容的发生改变了也不会影响“视图定义”所得到的数据3:提供自动的安全保护功能视图能像基本表一样授予或撤消访问许可权.4:视图可以间接对表进行更新,因此视图的更新就是表的更新D:视图的创建和管理视图的创建1:通过sql语句格式:create view 视图名 as select 语句试一试:分别创建关于一个表或多个表的视图[因为视图可以来自于多表]2:通过企业管理器说明:1:在完成视图的创立之后,就可以像使用基本表一样来使用视图2:在创建视图时,并非所有的select子查询都可用如:compute和compute by,order by[除非与top一起连用]3:但在查询时,依然都可以用在创建时禁用的select子查询4:在视图创建时,必须为没有标题列指定标题[思考:能否不用select 语句来创建一个视图]视图的删除:1:通过sql语句:drop view 视图名2:通过企业管理器说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]修改视图的定义1:通过企业管理器2:通过sql语句:格式:alter view 视图名 as 新的select语句浏览视图信息 sp_helptext 视图名 [查看视图创建的语句]E:如何通过视图修改基本表的数据.1:在视图上使用insert语句通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败4:不能在使用了distinct语句的视图中插入值5:不能在使用了group by语句的视图中插入值2:使用update更新视图中的数据1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列例如:创建以下视图:create view del asselect 职工号,姓名,部门名称,负责人 from work1,部门where work1.部门编号=部门.部门编号如果再执行下面的语句时:update del set 职工号=\'001\',部门名称=\'wenda\' where 职工号=\'01\'[出现错误]只能够改成:update del set 职工号=\'001\' where 职工号=\'01\' update del set 部门名称=\'wenda\' where 职工号=\'01\' 2:不能在使用了distinct语句的视图中更新值3:不能在使用了group by语句的视图中更新值3:使用delete删除视图中数据.通过视图删除数据最终体现为从基本表中删除数据格式:delete 视图名 [where 条件]说明:当视图由两个以上的基表构成时,不允许删除视图的数据例如:建一个视图kkcreate view kk asselect 职工号,姓名,性别,部门名称from work1,部门where work1.部门编号=部门.部门编号 [试着去删除]使用with check option的视图如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.比如:create view xm asselect * from work where 性别=\'男\'完全可以插入insert xm values(\'001\',\'女\',23,\'2400\'....)尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.比如:create view xm asselect * from work where 性别=\'男\' with check option使用schemabinding的视图[使用绑定到构架]我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.比如:create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work说明:1:不能使用“*”来创建此类型的视图2:创建此类型的视图时,一定要加上dbo.表名.3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.使用with encryption对视图进行加密为了保护创建视图定义的原代码,可以对视图进行加密.比如:create view kk with encryptionas select * from work where 职称=\'经理\'用sp_helptext来查看一下.或用企业管理器查看一下.说明:如果应用此项用户将无法设计视图F:使用视图加强数据的安全一般通过使用视图共有三种途径加强数据的安全性A:对不同用户授予不同的使用权.B:通过使用select子句限制用户对某些底层基表的列的访问C:通过使用where子句限制用户对某些底层基表的行的访问对不同用户授予不同的权限。