第八章++SQL语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第八章SQL语言SQL(structuredQueryLanguage)语言,中文名是结构化查询语言,它的理论基础是基于关系代数与关系演算。其语法简洁,功能极为强大和全面,自推出以来被广泛采用,历经多次改进、完善以及标准工作。其地位更加稳固,现已成为关系数据的标准语言。它主要包括查询、数据定义、数据操纵和数据控制等功能。§8.1SQL简介最早的SQL标准是于1986年10月由美国ANSI(AmericanNationalStandardsInstitute)公布的。随后,ISO(InternationalStandardsOrganization)于1987年6月也正式采纳它为国际标准,并在此基础上进行了补充,到1989年4月,ISO提出了具有完整性特征的SQL,并称之为SQL89。SQL89标准公布之后,对数据库技术的发展和数据库的应用都起到了很大的推动作用。尽管如此,SQL89仍有许多不足或不能满足应用需求之处。为此,在SQL89的基础上,经过三年多的研究和修改,ISO于1992年11月又公布了SQL的新标准,即SQL92。SQL92标准将其内容分为三个级别,即基本级、标准级和完全级。但SQL92标准也不够完备,且正在进行修改,考虑增加对象数据的支持能力等。SQL语言的特点:①SQL是一种一体化的语言,包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。以前非关系模型的数据语言一般包括存储模式描述语言、概念模式描述语言、外部模式描述语言和数据操纵语言等,这种模型的数据语言,一是内容多,而是掌握和使用起来都不象SQL那样简单、实用。②SQL语言是一种高度非过程化的语言,它没有必要一步步的告诉计算机“如何”去做,而只需要描述清楚用户要做“什么”,SQL语言就可以将要求交给系统,自动完成全部工作。③SQL语言非常简洁,虽然SQL语言功能很强,但它只有为数不多的几条命令(下面将要介绍)。另外,SQL的语法也非常简单,它很接近英语自然语言,因此容易学习和掌握。④SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。现在很多数据库应用开发工具都将SQL语言直接融入到自身的语言之中,使用起来更方便,VisualFoxPro就是如此。这些使用方式为用户提供了灵活的选择余地。此外,尽管SQL的使用方式不同,但语法基本是一致的。VisualFoxPro在SQL方面支持数据定义、数据查询和数据操作功能,但在具体实现方面也存在一些差异。§8.2SELECT―SQL查询功能在第四章介绍了查询的创建和使用,本节主要介绍SQL语句的使用,SQL语句是实现管理信息系统中查询和统计的核心语句,可在自身的语言之中直接使用。第八章SQL语言1658.2.1SELECT-SQL的格式及作用SQL的核心是查询,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。该命令的语法格式如下:SELECT[ALL|DISTINCT][TOPnExpr[PERCENT]][Alias.]Select_Item[ASColumn_name][,[Alias.]Select_Item[ASColumn_name]…]FROM[FORCE][Databasename!]Table[[AS]Local_Alias][[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOINDatabasename!]table[[AS]Local_Alias][ONJoinCondation…][[INTODestination]|[TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]][PREFERENCEPreferenceName][NOCONSOLE][PLAIN][NOWAIT][WHEREJionCondation[ANDJoinCondition…][AND|ORFilterCondition[AND|ORFilterCondition…]]][GROUPBYGroupColumn[,GroupColumn…]][HAVINGFilterCondition][UNION[ALL]SELECTCommand][ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]…]]要掌握看起来复杂的SELECT命令,就必须从它的命令中各个短语的含义入手,具体含义如下:SELECT[ALL|DISTINCT]参数中的ALL或DISTINCT只选择其一,其中ALL将筛选出满足给定条件的所有记录;DISTINCT将筛选出满足给定条件的记录,但排除记录相同的重复行。[TOPnExpr[PERCENT]]指定在查询结果里包含的行(记录)数或百分比。其中NExpr指定所包含的记录数,其范围是1~32,767,PERCENT指定百分比,其范围是0.01~99.99。[Alias.]Select_Item[ASColumn_name]中的Select_Item参数指定查询结果中的每一项,它可以是字段名、字段名表达式以及常量。若Select_Item是一个常量,那么查询结果中的每一行都出现该常量值。[ASColumn_name]参数指定查询结果中的每一项的标题。若Select_Item是一个字段,那么[Alias.]指明该字段所在表的别名。FROM[FORCE][Databasename!]Table[[AS]Local_Alias]参数指定查询所使用的表,[Local_Alias]为表指定一个临时名,若指定了本地别名,那么在SELECT-SQL语句中都必须用这个别名代替表名。使用[FORCE]表示数据表按FROM子句出现的顺序联接。[[INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]JOINDatabasename!]table[[AS]Local_Alias][ONJoinCondation…]表示指定联接的类型及联接字段表达式。[[INTODestination]表示设置查询的输出结果集。结果集可以是下列形式之一:第八章SQL语言166ARRAYArrayName数组CURSORCursorName[NOFILTER]临时表TABLETableName指定表[TOFILEFileName[ADDITIVE]|TOPRINTER[PROMPT]|TOSCREEN]]表示分别将查询结果送到一个文本文件、打印机和屏幕中去。[PREFERENCEPreferenceName]表示当输出方向为【浏览】窗口时保存该窗口的属性,以便下一次调用。[NOCONSOLE]表示在将查询结果输出到文本文件或打印机上去的同时禁止在屏幕上显示查询结果。[PLAIN]表示禁止列标头出现在查询结果上。[NOWAIT]表示在将查询结果输出到浏览器窗口中去后,允许程序继续执行。[WHEREJionCondation[ANDJoinCondition…][AND|ORFilterCondition[AND|ORFilterCondition…]]]参数用以设置多表连接条件以及筛选条件。[GROUPBYGroupColumn[,GroupColumn…]]用以设置分组汇总依据。[HAVINGFilterCondition]用以设置分组筛选条件。[UNION[ALL]SELECTCommand]表示与另一个SELECT-SQL命令相联接。[ORDERBYOrder_Item[ASC|DESC][,Order_Item[ASC|DESC]…]]用以设置查询结果排序依据。VisualFoxPro允许用户为SELECT-SQL命令添加注释,具体操作如下:①在系统菜单上选择【查询】中的【注释】,VisualFoxPro弹出“注释”对话框。②在“注释”对话框中,键入有关的注释说明。③单击【确定】按钮,VisualFoxPro会将键入的注释添加到SQL只读窗口的顶层。8.2.2基本查询由SELECT和FROM短语构成无条件查询,或由SELECT、FROM和WHERE短语构成的条件查询。【例8.1】从学籍表中检索籍贯。Selectjgfromd:\vfp_example\xj从查询结果可以看出有重复值,如果要去掉重复值只需要指定DISTINCT短语,即selectdistinctjgfromd:\vfp_example\xj【例8.2】从学籍表中检索出所有记录值。select*fromd:\vfp_example\xj其中“*”是通配符,表示所有属性,即字段,这里的命令等同于:selectxh,xm,nl,xb,csrq,jg,jtzz,rxcj,bj,tyf,bz,zpfromd:\vfp_example\xj【例8.3】从学籍表中检索出所有入学成绩在350以上的同学的姓名、家庭住址。selectxm,jtzzfromd:\vfp_example\xjwhererxcj=350其中,WHERE短语指定了查询条件,查询条件可以是任意复杂的表达式。当有WHERE子句时,系统首先根据指定的条件依次检索关系中的每个元组,然后选出满足条件的元组第八章SQL语言167(相当于关系的选择操作),并显示SELECT子句中指定属性的值(相当于关系的投影操作)。从运行结果中可以看出,查询窗口中出现的是字段名,读者很难理解,为此若要将英文字母表示的字段名如XM,JTZZ显示成汉字,只需要使用AS短语即可,selectxmas姓名,jtzzas家庭住址fromd:\vfp_example\xjwhererxcj=350【例8.4】从学籍表中检索出所有入学成绩在350以上,并且是团员的同学。selectxmas姓名,jtzzas家庭住址fromd:\vfp_example\xjwhererxcj=350andtyf注:“tyf”是逻辑型字段,可以直接做为表达式使用。【例8.5】从学籍表中检索出所有1985年出生的团员。selectxmas姓名,csrqas出生日期fromd:\vfp_example\xjwheretyfandyear(csrq)=19858.2.3联接查询联接查询是一种基于多个关系的查询。【例8.6】检索出总分在300分以上同学的出生日期。在这个例题中,总分在CJ关系中,出生日期在XJ关系中,因此隐含了两个关系,两个关系是一对一的联系,使用时只需将FROM后的两个关系用“,”逗号隔开,若关系中有相同的属性名时,在属性名前加关系名,且属性名和关系名中间用“.”小数点隔开。具体执行命令如下:selectcj.xm,zf,csrqfromd:\vfp_example\cj,d:\vfp_example\xjwherzf300andxj.xh=cj.xh【例8.7】检索出1985出生的同学的总分。selectcj.xm,zf,csrqfromd:\vfp_example\cj,d:\vfp_example\xj;wheryear(csrq)=1985andxj.xh=cj.xh注:①在上述两个例子中,xj.xh=cj.xh是联接条件。②“;”是续行符号。8.2.4查询中的运算符在进行更复杂、涉及更多关系的检索时,要用到几个特殊的运算符,它们是BETWEEN…AND…和LIKE等。【例8.8】检索出总分在280到300分之间的同学。selectxm,zffromd:\vfp_example\cjwherzfbetween280and300这里zfbetween280and300的意思是总分在“280和300”之间,等价于(zf300andzf280),只是用zfbetween280and300表示条件更清晰、更简洁。【例8.9】检索出学籍表中姓“张”的同学。selectxmfromd:\vfp_example\xjwherxmlike张%这里的LIKE是字符串通配运算符,通配符“%”

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功