• 602.50 KB
  • 2022-04-29 14:47:48 发布

最新第十四章-整式的乘法与因式分解复习课件PPT课件.ppt

  • 65页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第十四章-整式的乘法与因式分解复习课件 幂的运算性质整式的乘法整式的除法互逆运算乘法公式(平方差、完全平方公式)特殊形式相反变形因式分解(提公因式、公式法)相反变形知识网络 【例1】计算(2a)3(b3)2÷4a3b4.【解析】幂的混合运算中,先算乘方,再算乘除.【答案】原式=8a3b6÷4a3b4=2a3-3b6-4=2b2.【例2】计算(-8)2016×(0.125)2015.【解析】此题可先用同底数幂的乘法的逆运算,将(-8)2016化为(-8)×(-8)2015,再用积的乘方的性质的逆运算进行计算.【答案】原式=(-8)×(-8)2015×(0.125)2015=(-8)[(-8)×0.125]2015=(-8)×(-1)2015=8.【点拨】运用幂的运算公式,可将问题化繁为简,负数乘方结果的符号,奇次方得负,偶次方得正. 专题三整式的乘法公式的运用【例4】先化简再求值:[(x-y)2+(x+y)(x-y)]÷2x,其中x=3,y=1.5.【解析】运用平方差公式和完全平方公式,先计算括号内的,再计算整式的除法运算.【答案】原式=(x2-2xy+y2+x2-y2)÷2x=(2x2-2xy)÷2x=x-y.当x=3,y=1.5时,原式=3-1.5=1.5. 【归纳拓展】整式的乘法公式包括平方差公式和完全平方公式,而完全平方公式又分为两个:两数和的完全平方公式和两数差的完全平方公式,在计算多项式的乘法时,对于符合这三个公式结构特征的式子,运用公式可减少运算量,提高解题速度.【配套训练】(1)求方程(x-1)2-(x-1)(x+1)+3(1-x)=0的解;(2)已知x2+9y2+4x-6y+5=0,求xy的值.【答案】(1)原方程可化为-5x+5=0,解得x=1.(2)∵x2+9y2+4x-6y+5=0,∴(x2+4x+4)+(9y2-6y+1)=0,∴(x+2)2+(3y-1)2=0.∴x+2=0,3y-1=0,解得x=-2,y=, 【例5】判断下列各式变形是不是分解因式,并说明理由:(1)a2-4+3a=(a+2)(a-2)+3a;(2)(a+2)(a-5)=a2-3a-10;(3)x2-6x+9=(x-3)2(4)3x2-2xy+x=x(3x-2y)2.【答案】(1)不是,因为最后不是做乘法运算,不是积的形式;(2)不是,因为从左边到右边是做乘法运算;(3)是;(4)不是,因为令x=2,y=1,左边=10,右边=32,不是恒等变形.这种方法叫赋值法.是一种比较好的方法,希望掌握! 【点拨】(1)多项式的因式分解的定义包含两个方面的条件,第一,等式的左边是一个多项式;其二,等式的右边要化成几个整式的乘积的形式,这里指等式的整个右边化成积的形式;(2)判断过程要从左到右保持恒等变形.【归纳拓展】因式分解是把一个多项式化成几个整式的积的形式,它与整式乘法互为逆运算,分解因式的方法主要是提公因式法和公式法,因式分解时,一般要先提公因式,再用公式法分解,因式分解要求分解到每一个因式都不能再分解为止. 【配套训练】(1)下列变形,是因式分解的是()A.a(x+y)=ax+ayB.x2+4xy+y2-1=x(x+4y)+(y+1)(y-1)C.am2-a=a(m+1)(m-1)D.m2-9n2+3=(m+3n)(m-3n)+3.(2)分解因式:(x+y)2-4(x+y-1).解:原式=(x+y)2-4(x+y)+4=(x+y-2)2.C 专题五实际问题转化为数学模型【例6】如图所示,在边长为a的正方形中剪去边长为b的小正方形,把剩下的部分拼成梯形,分别计算这两个图形的阴影部分的面积,验证公式是.baaaabbbbba-ba2-b2=(a+b)(a-b). 【解析】通过图形面积的计算,验证乘法公式,从图形中的阴影部分可知其面积是两个正方形的面积差(a2-b2),又由于图的梯形的上底是是2b,下底是2a,高为a-b,所以梯形的面积是(2a+2b)(a-b)÷2=(a+b)(a-b),根据面积相等,得乘法公式a2-b2=(a+b)(a-b).【答案】a2-b2=(a+b)(a-b).【点拨】数形结合思想是一种重要的数学思想,它为验证某些公式提供了方便.【归纳拓展】通过应用公式,我们可以把实际问题转化为数学问题,提高了数学的应用性. 【配套训练】我们已知道,完全平方公式可以用平面几何图形的面积来表示,实际上还有一个代数恒等式也可以用这种形式来表示,例如(2a+b)(a+b)=2a2+3ab+b2,就可以用图①和图②等图形的面积表示.aaabbabababa2a2b2图①b2a2a2abababaaabb图② (2)请画一个几何图形,使它的面积能表示(a+b)(a+3b)=a2+4ab+3b2.(1)请写出图③所表示的代数恒等式;bbaabaabababababa2a2b2b2图③【答案】(1)(2a+b)(a+2b)=2a2+5ab+2b2;(2)如图④.图④a2baababababb2b2b2 整式乘除与因式分解幂的运算性质①am·an=am+n②(am)n=amn③(ab)n=anbn④am÷an=am-n(m,n都是正整数)整式的乘除法①单×单②单×多③多×式单÷单⑤多÷单乘法公式因式分解定义搞清楚与整式乘法的区别与联系步骤一提二套三检查(a+b)(a-b)=a2-b2(a±b)2=a2±2ab+b2课堂小结 1.已知(a+b)2=11,(a-b)2=7,则ab等于()A.1B.-1C.0D.1或-1A2.如果4x2+12xy+k是一个关于x、y的完全平方式,则k等于()A.3y2B.9y2C.yD.36y2B3.如果a+=3,那么a2+=.7课堂训练 4.已知,,求(a+b)2-(a-b)2的值.解:(a+b)2-(a-b)2=[(a+b)+(a-b)][(a+b)-(a-b)]=2a·2b=4ab.当,时,原式=4××= 5.若2m=5,2n=3,求23m+2n的值.解:23m+2n=23m×22n=(2m)3×(2n)2=53×32=1125. 7.1SQL概述7.2定义功能7.4查询功能7.3操作功能第7章关系数据库标准语言SQLSQL是结构化查询语言StructuredQueryLanguage的缩写。可以说查询是SQL语言的重要组成部分,但不是全部,SQL还包含数据定义、数据操纵和数据控制功能等部分。SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。7.5查询及视图的建立 7.1SQL概述最早的SQL标准是于1986年10月由美国国家标准化组织ANSI(AmericanNationalStandardsInstitute)公布的。随后,国际标准化组织ISO(InternationalStandardsOrganization)于1987年6月也正式采纳它为国际标淮,89年提出了SQL89标准,现行标准为1992年提出的SQL92。SQL语言具有如下主要特点:①SQL是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。②SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需要描述清楚用户要“做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。③SQL语言非常简洁。④SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。 7.2定义功能7.2.2表结构的修改7.2.3表的删除7.2.1表的定义 7.2.1表的定义在VisualFoxPro中通过SQL的CREATETABLE命令建立表,命令格式是:CREATETABLE|DBFTableName1[NAMELongTableName][FREE](FieldName1FieldType[(nFieldWidth[,nPrecision])][NULL|NOTNULL][CHECKlExpression1[ERRORcMessageText1]][DEFAULTeExpression1][PRIMARYKEY|UNIQUE][REFERENCESTableName2[TAGTagName1]][,FieldName2...][,PRIMARYKEYeExpression2TAGTagName2|,UNIQUEeExpression3TAGTagName3][,FOREIGNKEYeExpression4TAGTagName4REFERENCESTableName3[TAGTagName5]][,CHECKlExpression2[ERRORcMessageText2]]) *FREE:指定所创建的表不添加到数据库中。如果没有打开数据库则不需要FREE。*NULL:在字段中允许Null值。*NOTNULL:在字段中不允许Null值。*CHECKLExpression1:指定字段的有效性规则。lExpression1可以是用户自定义函数。*ERRORcMessageText1:指定当字段规则产生错误时,VisualFoxPro显示的错误信息。*DEFAULTeExpression1:指定字段的默认值。*PRIMARYKEY:将此字段作为主索引。主索引标识名和字段名相同*UNIQUE:将此字段作为候选索引。候选索引标识名和字段名相同*REFERENCES:建立的本表与其他表在相应索引上的永久性关系,但是其他表所提供的索引只能是主控索引或候选索引,本表上的索引可以是任何类型的索引,由本表上的索引类型决定关系是一对多还是一对一关系。(本表为子表)**没有用PRIMARYKEY或UNIQUE,又用了REFERENCES默认在此字段上建普通索引,然后和其他表建一对多关系。 例7.1用命令建立教学管理数据库。CREATEDATABASE教学管理用SQLCREATE命令建立学生表:CREATETABLE学生(;学号C(8)PRIMARYKEY,姓名C(8),;性别C(2)DEFAULT"男"CHECK性别="男"OR性别="女";ERROR"性别只能输入男或女!",出生日期D,;班级C(16)NULL,团员否L,备注M,照片G)例7.2用SQLCREATE命令建立课程表。CREATETABLE课程(;课程号C(7)PRIMARYKEY,课程名C(12),;学时n(3,0),学分n(4,1),课程性质c(4))例7.3用SQLCREATE命令建立教师表。CREATETABLE教师(;教师号C(8)PRIMARYKEY,教师姓名C(6),课程号C(7),;FOREIGNKEY课程号TAG课程号REFERENCES课程) 例:用SQLCREATE命令建立成绩表。CREATETABLE成绩(;学号C(8),课程号C(7),成绩N(5,2),;PRIMARYKEY学号+课程号TAG学号课号,;FOREIGNKEY学号TAG学号REFERENCES学生,;FOREIGNKEY课程号TAG课程号REFERENCES课程)如上命令有两个FOREIGNKEY…REFERENCES…短语,分别说明了成绩表与学生表、成绩表与课程表之间的联系。注意:用SQLCREATE命令新建的表自动在最低可用工作区打开,并可以通过别名引用,新表的打开方式为独占方式。如果建立自由表(当前没有打开的数据库或使用了FREE),则很多选项在命令中不能使用,如NAME、CHECK、DEFAULT、FOREIGNKEY、PRIMARYKEY和REFERENCES等。 7.2.2表结构的修改修改表结构的命令是ALTERTABLE,该命令有三种格式。格式1:ALTERTABLETableName1ADD|ALTER[COLUMN]FieldName1FieldType[(nFieldWidth[,nPrecision])][NULL|NOTNULL][CHECKlExpression1[ERRORcMessageText1]][DEFAULTeExpression1][PRIMARYKEY|UNIQUE][REFERENCESTableName2[TAGTagName1]]例7.4为课程表增加一个开课学期字段,类型为数值型,宽度为1。ALTERTABLE课程ADD开课学期N(1)例7.5将课程表的开课学期字段更改为字符型并设置相应的规则。ALTERTABLE课程ALTER开课学期C(1);CHECK开课学期="1"OR开课学期="2"从命令格式可以看出,该格式可以修改字段的类型、宽度、有效性规则、错误信息、默认值,定义主关键字和联系等:但是不能修改字段名,不能删除字段,也不能删除已经定义的规则等。 格式2:ALTERTABLETableName1ALTER[COLUMN]FieldName2[NULL|NOTNULL][SETDEFAULTeExpression2][SETCHECKlExpression2[ERRORcMessageText2]][DROPDEFAULT][DROPCHECK]从命令格式可以看出,该格式主要用于定义、修改和删除有效性规则和默认值定义。例7.6修改或定义开课学期字段的有效性规则。ALTERTABLE课程ALTER开课学期;SETCHECK开课学期="1"OR开课学期="2“例7.7删除开课学期字段的有效性规则。ALTERTABLE课程ALTER开课学期DROPCHECK以上两种格式都不能删除字段,也不能更改字段名,所有修改是在字段一级。第三种格式正是在这些方面对前两种格式的补充。 格式3:ALTERTABLETableName1[DROP[COLUMN]FieldName3][SETCHECKlExpression3[ERRORcMessageText3]][DROPCHECK][ADDPRIMARYKEYeExpression3TAGTagName2][DROPPRIMARYKEY][ADDUNIQUEeExpression4[TAGTagName3]][DROPUNIQUETAGTagName4][ADDFOREIGNKEY[eExpression5]TAGTagName4REFERENCESTableName2[TAGTagName5]][DROPFOREIGNKEYTAGTagName6][RENAMECOLUMNFieldName4TOFieldName5]例7.8将课程表的开课学期字段名改为开课时间。ALTERTABLE课程RENAMECOLUMN开课学期TO开课时间例7.9删除课程表中的开课时间字段。ALTERTABLE课程DROPCOLUMN开课时间例7.10将教师表的教师号和课程号定义为候选索引(候选关键字),索引名是emp_sup。ALTERTABLE教师ADDUNIQUE教师号+课程号TAGemp_sup例7.11删除教师表的候选索引emp_sup。ALTERTABLE教师DROPUNIQUETAGemp_sup 7.2.3表的删除删除表的SQL命令是:DROPTABLETable_nameDROPTABLE直接从磁盘上删除Table_name所对应的dbf文件。如果Table_name是数据库中的表并且相应的数据库是当前数据库,则从数据库中删除了表;否则虽然从磁盘上删除了dbf文件,但是记录在数据库dbc文件中的信息却没有删除,此后会出现错误提示。所以要删除数据库中的表时,最好应使数据库是当前打开的数据库,在数据库中进行操作。 7.3操作功能7.3.2删除7.3.3更新7.3.1插入 7.3.1追加记录VisualFoxPro支持两种SQL追加命令的格式,第一种格式是标准格式,第二种格式是VisualFoxPro的特殊格式。第一种格式:INSERTINTOdbf_name[(fname1[,fname2,...])]VALUES(eExpression1[,eExpression2,...])第二种格式:INSERTINTOdbf_nameFROMARRAYArrayName|FROMMEMVAR其中:INSERTINTOdbf_name说明向由dbf_name指定的表中插入记录,当插入的不是完整的记录时,可以用fname1,fname2...指定字段;VALUES(eExpression1[,eExpression2,...])给出具体的记录值; 例7.12:往教师表中插入记录:("42000003","李新","420013")可用如下命令:INSERTINTO教师VALUES("42000003","李新","420013")对以上的情况,假设课程号尚未确定,那么只能先插入教师号和教师姓名两个字段的值,这时可用如下命令:INSERTINTO教师(教师号,教师姓名)VALUES(“42000003”,“李新”)试比较上面的语句与下一条命令在功能上的区别。INSERTINTO教师VALUES("42000003","李新",.null.) 7.3.2删除SQL从表中删除数据的命令格式如下:DELETEFROM[DatabaseName!]TableName[WHERECondition]这里FROM指定从哪个表中删除数据,WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的全部记录。例7.13:删除教师表中课程号值是空的记录:DELETEFROM教师WHERE课程号isnull注意:在VisualFoxPro中SQLDELETE命令同样是逻辑删除记录,如果要物理删除记录需要继续使用PACK命令。 7.3.3更新SQL的数据更新命令格式如下:UPDATE[DatabaseName!]TableNameSETColumn_Name1=eExpression1[,Column_Name2=eExpression2...]WHERECondition一般使用WHERE子句指定条件,以更新满足条件的一些记录的字段值,并且一次可以更新多个字段:如果不使用WHERE子句,则更新全部记录。例7.14:将课程表中的大学英语增加2个学分:UPDATE课程SET学分=学分+2WHERE课程名="大学英语"例7.15:给所有课程的学时增加10:UPDATE课程SET学时=学时+10 7.4SQL的数据查询功能SQL的核心是查询。SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。VisualFoxPro的SQLSELECT命令的语法格式如下:SELECT[ALL|DISTINCT][TOP数值表达式[PERCENT]][别名1.]检索项1[AS列名1][,[别名2.]检索项2[AS列名2]…]FROM[数据库名1!]表名1[[AS][别名1][INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]]JOIN[数据库名2!]表名2[[AS][别名2][ON连接条件…][INTODBF|TABLE新表名]|[INTOCURSOR临时表表名]|[TOFILE文件名[ADDITIVE]]|[TOPRINTER[PROMPT]]|[TOSCREEN][PLAIN][WHERE连接条件1[AND连接条件2]……[AND|OR条件表达式1[AND|OR条件表达式2…]][GROUPBY列名1[,列名2…]][HAVING组条件表达式][UNION[ALL]SELECT语句][ORDERBY排序项1[ASC|DESC][,排序项2[ASC|DESC]…]] 7.4.1简单查询这些查询基于单个表,可以有简单的查询条件。查询由SELECT和FROM短语构成无条件查询,或由SELECT、FROM和WHERE构成条件查询。例7.16:SELECT姓名FROM学生SELECT*FROM学生(其中*表示所有字段)SELECT学号FROM学生WHERE性别="男"SELECTDISTINCT学号FROM成绩说明:DISTINCT排除查询结果中所有重复的行SELECT学号FROM成绩WHERE成绩<80;AND(学号="20015875"OR学号="20025005") 7.4.2简单的联接查询联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。例7.17:SELECT姓名,成绩FROM学生,成绩;WHERE成绩>80AND(学生.学号=成绩.学号)SELECT学生.学号,姓名,成绩FROM学生,成绩;WHERE学生.学号=成绩.学号SELECT姓名,成绩,课程名FROM学生,成绩,课程;WHERE学生.学号=成绩.学号AND成绩.课程号=课程.课程号sele1use学生indexon学号tagxxsele2use成绩setrelationto学号intoabrowsefor成绩>80fieldsa.姓名,成绩 7.4.3嵌套查询嵌套查询是基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。1.返回单值的子查询例:列出选修运筹学的所有学生的学号及成绩.SELECT学号,成绩FROM成绩WHERE课程号=;(SELEDISTINCT课程号FROM课程WHERE课程名=“运筹学”)2.返回一组值的子查询.要用ANY,ALL,IN例:查询学生的学号和成绩,要求其修的课程号是5200010,成绩比课程号是7200050课程的最低成绩要高.SELE学号,成绩FROM成绩;WHERE课程号=“5200010”AND成绩>ANY;(SELE成绩FROM成绩WHERE课程号=“7200050”) 例:查询学生的学号和成绩,要求其修的课程号是5200010,成绩比课程号是7200050课程的所有成绩要高.SELE学号,成绩FROM成绩;WHERE课程号=“5200010”AND成绩>ALL;(SELE成绩FROM成绩WHERE课程号=“7200050”)例:列出选了课的所有的学生名单.SELECT姓名FROM学生WHERE学号IN;(SELECT学号FROM成绩)例:列出成绩合格的学生情况.SELECT*FROM学生WHERE学号NOTIN;(SELECT学号FROM成绩WHERE成绩<60)以上语句查询出的结果有错误,应使用以下语句加以完善SELECT*FROM学生WHERE学号NOTIN;(SELECT学号FROM成绩WHERE成绩<60);AND学号IN(SELECT学号FROM成绩)或:SELECT*FROM学生WHERE学生.学号=成绩.学号AND成绩>=60 7.4.4几个特殊运算符在进行更复杂、涉及更多关系的检索之前,先介绍一下可以在SQLSELECT中使用的几个特殊运算符,它们是BETWEEN…AND…和LIKE等。BETWEEN…AND…意思是在“…和…之间”这里的LIKE是字符串匹配运算符,通配符“%”表示0个或多个字符,另外还有一个通配符“_”表示一个字符。在SQL中,“不等于”用“!=”表示。另外还可以用否定运算符NOT写出等价命令。例:显示成绩在60到90分之间的成绩列表.SELE*FROM成绩WHERE成绩BETWEEN60AND90例:显示2002级所有学生的基本情况SELE*FROM学生WHERE学号LIKE“2002%” 7.4.5排序使用SQLSELECT可以将查询结果排序,排序的短语是ORDERBY,具体格式如下:[ORDERBY排序项1[ASC|DESC][,排序项2[ASC[DESC]…]]例7.19:SELECT*FROM成绩ORDERBY成绩SELECT*FROM学生ORDERBY学号,性别每个“排序项”都对应查询结果中的一列。它可以是下列之一:•FROM子句中表的字段。•一个数值表达式,表示查询结果中列的位置(最左边列编号为1)。 7.4.6简单的计算查询SQL不仅具有一般的检索能力,而且还有计算方式的检索,比如检索职工的平均工资、检索某个仓库中职工的最高工资值等。用于计算检索的函数有:①COUNT——计数②SUM——求和③AVG——计算平均值④MAX—求最大值⑤MIN——求最小值例7.20:SELECTCOUNT(DISTINCT学号)AS人数FROM成绩SELECTSUM(成绩)AS总成绩FROM成绩SELECTSUM(成绩)FROM成绩WHERE学号IN;(SELECT学号FROM学生WHERE班级="信息管理02-1")SELECTAVG(成绩)FROM成绩WHERE学号IN;(SELECT学号FROM学生WHERE班级="信息管理02-1")SELECTMAX(成绩)FROM成绩WHERE课程号="4200013" 7.4.7分组利用GROUPBY子句进行分组计算查询使用得更加广泛。GROUPBY短语的格式如下:[GROUPBY列名1[,列名2…]][HAVING组条件表达式]可以按一列或多列分组,还可以用HAVING进一步限定分组的条件。下面是几个分组计算查询的例子。例7.21:求每个学生的平均成绩SELECT学号,AVG(成绩)FROM成绩GROUPBY学号例7.22:求至少选修了两门课程的学生的平均成绩SELECT学号,COUNT(*),AVG(成绩)FROM成绩GROUPBY学号HAVINGCOUNT(*)>=2SELECT成绩.学号,COUNT(*),AVG(成绩),姓名FROM成绩,学生;GROUPBY成绩.学号HAVINGCOUNT(*)>=2;WHERE成绩.学号=学生.学号 7.4.8利用空值查询SQL支持空值,当然也可以利用空值进行查询例7.23找出尚未确定课程的教师。SELECT*FROM教师WHERE课程号ISNULL例7.24列出已经确定了课程的教师。SELECT*FROM教师WHERE课程号ISNOTNULL 7.4.9超联接查询在新的SQL标准中还支持两个新的关系联接运算符,它们与我们原来所了解的等值联接和自然联接不同。原来的联接是只有满足联接条件,相应的结果才会出现在结果表中;而这两个新的联接运算是,首先保证一个表中满足条件的元组都在结果表中,然后将满足联接条件的元组与另一个表的元组进行联接,不满足联接条件的则将应来自另一表的属性值置为空值。SQLSELECT语句的完整语法格式中与联接运算有关的语法格式如下:SELECT••••••FROMTable1INNER|LEFT|RIGHT|FULLJOINTable2ONjoinConditionWHERE••••••其中:INNERJOIN等价于JOIN,为普通的联接,在VisualFoxPro中称为内部联接。LEFTJOIN为左联接。RIGHTJOIN为右联接。FULLJOIN可以称为全联接,即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应部分为NULL。ONjoinCondition指定联接条件。从以上格式可以看出,它的联接条件在ON短语中给出,而不在WHERE短语中,联接类型在FROM短语中给出。 下面是使用VisualFoxPro的SQLSELECT语句格式完成各种联接查询的例子。例7.32内部联接,即只有满足联接条件的记录才出现在查询结果中。SELECT学生.学号,姓名,课程号,成绩;FROM学生JOIN成绩ON学生.学号=成绩.学号如下两种命令格式也是等价的:①SELECT学生.学号,姓名,课程号,成绩;FROM学生INNERJOIN成绩ON学生.学号=成绩.学号②SELECT学生.学号,姓名,课程号,成绩;FROM学生,成绩WHERE学生.学号=成绩.学号例7.33左联接,即除满足联接条件的记录出现在查询结果中外,第一个表中不满足联接条件的记录也出现在查询结果中。SELECT学生.学号,姓名,课程号,成绩;FROM学生LEFTJOIN成绩ON学生.学号=成绩.学号例7.34右联接,即除满足联接条件的记录出现在查询结果中外,第二个表中不满足联接条件的记录也出现在查询结果中。SELECT学生.学号,姓名,课程号,成绩;FROM学生RIGHTJOIN成绩ON学生.学号=成绩.学号例7.35全联接,即除满足联接条件的记录出现在查询结果中外,两个表中不满足联接条件的记录也出现在查询结果中。SELECT学生.学号,姓名,课程号,成绩;FROM学生FULLJOIN成绩ON学生.学号=成绩.学号 7.4.10集合的并运算SQL支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。短语格式:[UNION[ALL]SELECTCommand]例7.36:SELECT学号from成绩where课程号="7200050";UNION;SELECT学号from成绩where课程号=‘5200010’把一个SELECT语句的最后查询结果同另一个SELECT语句最后查询结果组合起来。默认情况下,UNION检查组合的结果并排除重复的行。要组合多个UNION子句,可使用括号。ALL防止UNION删除组合结果中重复的行。UNION子句遵守下列规则:•不能使用UNION来组合子查询。•两个SELECT命令的查询结果中的列数必须相同。•两个SELECT查询结果中的对应列必须有相同的数据类型和宽度。•只有最后的SELECT中可以包含ORDERBY子句,而且必须按编号指出所输出的列。如果包含了一个ORDERBY子句,它将影响整个结果。 7.4.14VisualFoxPro中SQLSELECT的几个特殊选项1.显示部分结果例7.38只显示前几项记录。有时只需要满足条件的前几个记录,这时使用TOPnExpr[PERCENT]短语非常有用,其中nExpr是数字表达式,当不使用PERCENT时,nExpr是1至32767间的整数,说明显示前几个记录;当使用PERCENT时,nExpr是0.01至99.99间的实数,说明显示结果中前百分之几的记录。需要注意的是TOP短语要与0RDERBY短语同时使用才有效。例7.39显示年龄最小的三位同学的信息。SELECT*TOP3FROM学生ORDERBY出生日期DESC例7.40显示年龄最大的那30%的同学的信息。SELECT*TOP30PERCENTFROM学生ORDERBY出生日期 2.将查询结果存放到数组中可以使用INTOARRAYArrayName短语将查询结果存放到数组中,ArrayName可以是任意的数组变量名。一般将存放查询结果的数组作为二维数组来使用,每行一条记录,每列对应于查询结果的一列。查询结果存放在数组中,可以非常方便地在程序中使用。如下语句将查询到的学生信息存放在数组temp中:SELECT*FROM学生INTOArraytemptemp(1,1)存放的是第一条记录的学号字段值,temp(1,3)存放的是第一条记录的性别字段值等。3.将查询结果存放在临时文件中使用短语INTOCURSORCursorName可以将查询结果存放到临时数据库文件中,其中CursorName是临时文件名,该短语产生的临时文件是一个只读的dbf文件,当查询结束后该临时文件是当前文件,可以像一般的dbf文件一样使用,但仅是只读。当关闭文件时该文件将自动删除。如下语句将查询到的学生信息存放在临时dbf文件tmp中:.SELECT*FROM学生INTOCURSORtmp 4.将查询结果存放到永久表中使用短语INTODBF|TABLETableName可以将查询结果存放到永久表中(dbf文件)。比如将例7.38的查询结果存放在表highsal中可以使用如下语句:SELECT*TOP3FROM学生INTOTABLEhighsalORDERBY出生日期DESC5.将查询结果存放到文本文件中使用短语TOFILEFileName[ADDITIVE]可以将查询结果存放到文本文件中,其中FileName给出了文本文件名(默认扩展名是txt),如果使用ADDITIVE结果将追加在原文件的尾部,否则将覆盖原有文件。如下语句将查询结果以文本的形式存储在文本文件tmp.txt中:SELECT*TOP3FROM学生TOFILEtmpORDERBY出生日期DESC如果TO短语和INTO短语同时使用,则TO短语将会被忽略。 6.将查询结果直接输出到打印机使用短语TOPRINTER[PROMPT]可以直接将查询结果输出到打印机,如果使用了PROMPT选项,在开始打印之前会打开打印机设置对话框。7.将查询结果送到VFP主窗口使用短语TOSCREENTOFILE、TOPRINTER和TOSCREEN可使用PLAIN:防止列标题出现在显示的查询结果中。[小结]掌握SQLSELECT不仅对学好、用好VisualFoxPro至关重要,也是以后使用其他数据库或开发数据库应用程序的基础。 7.5查询与视图7.5.1查询7.5.2视图查询和视图都是为快速、方便地使用数据库中的数据提供的一种方法。查询和视图有很多类似之处,创建视图与创建查询的步骤也非常相似。 7.5.1查询7.5.1.3查询设计器的局限性7.5.1.2建立查询7.5.1.1查询设计器7.5.1.4运行查询 7.5.1.1查询设计器1.查询的概念实际上,查询就是预先定义好的一个SQLSELECT语句,在不同的需要场合可以直接或反复使用,从而提高效率。查询是从指定的表或视图中提取满足条件的记录,然后按照想得到的输出类型定向输出查询结果,诸如浏览器、报表、表、标签等。查询是以扩展名为qpr的文件保存在磁盘上的,这是一个文本文件,它的主体是SQLSELECT语句,另外还有和输出定向有关的语句。 2.查询设计器用“查询设计器”设计查询的基础是SQLSELECT语句,只有真正理解了SQLSELECT才能设计好查询。建立查询的方法很多:①可以用CREATEQUERY命令打开查询设计器建立查询。②可以在“新建”对话框中选择“查询”并单击“新建文件”打开查询设计器建立查询。③可以在项目管理器的“数据”选项卡下选择“查询”,然后单击“新建”命令按钮打开查询设计器建立查询。④如果读者熟悉SQLSELECT,还可以直接编辑.qpr文件建立查询。在命令窗口中使用MODIFYFILEABC.qpr命令或使用记事本等文本编辑器打开相应的qpr文件。 注意:当一个查询是基于多个表时,这些表之间必须是有联系的。查询设计器会自动根据联系提取联接条件,否则在打开查询设计器之前还会打开一个指定联接条件的对话框,由用户来设计联接条件。 7.5.1.2建立查询●选择字段●建立联结●对记录进行筛选●设计排序●分组功能在查询设计器中可以选择“查询”菜单下的“查看SQL”,或单击查询设计器工具栏中的显示SQL窗口图标按钮来查看SQLSELECT语句。注意:这些SQLSELECT语句是由查询设计器生成的,所以有明显的VisualFoxPro痕迹,例如FROM短语中的表还给出了以叹号为分隔符的数据库名前缀,如“订货管理!”。 7.5.1.3查询查询器的局限性事实上,查询设计器只能建立一些比较规则的查询,而复杂的查询它就无能为力了。例如:SELECTout.学号,out.课程号,out.成绩FROM成绩out;WHERE成绩=(SELECTMAX(成绩)FROM成绩inner1;WHEREout.学号=inner1.学号)如上的查询利用查询设计器是设计不出来的。并且这样的查询也不能利用查询设计器进行修改,如果试图利用查询设计器进行修改会出现提示信息对话框,然后也只能在编辑器中打开修改。 7.5.1.4运行查询在项目管理器中,将“数据”选项卡的查询项展开,然后选择要运行的查询,单击“运行”命令按钮执行查询;也可以以命令方式执行查询,命令格式是:DO查询文件名(必须给出查询文件的扩展名qpr)查询去向的语句如下:①浏览②临时表:INTOCURSOR学生情况③表:INTOTABLE学生查询.dbf④图形:INTOCURSORSYS(2015)DO(_GENGRAPH)WITH"QUERY‘_GENGRAPH="C:PROGRAMFILESMICROSOFTVISUALSTUDIOVFP98WIZARDSWZGRAPH.APP"⑤屏幕:TOSCREEN⑥报表:INTOCURSORSYS(2015)REPORTFORM报表2.frx⑦标签:INTOCURSORSYS(2015)LABELFORM.学生情况.lbx 7.5.2视图在VisualFoxPro中视图是一个定制的虚拟表,可以是本地的、远程的或带参数的。视图可引用一个或多个表,或者引用其他视图。视图是可更新的,它可引用远程表。在关系数据库中,视图也称作窗口,即视图是操作表的窗口,可以把它看作是从表中派生出来的虚表。视图是根据对表的查询定义的,其命令格式如下:CREATEVIEWview_name[(column_name[,column_name]…)]ASselect_statement其中select_statement可以是任意的SELECT查询语句,它说明和限定了视图中的数据;当没有为视图指定字段名(column_name)时,视图的字段名将与select_statement中指定的字段名或表中的字段名同名。视图是根据表定义或派生出来的,所以在涉及到视图的时候,常把表称作基本表。 1.从单个表派生出的视图比如,某个用户对学生表只需要,或者只能知道学号和姓名,那么可以定义视图:CREATEVIEWe_wASSELECT学号,姓名FROM学生其中e_w是视图的名称。视图一经定义,就可以和基本表一样进行各种查询,也可以进行一些修改操作。对于最终用户来说,有时并不需要知道操作的是基本表还是视图。为了查询学号和姓名信息,可以有命令:SELECT*FROMe_w或SELECT学号,姓名FROMe_w或SELECT学号,姓名FROM学生它们可以收到同样的效果。上面是限定列构成的视图,下面再限定行定义一个视图。比如,某个用户对学生表只需要,或者只能查询冷勇的信息,可以定义如下视图:CREATEVIEWv_bjASSELECT学号,姓名FROM学生WHERE姓名="冷勇"这里v_bj中只有冷勇的信息,所以学生的信息就不需要了。 2.从多个表派生出的视图从上面的例子可以看出,视图一方面可以限定对数据的访问,另一方面又可以简化对数据的访问。在前面查询的例子中,有些查询是很复杂的,比如例7.27列出每个职工经手的具有最高总金额的订购单信息。如果要求部门的经理也键入这么复杂的命令,实在有点太强求了。幸好有一种替代的方法,那就是使用视图:CREATEVIEWv_sampleASSELECTout.学号,out.课程号,out.成绩FROM成绩out;WHERE成绩=(SELECTMAX(成绩)FROM成绩inner1;WHEREout.学号=inner1.学号)这时候再提出同样的查询要求,就只需要输入以下命令即可:SELECT*FROMv_sample下面再看一个例子,这个视图向用户提学生姓名、课程号和成绩信息:CREATEVIEWv_empASSELECT姓名,课程号,成绩FROM学生,成绩WHERE学生.学号=成绩.学号结果对用户就好像有一个包含字段姓名、课程号和成绩的表。 3.视图中的虚字段用一个查询来建立一个视图的SELECT子句可以包含算术表达式或函数,这些表达式或函数与视图的其他字段一样对待,由于它们是计算得来的,并不存储在表内,所以称为虚字段。例7.41定义一个视图,它包含编号、姓名和月收入3个字段。CREATEVIEWv_salAS;SELECT编号,姓名,基本工资+奖金AS月收入FROM工资这里在SELECT短语中利用AS重新定义了视图的字段名。由于其中一字段是计算得来的,所以必须给出字段名。这里月收入是虚字段,它是由工资表的基本工资字段加上奖金字段得到的。由此可见,在视图中还可以重新命名字段名。查询v_sal:SELECT*FROMv_sal4.视图的删除视图由于是从表中派生出来的,所以不存在修改结构的问题,但是视图可以删除。删除视图的命令格式是:DROPVIEW<视图名>比如要删除视图v_emp,只要键入命令:DROPVIEWv_emp 5.关于视图的说明在VisualFoxPro中视图是可更新的,但是这种更新是否反映在基本表中则取决于视图更新属性的设置。在关系数据库中,视图始终不真正含有数据,它总是原来表的一个窗口。所以,虽然视图可以像表一样进行各种查询,但是插入、更新和删除操作在视图上却有一定限制。在一般情况下,当一个视图是由单个表导出时可以进行插入和更新操作,但不能进行删除操作;当视图是从多个表导出时,插入、更新和删除操作都不允许进行。这种限制是很有必要的,它可以避免一些潜在问题的发生。[本章小结]本章比较全面地介绍了关系数据库标准语言SQL,SQL已经成为VisualFoxPro的基本内容。以前版本从FoxPro就开始引进SQL,不掌握SQL要用好VisualFoxPro基本是不可能的。所以说SQL是学好、用好VisualFoxPro的基础。'