Visual FoxPro 中的 SQL Select 查询
基本的 SQL Select
From 子句
isnull的用法    在 FROM 子句中指定要查询的表,若指定的表未打开,FoxPro 将自动打开指定的表,但在查询完成后,FoxPro并不自动关闭它所打开的表,若要在查询完成后关闭表,则必须以手动方式关闭它们。若在执行 SQL SELECT 时,FROM 子句中指定的表已经打开,则 FoxPro 以 USE …AGAIN 的方式重新打开此表。
Select 子句
SELECT 子句中指定要查询的结果字段,这些结果可以是以下基本元素:
    通配符 *
    表中的字段名
    FoxPro 函数
    SELECT 中可用的列函数
    用户自定义函数
    常数(常用于作为占位符)
以上各元素在SELECT子句中以逗号分开,例如:
SELECT 销售地区,销售部门,业务员 ;
  FROM 销售表
若 SELECT 子句中的字段名是唯一的,则不必在字段名前加别名修饰,SQL 能自动到这些字段。若字段名是非唯一的(即同一字段名出现在 FROM 子句中的两个或两个以上表中),FoxPro 返回以下错误信息:
    <字段>|<变量> 不唯一,必须加以限定
要纠正这一错误,用字段所在表的别名修饰该字段。
若在 SELECT 子句中加入了 FoxPro 函数,则意味着该语句不具备可移植性。
SQL 和用户自定义函数
FoxPro 支持在 Select 子句中使用用户定义函数。但是由于在其它系统中不支持用户定义函数。因此在开发可能移植的系统时不要使用用户自定义函数。
Select 子句中的关键字和其它子句
Select 子句中的通配符
1、*(星号)
只能使用在字段串列参数中。代表来源数据库中所有的字段。如果 select 是在二个以上的数据库中进行查询的,则要在号码前加上数据库别名。
* 是 SQL 中的三个通配符之一(其它两个是 ? 和 _ ,将在以后讨论),* 只能出现在 Select 子句中,通配符前可以用别名修饰,在此情况下表示要查询指定工作区中的全部字段.同时还可以给出其它字段名.如:
Select销售表.*,客户表.客户代码, 客户表.客户名称 ;
  FROM 销售表, 客户表 ;
  WHERE销售表.客户代码 =客户表.客户代码
2、%(百分号)
  只能使用在 Where 参数中,代表一连串任意字符类似于 DOS 下的 IT*.PRG 中的 “*”。通常与运算符 LIKE 搭配使用:
SELECT 客户名 FROM客户表 WHERE客户名 LIKE “成都%公司”
以上查询选择所有公司名以”成都”开始,以”公司”结尾的客户,如:成都东方公司、成都西部发展公司等。
3、_(下划线)
  也只能使用在 where 参数中,代表一个任意字符。与DOS 下的 DIR IT??.PRG中的”?”一样。例如 _a% 表示第二个字符为 a 的字串。通常与 LIKE 搭配使用:
SELECT 客户名 FROM客户表 WHERE客户名 LIKE “成都_公司”
以上查询选择类似于”成都分公司”, ”成都总公司”这样的公司名字。
  另一种情况是文字数据中正好包含有星号、百分号、下划线(例如:软件部__业务组),此时可使用关键字 ESCAPE 告诉 SQL 哪一个字符是常数字符而非通配符。例如:
  select company from customer
where company like"%\_%" escape "\"
    此时 escape 所指定字符(即\)后的那一个字段(此处为下划线_)将被视为常数字符而非通配符。
字段别名(AS)
FoxPro 提供了给 Select 子句中的字段起别名的方法(这种方法不同于 ANSI/ISO 标准):即可用 AS 子句给出 Select 子句中字段的别名,在多当需要直接浏览查询结果或查询结果中含有计算列时,该方法很有用处.例如:
SELECT “物资部” AS 部门,SUM(工资) AS 工资汇总 ;
FROM 工资表 ;
WHERE 部门编号 = “0013”
用 DISTINCT 消去重复的记录
SELECT 中的 DISTINCT 关键字,可以消去查询结果中的重复行。例如要字段出所有购买了商的客户,可以用以下 Select 语句:
SELECT DISTINCT客户名称 ;
FROM 销售细节表
注意,这里消去的重复记录是指 SELECT 子句中的所有字段值均相等的记录.
当 SQL 遇到 DISTINCT 关键字时,即建立一个中间表。然后以 SELECT 子句中的所有字段建立一个唯一索引,然后将索引用于中间表,并把索引中的记录放入查询结果中。这样就消去了重复记录,但是当 SELECT 子句中的字段很多时,这一过程会很慢。
用 WHERE 子句说明选择记录的条件
通常查询并不希望取出所有记录,而只是希望查出满足一定条件的记录,要做到这一点可以使用 WHERE 子句。WHERE 子句把满足条件的记录作为查询结果。
选择条件
在 WHERE 子句中可以包含多个选择条件,各条件间用 AND 或 OR 连接而构成较长的逻辑表达式。
连接条件
当一个查询涉及到多个表时,需要一个特殊类型的 WHERE 条件,称为连接条件,连接条件建立了 FROM 子句中的两表间的一对一或一对多的联系。
SQL 和宏
SELECT 子句中可以方便快捷地处理宏,在 SELECT 语句中,宏替换只能替换一次,在以下查询之前,需要由用户给出表名和相应的表达式
Select * ;
FROM (UserTable) ;
Where 公司代码  = &Company_code
宏还可以用在 LIKE 的模式匹配串:
Select Company,CompanyId,SaleName,SaleId ;
  From Company,SalesMan ;
  Where Company.SaleId = SalesMan.SaleId ;
  AND Description LIKE "%TCL%"
以上查询中,用户输入一字符串以便在备注字段(Description)中作匹配查.查询求出的是包含该字符串的所有公司的住处
SQL 和字母大小写
SQL 中是区分字母大小写的,为使查询结果有效,要注意区分查询条件中的大小写.即表中的内容是大写的查询时必须将它们转换为大写.若表中内容是大小写混杂的,则以下 Select 语句将难以返回全部结果:
Select CompanyId ;
  From Company ;
  Where CompanyId = "ACME"
以上查询只返回名为 ACME 的记录,对于 CompanyId 为 Acme 的记录则查不到,因此安全的方法是用 UPPER() 函数将所有字符串都转换为大写.以下是正确的查询:
Select CompanyId ;
  From Company ;
  Where UPPER(CompanyId) = "ACME"
SQL 和索引
WHERE 条件可用 Rushmore 和索引加速查.SQL 可用任何类型的索引:结构化的 .CDX ,外部的 .CDX 及外部的 .IDX.若要使 SQL 使用外部索引,必须在执行 Select 之前将其打开,如以下语句所示:
Use Sales INDEX idxfile,external cdxfile
SQL 可以以同样的方式作为标准过程代码使用 Rushmore.这时选择条件必须是可优化的,即选择表达式必须与建立索引的表达式精确匹配.
用 Order By 子句对结果排序
由于 SQL 优化器是按它认为的最佳方案去存取数据,因些查询结果中的记录顺序是动态不定的.许多应用程序需要查询结果是按一个或多个字段排好序的.为此可用 ORDER BY 子句.
ORDER BY 子句可以包含 Select 子句中一样多的字段.例如:
Select Company,State,CompanyId ;
  From Client ;
  Where State IN("NY","NJ","PA","CA") ;
  Order By State,Company

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。