主要内容1.数据查询与SQL语言2.SELECT查询语句3.查询的建立与运行4.视图的建立与运行9.1数据查询与SQL语言为什么要数据查询?所谓查询就是从原始的数据表中寻找出用户需要的数据。查询文件利用查询设计器或查询向导所建立的查询文件的扩展名为.QPR,查询文件的内容是SQL语言的查询语句,运行查询文件即可获得所需的结果。注意:查询的结果只能作为输出使用,他产生一个独立的文件,不影响原来的数据文件,这是与视图的根本区别。查找性别为男且平时成绩小于等于95分的学生多表操作从“学生信息”表中获取学生的学号、姓名、班级,从“学生成绩”表中获取学生的期中成绩。连接类型表与表之间的四种联接类型(具体参见教材P117表)1.内联接(INNERJOIN)2.左联接(LEFTJOIN)3.右联接(RIGHTJOIN)外连接4.完全联接(FULLJOIN)默认情况下为内连接。1内连接内连接(InnerJoin)也叫自然连接,是指将另一个表内的行数据与本表内的数据相互连接,产生的结果行数取决于参加连接的行数,也就是说在将两个表中的指定列进行比较时,仅将两个表中满足连接条件的行组合起来作为结果集。在内连接中,只有在两个表中匹配的行才能在结果集中出现。进行多表连接查询时,当两个或多个表中具有相同名称的列时,必须在要查询的列名前使用表名或表的别名作为前缀,并用“.”来分隔,这样将避免出现列名不明确的错误。等值指定连接[实例7.4]查询“学生信息”表中全部学生的学号、姓名和在“学生成绩”表中的课程号和期末成绩。(学生成绩表.学号=学生信息表.学号)归纳分析:从服务器返回的数据结果中,可以发现内连接的结果是从两个或两个以上的表集合中平等地挑选出符合条件的数据,并将无法满足连接条件的数据抛弃。如在学生成绩表中学号为200302011的四条记录就没有出现在上述查询结果集中。注意,如果所连接表的列中有空值,则这些空值不会互相匹配,因此不会出现在查询结果中。2外连接在内连接中,参与连接的表的地位是平等的,连接的结果是从两个或两个以上的表集合中挑选出符合条件的数据,如果数据无法满足连接条件则将其抛弃。而与之相对的连接方式是外连接(OuterJoin)。在外连接中,参与连接的表有主从之分,连接时以主表中的每一行数据去匹配从表中的数据列,查询的结果集是主表中的全部数据和从表中符合条件的与主表相匹配的行数据。当主表中的某一数据没有与之相匹配的从表数据时,则以空值填入。外部连接分为左连接(LeftOuterJoin)、右连接(RightOuterJoin)和完全连接(FullOuterJoin)三种。1.左连接学生信息表中学号为“200302011”,而在学生成绩表中不存在学号为“200302011”的记录。现将学生信息表定义为主表,学生成绩表进行左连接。2.右连接用右连接的方式表示。3.完全连接使用完全连接在表学生成绩与学生信息中查询学号,姓名,班级,成绩,平时成绩。假设有两个表A和B,现在要对它们进行连接,各种连接的结果描述如表7-1所示。表几种连接方法连接类型连接说明返回结果说明AJOINBA和B内连接返回满足连接条件的A和B的记录ALEFTOUTERBA左外连接B返回满足条件的记录以及返回所有A的记录ARIGHTOUTERBA右外连接B返回B的所有记录AFULLOUTERBA完全外连接B返回A和B的全部记录2视图1视图的概念–视图是从基本表的基础上导出的虚拟表,兼有“表”和“查询”的特点–视图(VIEW)是在数据库表(非自由表)的基础上定义的一种特殊表,是实际并不存在的虚拟表。所谓虚拟,是因为视图的数据是从表或其它视图中抽取得来的,视图的数据并没有在数据库中单独集中存储,而只是在数据库中保存视图的定义。视图一经定义,就成为数据库的组成部分,可以像表一样接受用户的查询。另外,没有数据库就没有视图。–使用视图可以从表中提取一组记录,改变这些记录的值,并把更新结果送回到基本表中。–VFP视图又分为本地视图和远程视图.后者数据来源于远程数据库系统。视图是表的投影,是一个定制的虚拟表。视图兼有表和查询的特点:与查询一样可以用来从一个或多个相关联的表中提取有用信息;与表相类似的地方是,可以用来更新其中的信息,并将更新结果永久保存在磁盘上。视图可以看作是数据库中的一个特定的表,是基于基本表的用户层次上的一个表。视图有4个明显的优点,使得视图成为数据库设计中不可或缺的工具:(1)灵活有效的选取数据:视图既可以在一个数据表中挑选出需要的字段,组成原数据表的“子表”;也可以在多个数据表中,各挑选出部分或全部字段,组成逻辑上包含多个数据表的字段的虚拟表;甚至可以通过远程数据库建立远程视图。(2)不增加数据冗余:数据库中的视图只需要定义,是不包含实际数据的。所以无论视图从数据表中选择多少数据组成“新表”,都不会重复存储任何数据,减少了数据冗余和由此带来的操作异常。(3)使用方便:尽管视图与数据表有本质的不同,但是在逻辑上二者是等价的。即视图一经定义,用户就可以像使用数据表一样使用视图中“包含”的数据了。(4)更新数据:视图可以将对其中数据的修改回存到数据表,并且能够修改的字段是事先设置的。这就使得视图既能够实现对数据表的更新功能,又可以保证更新是在合法的范围内进行的,保护了数据库中的其他数据不被非法修改。1、视图是可更新的,视图可以更新数据并将更新结果发送回源表,而查询则不行。如果想对从本地或远程表中提取的数据实现更新操作,就需要使用视图。2、查询文件(QPR文件)独立存在,该程序文件可以反复执行;视图不是独立文件,只是保存在数据库中的一种定义,只能按操作表类似的方法使用它,可以作为查询的对象。但视图只是虚拟表,视图中的数据是从表中临时抽取的数据。3、对查询结果可以定向输出,而视图不可以定向输出。查询的结果可以在窗口浏览,生成数据表、图形和报表等,而视图的结果不能直接实现这样的功能。归纳一下,查询和视图的主要差别在于:4、查询的数据源可以是一个或多个相关的自由表、数据库表、多个数据库的表或视图.不能访问远程数据源。5、视图的数据源可以是一个或多个数据库表或视图。不能是自由表。且能访问远程数据源。创建视图在VFP中建立视图最便捷的方式是利用系统提供的视图设计器和视图向导两个工具.举例若要使用视图设计器来创建本地表的视图,首先应创建或者打开一个数据库,然后在数据库中打开视图设计器,创建好的视图也只能保存在该数据库中。下面用两个例子说明创建视图的具体步骤。【例1】利用视图设计器,依据“学生库”数据库,创建一个本地单表视图“专业视图”,其中包含“专业编号”“学号”、“姓名”、“毕业院校”字段,要求按“姓名”字段升序排列。注意:由于视图必须依赖于数据库存在,所以在建立视图之前,一定要先打开数据库设计器,否则是无法建立视图的。【例2】利用视图设计器,依据“学生库”数据库,创建一个本地多表视图“专业成绩视图”,其中包含“学号”、“姓名”、“平时成绩”和“专业编号”字段,要求只显示平时成绩大于90的学生的记录,结果按平时成绩从高到低排列。注意:由于“学号”、“姓名”和“专业编号”是在学生情况表中,而“平时成绩”是在学生成绩表中,所以我们创建的这个视图需要同时用到两张数据表,并且将两张表的记录,按照学号相等的关系对应起来,而筛选平时成绩大于90的记录,并按分数从高到低排序,则需要用到视图设计器中专门的一些功能选项实现。单表多表视图有一个很重要的特点,就是对数据的更新功能。由于视图是一张“虚表”,视图中的数据都是储存在原始表中,所以我们就可以通过对视图内数据的修改来完成对原始表的修改。而且,可以设置通过对视图的设置,让用户只对指定的字段有更新权限,从而保护原始数据的安全。在“视图设计器”中,可以利用“更新条件”选项卡来设置视图中的更新规则。下面举例介绍用本地视图更新数据表中的数据。【例3】修改例1中创建的“学生专业视图”,使得该视图可以更新其中的“毕业院校”信息。。视图更新“更新数据”1.使表可更新如果希望在表上所作的修改能回送到源表中,需要设置“发送SQL更新”选项,必须至少设置一个关键字段来使用这个选项。2.设置关键字段VisualFoxPro用关键字段来唯一的标识那些已在本地修改过的远程表中的更新记录。如果选择的表中有一个主关键字段并且已在字段选项卡中,则“视图设计器”自动使用表中的该主关键字段作为视图的关键字段。可以通过单击“钥匙形”列使之前面出现“”来设置或取消关键字段。“钥匙形”列是一个开关。如果已经改变了关键字段,而又想把它们恢复到源表中的初始设置,选择“重置关键字”。VisualFoxPro会检查表并利用这些表中的关键字段。可用本地或远程视图更新数据。在“视图设计器”的“更新数据”选项卡中可设置更新条件。使源表可更新关键字段标志列。可更新的条件是:已指定源表的关键字可更新列更新方式3.更新指定字段如果希望表中的字段可更新,必须至少设置一个关键字段。如果字段未标注为可更新的,用户虽然可以在表单中或浏览窗口中修改这些字段,但修改的值不会返回到源表中。单击字段名旁边的“可更新列”(笔形)。即使之前面出现“”。如果想使表中的所有字段可更新,单击“全部更新”按钮,使所有字段可更新。“全部更新”不影响关键字段。视图的修改与删除1.视图的修改•视图的修改在视图设计器中进行,其操作步骤如下:①打开待修改视图所在的数据库设计器(MODIFYDATABASE库名);②打开视图设计器。单击打开的数据库中待修改视图,选取“数据库”菜单中的“修改”菜单项(或用MODIFYVIEW视图名),打开“视图设计器”,如下图所示。在这里就可以对设计过的视图根据需要进行修改。2.视图的删除为了重新组织和管理数据,经常要删除一些无用的视图。删除视图的步骤如下:①打开待修改视图所在的数据库设计器(MODIFYDATABASE库名);②单击打开的数据库中待删除的视图;③选取“数据库”菜单中的“移去”菜单项,弹出如下图所示对话框;④单击下图中的“移去”,就删除了视图。(DELETEVIEW视图名)。视图的作用•视图建立以后,就可以使用它来显示和更新数据。下面我们就来看视图的使用情况。1.利用视图可以快速查找信息2.利用视图更新数据3.视图可以作为数据源3、视图-SQL实验根据“数据库”设计视图---成绩管理:①找出入学成绩在450到500之间的学生。②视图的输出字段为学号、姓名、入学成绩、课程编号、学号、成绩。③视图可以更改成绩,并能更新产生视图的源表对应的成绩。④浏览视图。9.1数据查询与SQL语言SQL语言SQL是结构化查询语言(StructuredQueryLanguage)的缩写,其主要功能包括数据查询、数据操纵、数据定义和数据控制4个部分。SQL语言语法简洁、使用方便、功能齐全,是目前关系数据库的标准语言。当前流行的各种关系数据库管理系统基本上都支持SQL语言,例如,Sybase、Informix、SQLServer、Oracle、DB2、FoxPro、Access等,并且得到了广泛的应用。9.1数据查询与SQL语言SQL语言的特点(1)SQL语言的使用类似于英语的自然语言,简洁易用。只用了9个动词:CREATE、DROP、ALTER、SELECT、INSERT、UPDATE、DELETE、GRANT和REVOKE。(2)SQL语言是一种非过程化的语言。(3)SQL语言既是自含式语言,又是嵌入式语言。所谓的自含式语言是指像一般的FoxPro语句一样按交互方式使用,即直接在命令窗口中从键盘上输入SQL语句对数据库进行操作,并且立即得到执行结果。所谓的嵌入式语言是指SQL语句能够嵌入到其他语言的程序中使用,例如SQL语句用在FoxPro的程序中,当程序执行时完成其指定的任务。(4)SQL语言是一种面向集合的语言,每个语句的操作对象是一个或多个关系,同时结果也往往是一个关系。在vfp中,查询给我们提供了一个使用SQL语句的机会。其实一个查询就是生成一个SQL语句,并且执行该SQL语句的过程。查询提供了