1、vfp中select语句用法Visual FoxPro 中的 SQL Select 查询基本的SQLSelect 2From 了句 2Select f句 2SQL和用户自定义函数 2Select子句中的关键字和其它子句 3Select子句中的通配符 3字段别名(AS) 3用DISTINCT消去重复的记录 4用WHERE子句说明选择记录的条件 4选择条件 4连接条件 4SQL和宏 .4SQL和字母大小写 5SQL和索引 5用Order By子句对结果排序 5列函数 6SQL的列函数 6列函数中的DISTINCT .6列函数的嵌套 7用GROUP BY求分组小计 9GROUP BY和DISTINC
2、T之间的选择 9HAVING子句的使用 10用TOP子句选择-定数量或一定百分比的记录 13查询结果的输出定向 14复杂查询 15子查询 15带f查询的IN谓词和量词 15ANY |SOME 16ALL 16EXISTS 仃自身连接 17合并 18示例快速排名次 19示例二选择重复的记录 20外连接 .21什么是外连接? 21用右外连接(Right Outer Join)选择记录 21用左外连接(Left Outer Join)选择记录 22用完全外连接(Full Outer Join)选择记录 23用内连接加外连接选择记录 24用内连接(Inner Join)选择记录 25 25选择记录(N
3、ested Join)用嵌套 的连接.Visual FoxPro 5.0 中的新的 FROM/JOIN 语法 26为了更加清晰 27用SQL Select生成视图 28注意事项 29基本的SQL SelectFrom子句在FROM 了句中指定要查询的农,若指定的衣未打开,FoxPro将自动打开指定的衣,但 在査询完成后.FoxPro并不自动关闭它所打开的衣,若要在查询完成后关闭衣,则必须以手动方 式关闭它们。若在执行SQL SELECT时,FROM /句中指定的衣已经打开,则FoxPro以USE -AGAIN的方式重 新打开此农。Select子句SELECT (句中指定要査询的结果字段,这些结
4、果可以是以下基本元素:通配符*农中的字段名FoxPro函数SELECT中可用的列函数用户自定义函数常数(常用于作为占位符)以上各元素在SELECT /句中以逗号分开,例如:SELECT销售地区,销售部门,业务员;FROM销售农若SELECT T句中的字段名是唯的,则不必在字段名前加别名修饰,SQL能自动找到这些 字段。若字段名是非唯的(即同字段名出现在FROM /句中的两个或两个以上农中),FoxPro返回以下错谋信息:字段|变量不唯一,必须加以限定要纠正这一错误,用字段所在表的别名修饰该字段。若在SELECT 了句中加入了 FoxPro函数,则意味着该语句不具备可移植性。SQL和用户自定义函
5、数FoxPro支持在Select /句中使用用户定义函数。但是由于在其它系统中不支持用户定义函数。 因此在开发可能移植的系统时不要使用用户自定义函数。.Select子句中的关键字和其它子句Select子句中的通配符*1、*(星号)只能使用在字段串列参数中。代衣来源数据斥中所有的字段。如果select是在二个以上的数据 库中进行査询的,则要在号码前加上数据库别名。*是SQL中的三个通配符之(其它两个是?和将在以后讨论)只能出现在Select子 句中,通配符前可以用别名修饰,在此情况下衣示妥查询指定工作区中的全部字段同时还可以给 出其它字段名如:Select销售衣二客户衣客户代码,客户衣-客户名称
6、;FROM销售衣,客户农;WHERE销售农-客户代码二客户衣客户代码2、 %(百分号)只能使用在Where参数中,代衣连串任意字符类似于DOS下的IT*.PRG中的通常与运算符LIKE搭配使用:SELECT客户名FROM客户农 WHERE客户名LIKE “成都公司”以上查询选择所有公司名以”成都”开始,以”公司”结尾的客户,如:成都东方公司、成都西部发 展公司等。3、 _(下划线)也只能使用在where参数中,代衣个任意字符。与DOS下的DIR IT77.PRG中的” ?” 样。例如_a%农示第二个字符为a的字串。通常与LIKE搭配使用:SELECT客户名FROM客户衣 WHERE客户名LIK
7、E “成都_公司”以上查询选择类似于”成都分公司”,”成都总公司”这样的公司名字。另种情况是文字数据中正好包含有星号、百分号、下划线(例如:软件部_业务组),此时可 使用关键字ESCAPE告诉SQL哪个字符是常数字符而非通配符。例如:select company from customer where company like%_% escape 此时escape所指定字符(即)后的那个字段(此处为下划线将彼视为常数字符而非通配 符。字段别名(AS)FoxPro捉供了给Select犷句中的字段起别名的方法(这种方法不同于ANSI/ISO标准):即可 用AS(句给出Select(句中字段的别名,
8、在多当需要宣接浏览査询结果或査询结果中含有计 算列时,该方法很有用处-例如:工资汇总)AS工资,SUM(部门AS ”物资部“SELECTFROM工资液;WHERE部门编号二“0013”用DISTINCT消去重复的记录SELECT中的DISTINCT关键字,可以消去査询结果中的重复行。例如要字段出所有购买了商 的客户,可以用以下Select语句:SELECT DISTINCT 客户名称;FROM销售细节农注意,这里消去的重复记录是指SELECT 句中的所有字段值均相等的记录-当SQL遇到DISTINCT关键字时,即建立个中间衣。然后以SELECT f句中的所有字段建 立个唯索引,然后将索引用于中
9、间衣,并把索引中的记录放入查询结果中。这样就消去了重 复记录,但是当SELECT了句中的字段很多时,这过程会很慢。用WHERE子句说明选择记录的条件通常查询并不希望取出所有记录,而只是希望查出满足定条件的记录,要做到这点可以使用 WHERE子句。WHERE子句把满足条件的记录作为査询结果。选择条件在WHERE f句中可以包含多个选择条件,各条件间用AND或OR连接而构成较长的逻辑 农达式。连接条件当个査询涉及到多个农时,需要个特殊类型的WHERE条件,称为连接条件,连接条件建 立了 FROM了句中的两农间的对或对多的联系。SQL和宏SELECT /句中可以方便快捷地处理宏,在SELECT语句中
10、,宏替换只能替换-次,在以下查询 之前,需要由用户给出农名和相应的农达式Select *;FROM (UserTable);Where 公司代码二&Company_code宏还可以用在LIKE的模式匹配串:Select Company,Companyld:SaleName,Saleld ;From Company,SalesMan ;Where Company.Saleld = SalesMan.Saleld ;AND Description LIKE %TCL%以上査询中,用户输入字符串以便在备注字段(Description)中作匹配査找査询求出的是包含该 字符串的所有公司的住处SQL和字母
11、大小写SQL中是区分字母人小写的,为使查询结果有效,要注恿区分查询条件中的人小写一即衣中的内容 是人写的査询时必须将它们转换为人写-若衣中内容是大小写混杂的,则以下Select语句将难以 返回全部结果:Select Companyld ;From Company;Where Companyld = ACME以上査询只返回名为ACME的记录,对于Companyld为Acme的记录则査不到,因此安全的 方法是用UPPER()函数将所有字符串都转换为人写以下是正确的查询:Select Companyld ;From Company;Where UPPER(Companyld) = ACMESQL和索
12、弓|WHERE条件可用Rushmore和索引加速查找SQL可用任何类型的索引:结构化的.CDX ,外 部的.CDX及外部的.IDX-若要使SQL使用外部索引,必须在执行Select之前将其打开,如以下语句所示:Use Sales INDEX idx cdxfileSQL可以以同样的方式作为标准过程代码使用Rushmoe这时选择条件必须是可优化的,即选 择农达式必须与建立索引的农达式精确匹配用Order By子句对结果排序由于SQL优化器是按它认为的最佳方案去存取数据,因些査询结果中的记录顺序是动态不定的. 许多应用程序需要査询结果是按个或多个字段排好序的一为此可用ORDER BY 了句.ORD
13、ER BY /句可以包含Select /句中样多的字段例如:Select Company:State,Companyld ;From Client;Where State IN(NY,NJ,PA,CA);Order By State,Company在以上査询中,按所在州及公司名称顺序给出结果-缺省情况下,记录是升序排字段,也可用 DESCENDING来说明按降序排席当然也可以升降序并用,例如:Select Company:State,Companyld:SaleNo ;From Company,Sales ;Where Company.Saleld = SalesMan.Saleld ;AND
14、 State IN(NY,NJ,PA,CA);ORDER BY State,Company,SaleNo DESCENDING以上查询结果首先按州及公司名称升序排字段,然后按SaleNo降序排席.由于扌非序是对査询结果的排序,因此Order By 了句中的字段必须是Select f句中岀现的字段. 另外,Order By 了句允许用位标号给岀押序字段,这些位标号是指Select(句中出现的序号-例 如上个查询可以写为:Select CompanyState,CompanyldSaleNo ;From Company,Sales ;Where Company.Saleld = SalesMan.
15、Saleld ;AND State IN(NY,NJ,PA,CA);ORDER BY 2,1,3 DESCENDING当Select 了句包含了用户定义函数或FoxPro函数(如UPPER()和LEFT()时,用位标号来 给出排序字段显得十分方便-列函数在Select /句中,可以用SQL提供的五个列函数,如下衣所示:SQL的列函数函数 描述AVG(r段名)求出指定字段上的平均值,只适用于数值型的字段SUM(字段名)求岀指定字段上的和,只适用于数值型的字段MIN(字段名)求出指定字段上的最小值,字段可以是数值型,字符型或日期型 MAX(字段名)求出指定字段上的最人值,字段可以是数值型,字符型或日期型COUNT(字段名)求出
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1