SELECT – S Q L 命 令

SELECT – S Q L 命 令 - 图1从一个或多个表中检索数据

语 法

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]]

[ Alias.] Select_Item [AS Column_Nam e ]

[, [ Alias.] Select_Item [AS Column_Nam e ] ...] FROM [FORCE]

[ DatabaseNam e!] Table [[AS] Local_Alias ]

[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN

DatabaseNam e !]Table [[AS] Local_Alias ] [ON JoinCondition … ]

[[INTO Destination ]

| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT]

| TO SCREEN]]

[PREFERENCE PreferenceNam e] [NOCONSOLE]

[PLAIN] [NOWAIT]

[ W H E R E JoinCondition [AND JoinCondition ...]

[AND | OR FilterCondition [AND | OR FilterCondition ...]]] [GROUP BY GroupColumn [, GroupColumn ...]]

[HAVING FilterCondition ]

[UNION [ALL] SELECTCommand ]

[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]

参 数 描 述

SELECT

SELECT – S Q L 命 令 - 图2SELECT – S Q L 命 令 - 图3在 SELECT 子 句 中 指 定 在 查 询 结 果 中 包 含 的 字 段 常 量 和 表 达 式

ALL

SELECT – S Q L 命 令 - 图4SELECT – S Q L 命 令 - 图5查 询 结 果 中 包 含 所 有 行 ( 包 括 重 复 值 ) ALL 是 默 认 设 置

DISTINCT

SELECT – S Q L 命 令 - 图6在 查 询 结 果 中 剔 除 重 复 的 行

SELECT – S Q L 命 令 - 图7注 意 每 一 个 SELECT 子 句 只 能 使 用 一 次 DISTINCT

TOP nExpr [PERCENT]

SELECT – S Q L 命 令 - 图8SELECT – S Q L 命 令 - 图9在 符 合 查 询 条 件 的 所 有 记 录 中 选 取 指 定 数 量 或 百 分 比 的 记 录 TOP 子 句

SELECT – S Q L 命 令 - 图10SELECT – S Q L 命 令 - 图11SELECT – S Q L 命 令 - 图12必 须 与 ORDER B Y 子 句 同 时 使 用 ORDER BY 子 句 指 定 查 询 结 果 中 包 含的 列 上 由 Top 字 句 决 定 的 行 数 TOP 子 句 根 据 此 排 序 选 定 最 开 始 的 nExpr 个 或 nExpr % 的 记 录

SELECT – S Q L 命 令 - 图13SELECT – S Q L 命 令 - 图14SELECT – S Q L 命 令 - 图15SELECT – S Q L 命 令 - 图16SELECT – S Q L 命 令 - 图17SELECT – S Q L 命 令 - 图18SELECT – S Q L 命 令 - 图19SELECT – S Q L 命 令 - 图20SELECT – S Q L 命 令 - 图21SELECT – S Q L 命 令 - 图22您可以指定选取 1 到 32767 个记录 使用 ORDER BY 子句指定的字段进行排序 会产生并列的情况 比如 可能有多个记录 它们在选定的字段上相同 所以 如果您指定 nExpr 为 10 在查询结果中可能多于 10 个记录 因为可能有几个记录位置并列

SELECT – S Q L 命 令 - 图23SELECT – S Q L 命 令 - 图24SELECT – S Q L 命 令 - 图25SELECT – S Q L 命 令 - 图26SELECT – S Q L 命 令 - 图27如果包含 PERCENT 关键字指定查询结果中的记录数 得到记录数的可能是小数 这时进行取整 包含 PERCENT 关键字时 nExpr 的范围是 0.01 到 99.99

Alias.

SELECT – S Q L 命 令 - 图28SELECT – S Q L 命 令 - 图29SELECT – S Q L 命 令 - 图30SELECT – S Q L 命 令 - 图31SELECT – S Q L 命 令 - 图32限 定 匹 配 项 的 名 称 Select_Item 指 定 的 每 一 项 在 查 询 结 果 中 都 生 成 一 列如 果 多 个 项 具 有 相 同 的 名 称 则 应 在 这 些 项 名 前 加 上 表 的 别 名 和 一 个 句 点以 防 止 出 现 重 复 的 列

SELECT – S Q L 命 令 - 图33SELECT – S Q L 命 令 - 图34Select_Item 指 定 包 括 在 查 询 结 果 中 的 项 一 个 项 可 以 是

SELECT – S Q L 命 令 - 图35FROM 子句所包含的表中的字段名称

SELECT – S Q L 命 令 - 图36SELECT – S Q L 命 令 - 图37SELECT – S Q L 命 令 - 图38SELECT – S Q L 命 令 - 图39一个常量 查询结果中每一行都出现这个常量值一个表达式 可以是用户自定义函数名

AS Column_Name

SELECT – S Q L 命 令 - 图40SELECT – S Q L 命 令 - 图41SELECT – S Q L 命 令 - 图42SELECT – S Q L 命 令 - 图43指 定 查 询 结 果 中 列 的 标 题 当 Select_Item 是 一 个 表 达 式 或 一 个 字 段 函 数 时 如 果 要 给 此 列 取 一 个 有 含 义 的 名 称 一 般 可 以 使 用 这 个 子 句 Column_Name

SELECT – S Q L 命 令 - 图44SELECT – S Q L 命 令 - 图45SELECT – S Q L 命 令 - 图46可 以 是 一 个 表 达 式 但 不 能 包 含 那 些 表 字 段 名 称 中 不 允 许 出 现 的 字 符 如 空格 SELECT – S Q L 命 令 - 图47

FROM

SELECT – S Q L 命 令 - 图48SELECT – S Q L 命 令 - 图49SELECT – S Q L 命 令 - 图50SELECT – S Q L 命 令 - 图51SELECT – S Q L 命 令 - 图52SELECT – S Q L 命 令 - 图53SELECT – S Q L 命 令 - 图54列 出 所 有 从 中 检 索 数 据 的 表 如 果 没 有 打 开 表 Visual FoxPro 显 示 打 开对 话 框 以 便 指 定 文 件 位 置 表 打 开 以 后 直 到 查 询 结 束 时 才 关 闭

SELECT – S Q L 命 令 - 图55SELECT – S Q L 命 令 - 图56SELECT – S Q L 命 令 - 图57SELECT – S Q L 命 令 - 图58SELECT – S Q L 命 令 - 图59SELECT – S Q L 命 令 - 图60SELECT – S Q L 命 令 - 图61如 果 您 包 含 FORCE 关 键 字 Visual FoxPro 在 建 立 查 询 时 会 严 格 按 照 您 在FROM 子句中声明的顺序 连 接 表 若 不 包 含 FORCE 关 键 字 Visual FoxPro 会试 图 对 查 询 进 行 优 化 使 用 FORCE 子 句 避 免 了 优 化 过 程 可 能 加 快 查 询 执行的速度

DatabaseName!

SELECT – S Q L 命 令 - 图62SELECT – S Q L 命 令 - 图63SELECT – S Q L 命 令 - 图64SELECT – S Q L 命 令 - 图65SELECT – S Q L 命 令 - 图66SELECT – S Q L 命 令 - 图67SELECT – S Q L 命 令 - 图68当 包 含 表 的 数 据 库 不 是 当 前 数 据 库 时 DatabaseNam e! 指 定 这 个 数 据 库 的 名称 如 果 数 据 库 不 是 当 前 数 据 库 就 必 须 指 定 包 含 表 的 数 据 库 名 称 应 在 数据 库 名 称 之 后 表 名 之 前 加 上 感 叹 号 ! 分 隔 符

[AS] Local_Alias

SELECT – S Q L 命 令 - 图69SELECT – S Q L 命 令 - 图70SELECT – S Q L 命 令 - 图71SELECT – S Q L 命 令 - 图72SELECT – S Q L 命 令 - 图73SELECT – S Q L 命 令 - 图74SELECT – S Q L 命 令 - 图75Table 中 的 表 指 定 一 个 临 时 名 称 如 果 指 定 了 本 地 别 名 那 么 在 整 个SELECT 语 句 中 必 须 都 用 这 个 别 名 代 替 表 名 本 地 别 名 不 影 响 V isual FoxPro 环 境 INNER JOIN 只 有 在 其 他 表 中 包 含 对 应 记 录 一 个 或 多 个 的 记 录 才出 现 在 查 询 结 果 中

SELECT – S Q L 命 令 - 图76SELECT – S Q L 命 令 - 图77SELECT – S Q L 命 令 - 图78SELECT – S Q L 命 令 - 图79SELECT – S Q L 命 令 - 图80LEFT [OUTER] JOIN 在 查 询 结 果 中 包 含 JOIN 左 侧 表 中 的 所 有 记 录 以 及JOIN 右 侧 表 中 匹 配 的 记 录 OUTER 关 键 字 可 被 省 略 包 含 OUTER 强 调这 是 一 个 外 连 接 (outer join)

SELECT – S Q L 命 令 - 图81SELECT – S Q L 命 令 - 图82SELECT – S Q L 命 令 - 图83SELECT – S Q L 命 令 - 图84SELECT – S Q L 命 令 - 图85RIGHT [OUTER] JOIN 在 查 询 结 果 中 包 含 JOIN 右 侧 表 中 的 所 有 记 录 以及 JOIN 左 侧 表 中 匹 配 的 记 录 OUTER 关 键 字 可 被 省 略 包 含 OUTER 强调 这 是 一 个 外 连 接 接 (outer join)

SELECT – S Q L 命 令 - 图86SELECT – S Q L 命 令 - 图87SELECT – S Q L 命 令 - 图88SELECT – S Q L 命 令 - 图89FULL [OUTER] JOIN 在 查 询 结 果 中 包 含 JOIN 两 侧 所 有 的 匹 配 记 录 和 不匹 配 的 记 录 包 含 OUTER 强 调 这 是 一 个 外 连 接 (outer join)

SELECT – S Q L 命 令 - 图90O N JoinCondition 指 定 连 接 条 件

INTO Destination

SELECT – S Q L 命 令 - 图91SELECT – S Q L 命 令 - 图92SELECT – S Q L 命 令 - 图93SELECT – S Q L 命 令 - 图94SELECT – S Q L 命 令 - 图95SELECT – S Q L 命 令 - 图96SELECT – S Q L 命 令 - 图97SELECT – S Q L 命 令 - 图98指定在何处保存查询结果 如果在同一个查询中同时包括了 INTO 子句和 TO 子句则 TO 子句不起作用 如果没有包括 INTO 子句 查询结果显示在 浏览 窗口中也可以用 TO 将查询结果定向输出到打印机或文件

SELECT – S Q L 命 令 - 图99Destination 可以是下列子句之一

SELECT – S Q L 命 令 - 图100SELECT – S Q L 命 令 - 图101SELECT – S Q L 命 令 - 图102SELECT – S Q L 命 令 - 图103ARRAY ArrayName 将查询结果保存到变量数组中 如果查询结果中不包含任何记录则不创建这个数组

SELECT – S Q L 命 令 - 图104SELECT – S Q L 命 令 - 图105SELECT – S Q L 命 令 - 图106SELECT – S Q L 命 令 - 图107SELECT – S Q L 命 令 - 图108SELECT – S Q L 命 令 - 图109SELECT – S Q L 命 令 - 图110SELECT – S Q L 命 令 - 图111SELECT – S Q L 命 令 - 图112CURSOR CursorName 将 查 询 结 果 保 存 到 临 时 表 中 如 果 指 定 了 一 个 已 打开 表 的 名 称 则 Visual FoxPro 产 生 错 误 信 息 执 行 完 SELECT 语 句 后临 时 表 仍 然 保 持 打 开 活 动 但 只 读 一 旦 关 闭 临 时 表 则 自 动 删 除 它 临时 表 作 为 SORTWORK 指 定 驱 动 器 上 的 一 个 临 时 文 件 存 在

SELECT – S Q L 命 令 - 图113包 含 NOFILTER 是 为 了 创 建 一 个 能 用 在 后 来 的 询 问 中 的 指 针 在

SELECT – S Q L 命 令 - 图114Visual FoxPro 以 前 的 版 本 需 要 一 个 额 外 的 常 量 或 表 达 式 作 为 过 滤 器 去 创 建一 个 能 用 在 后 来 的 询 问 中 的 指 针

SELECT *, .T. FROM customers INTD CURSOR myquery

SELECT – S Q L 命 令 - 图115SELECT – S Q L 命 令 - 图116SELECT – S Q L 命 令 - 图117包含 NOFILTER 能够减少询问的发生是因为临时表是建立在磁盘上的 当临时表被删除 指针就要被关闭

SELECT – S Q L 命 令 - 图118SELECT – S Q L 命 令 - 图119SELECT – S Q L 命 令 - 图120SELECT – S Q L 命 令 - 图121SELECT – S Q L 命 令 - 图122SELECT – S Q L 命 令 - 图123SELECT – S Q L 命 令 - 图124SELECT – S Q L 命 令 - 图125SELECT – S Q L 命 令 - 图126DBF TableName | TABLE TableName 将查询结果保存到一个表中 如果指定的表已经打开 并 且 SET SAFETY 设置为 OFF 则 Visual FoxPro 在不给出警告的情况下改写该表 如果没有指定扩展名 Visual FoxPro 指定表的扩展名是 .DBF SELECT 语句执行结束后 表仍然保持打开活动状态

SELECT – S Q L 命 令 - 图127SELECT – S Q L 命 令 - 图128包 含 DATABASE DatabaseName 以 指 定 添 加 了 表 的 数 据 库 包 含 NAME LongTableName 可以为该表命一个最多可包括 128 个字符的并且可以在数据库中代替短名字的长名

TO FILE FileName

SELECT – S Q L 命 令 - 图129SELECT – S Q L 命 令 - 图130如 果 命 令 中 包 括 了 TO 子 句 但 没 有 包 括 INTO 子 句 则 查 询 结 果 定 向 输 出 到 名 为

SELECT – S Q L 命 令 - 图131SELECT – S Q L 命 令 - 图132FileName 的 ASCII 码文件 打印机或 Visual FoxPro 主窗口

SELECT – S Q L 命 令 - 图133ADDITIVE 把查询结果定向输出到由 TO FILE FileNam e 指 定 的 文 本 文 件 的 现 存 目录 上

SELECT – S Q L 命 令 - 图134SELECT – S Q L 命 令 - 图135SELECT – S Q L 命 令 - 图136TO PRINTER [PROMPT] 使 查 询 结 果 定 向 输 出 到 打 印 机 在 打 印 开 始 之 前 使 用 可 选 的 PROMPT 子 句 显 示 一 个 对 话 框 您 可 以 根 据 当 前 安 装 的 打 印 机

SELECT – S Q L 命 令 - 图137SELECT – S Q L 命 令 - 图138驱 动 程 序 调 整 打 印 机 的 设 置 将 PROMPT 子 句 放 置 在 紧 跟 TO PRINTER 之后

SELECT – S Q L 命 令 - 图139TO SCREEN 使查询结果定向输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中

PREFERENCE PreferenceName

SELECT – S Q L 命 令 - 图140SELECT – S Q L 命 令 - 图141SELECT – S Q L 命 令 - 图142SELECT – S Q L 命 令 - 图143如 果 查 询 结 果 送 往 浏 览 窗 口 就 可 以 使 用 PREFERENCE 保 存 浏 览 窗 口 的 属 性 和 选 项以 备 后 用 PREFERENCE 把 特 征 属 性 或 参 数 选 项 长 期 保 存 在 FOXUSER 的 资 源 文 件中 任何时侯都可以对它们进行检索

SELECT – S Q L 命 令 - 图144SELECT – S Q L 命 令 - 图145SELECT – S Q L 命 令 - 图146SELECT – S Q L 命 令 - 图147第一次执行有 PREFERENCE PreferenceName 的 SELECT 命令时创建参数选项 以后执行有相同参数选项名的 SELECT 命令时便将浏览窗口恢复到原来的参数选项状态 当浏览窗口关闭时 更新参数选项

SELECT – S Q L 命 令 - 图148SELECT – S Q L 命 令 - 图149SELECT – S Q L 命 令 - 图150SELECT – S Q L 命 令 - 图151SELECT – S Q L 命 令 - 图152SELECT – S Q L 命 令 - 图153如果您按下 CTRL+Q+W 键退出 浏览 窗口 您 对 浏览 窗口所做的更改不会保存到资源文件中

NOCONSOLE

SELECT – S Q L 命 令 - 图154SELECT – S Q L 命 令 - 图155不 显 示 送 到 文 件 打 印 机 或 Visual FoxPro 主 窗 口 的 查 询 结 果

PLAIN

SELECT – S Q L 命 令 - 图156防 止 列 标 题 出 现 在 显 示 的 查 询 结 果 中 不 管 有 无 TO 子 句 都 可 使 用 PLAIN

SELECT – S Q L 命 令 - 图157SELECT – S Q L 命 令 - 图158SELECT – S Q L 命 令 - 图159子 句 如 果 SELECT 语 句 中 包 括 INTO 子 句 则 忽 略 PLAIN 子 句

NOWAIT

SELECT – S Q L 命 令 - 图160SELECT – S Q L 命 令 - 图161SELECT – S Q L 命 令 - 图162打开浏览窗口并将查询结果输出到这个窗口后继续程序的执行 程序并不等待关闭浏览窗口 而是立即执行紧接在 SELECT 语句后面的程序行

SELECT – S Q L 命 令 - 图163SELECT – S Q L 命 令 - 图164SELECT – S Q L 命 令 - 图165SELECT – S Q L 命 令 - 图166SELECT – S Q L 命 令 - 图167SELECT – S Q L 命 令 - 图168SELECT – S Q L 命 令 - 图169SELECT – S Q L 命 令 - 图170SELECT – S Q L 命 令 - 图171SELECT – S Q L 命 令 - 图172SELECT – S Q L 命 令 - 图173SELECT 命令中包括 TO SCREEN 可以把查询结果定向输出到 Visual FoxPro 主窗口或用户自定义窗口 如果显示时 Visual FoxPro 主窗口或用户自定义窗口中写满了一 屏 就暂停输出 按任意键可以查看查询结果后面的内容 但是 如果命令中包括了NOWAIT 子句 显示查询结果时就不会暂停 等待按键 而是在 Visual FoxPro 主窗口或用户自定义窗口中连续滚过所有内容 如果命令中包含有 INTO 子句 忽略NOWAIT 子句

W H E R E

SELECT – S Q L 命 令 - 图174SELECT – S Q L 命 令 - 图175SELECT – S Q L 命 令 - 图176通 知 Visual FoxPro 在 查 询 结 果 中 仅 包 含 一 定 数 目 的 记 录 如 果 要 从 多 个 表中 检 索 数 据 W H E R E 子 句 是 必 需 的

JoinCondition

SELECT – S Q L 命 令 - 图177SELECT – S Q L 命 令 - 图178SELECT – S Q L 命 令 - 图179SELECT – S Q L 命 令 - 图180指 定 一 个 字 段 该 字 段 连 接 F R O M 子 句 中 的 表 如 果 查 询 中 包 括 不 止 一 个 表就 应 该 为 第 一 个 表 后 的 每 一 个 表 指 定 连 接 条 件

SELECT – S Q L 命 令 - 图181SELECT – S Q L 命 令 - 图182连 接 多 个 查 询 条 件 必 须 使 用 操 作 符 A N D 每 个 连 接 条 件 都 有 下 面 的 形 式

FieldName1 Comparison FieldName2

SELECT – S Q L 命 令 - 图183SELECT – S Q L 命 令 - 图184其 中 FieldName1 是 一 个 表 中 的 字 段 名 FieldName2 是 另 一 表 中 的 字 段 名

SELECT – S Q L 命 令 - 图185Comparison 是 下 表 中 列 出 的 某 一 操 作 符

操 作 符 比 较 关 系

= 相等

== 完全相等

LIKE SQL LIKE

<> , !=, # 不相等

> 大于

>= 大于等于

< 小于

<= 小于等于

SELECT – S Q L 命 令 - 图186SELECT – S Q L 命 令 - 图187SELECT – S Q L 命 令 - 图188SELECT – S Q L 命 令 - 图189SELECT – S Q L 命 令 - 图190SELECT – S Q L 命 令 - 图191SELECT – S Q L 命 令 - 图192SELECT – S Q L 命 令 - 图193对字符串使用 = 操作符时 所得结果与 SET ANSI 的设置有关 当 SET ANSI 设 置为 OFF 时 Visual FoxPro 比较字符串的方式与 Xbase 的用户相同 当 SET ANSI 的设置为 ON 时 Visual FoxPro 比较字符串时遵守 ANSI 标准 有 关 Visual FoxPro 字符比较方法的详细内容 请参阅 SET ANSI 和 SET EXACT

SELECT – S Q L 命 令 - 图194SELECT – S Q L 命 令 - 图195WHERE 子句支持 ESCAPE 操作符 允许执行对包含有 SELECT – SQL % 和通配符的数据的有意义的查询

SELECT – S Q L 命 令 - 图196SELECT – S Q L 命 令 - 图197SELECT – S Q L 命 令 - 图198SELECT – S Q L 命 令 - 图199ESCAPE 子句允许指定一个可以看作文字字符的 SELECT – SQL 通配符 ESCAPE 子句允许指定一个字符 一旦它被放到通配符字符之前 就表示这个通配符被看作一个文字字符

FilterCondition

SELECT – S Q L 命 令 - 图200SELECT – S Q L 命 令 - 图201SELECT – S Q L 命 令 - 图202SELECT – S Q L 命 令 - 图203SELECT – S Q L 命 令 - 图204SELECT – S Q L 命 令 - 图205SELECT – S Q L 命 令 - 图206指 定 将 包 含 在 查 询 结 果 中 记 录 必 须 符 合 的 条 件 使 用 A N D 或 OR 操 作 符您 可 以 包 含 随 意 数 目 的 过 滤 条 件 您 还 可 以 使 用 NOT 操 作 符 将 逻 辑 表 达 式的 值 取 反 或 使 用 EMPTY 函 数 以 检 查 空 字 段

SELECT – S Q L 命 令 - 图207FilterCondition 可以是下面示例中的任何一种形式

示 例 1

事 例 1 显 示 FieldName1 Comparison FieldName 窗 体 中 的 Fliter Condition

customer.cust_id = orders.cust_id

示 例 2

事 例 1 显 示 FieldName Comparison Expression 窗 体 中 的 Fliter Condition

payments.amount >= 1000

示 例 3

事 例 3 显 示 FieldName Comparison ALL ( Subquery ) 窗 体 中 的 Fliter Condition

SELECT – S Q L 命 令 - 图208SELECT – S Q L 命 令 - 图209SELECT – S Q L 命 令 - 图210当筛选条件包括 ALL 时 只有指定字段满足所有子查询结果后 它所在的记录才能添加到查询结果中

company < ALL ;

(SELECT company FROM customer WHERE country = “ UK")

示 例 4

事 例 4 显 示 FieldName Comparison ANY | SOME ( Subquery ) 窗 体 中 的 Fliter Condition

SELECT – S Q L 命 令 - 图211SELECT – S Q L 命 令 - 图212当筛选条件包含 ANY 或 SOME 时 字段必须至少满足一个由子查询产生的值所决定的比较条件

company < ANY ;

(SELECT company FROM customer WHERE country = “ UK")

示 例 5

事 例 5 显 示 FieldName [NOT] BETWEEN Start_Range AND End_Range 窗 体 中的 Fliter Condition

customer.postalcode BETWEEN 90000 AND 99999

SELECT – S Q L 命 令 - 图213上 面 的 示 例 检 查 字 段 中 的 值 是 否 在 指 定 范 围 内

示 例 6

事 例 6 显 示 [NOT] EXISTS ( Subquery ) 窗 体 中 的 Fliter Condition

EXISTS ;

(SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)

SELECT – S Q L 命 令 - 图214SELECT – S Q L 命 令 - 图215SELECT – S Q L 命 令 - 图216SELECT – S Q L 命 令 - 图217SELECT – S Q L 命 令 - 图218SELECT – S Q L 命 令 - 图219上 面 的 示 例 检 查 是 否 至 少 有 一 行 满 足 子 查 询 中 的 条 件 当 筛 选 条 件 包 括 EXISTS 时只要子查询不为空集 筛选的条件就为 真 (.T.)

示 例 7

事 例 7 显 示 FieldName [NOT] IN Value_Set 窗 体 中 的 Fliter Condition

customer.postalcode NOT IN ("98052 ” ,” 98072 ” , ” 98034")

SELECT – S Q L 命 令 - 图220当 筛 选 条 件 中 包 含 IN 时 把 字 段 所 在 记 录 添 加 到 查 询 结 果 中 的 条 件 是 字 段 必

SELECT – S Q L 命 令 - 图221须 包 含 值 集 合 的 一 个 元 素

示 例 8

事 例 8 显 示 FieldName [NOT] IN ( Subquery ) 窗 体 中 的 Fliter Condition

customer.cust_id IN ;

(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")

SELECT – S Q L 命 令 - 图222SELECT – S Q L 命 令 - 图223SELECT – S Q L 命 令 - 图224这 里 记 录 包 含 在 查 询 结 果 中 的 条 件 是 字 段 必 须 包 含 一 个 子 查 询 的 返 回 值

示 例 9

事 例 9 显 示 FieldName [NOT] LIKE cExpression 窗 体 中 的 Fliter Condition

customer.country NOT LIKE “ UK ”

SELECT – S Q L 命 令 - 图225SELECT – S Q L 命 令 - 图226SELECT – S Q L 命 令 - 图227这个筛选条件查找每个与字符串表达式相匹配的字段 在字符串表达式中可以使用百分号 (%) 和下划线 ( _ ) 通配符 下划线表示字符串中一个任意字符

GROUP BY GroupColumn [, GroupColumn ...]

SELECT – S Q L 命 令 - 图228SELECT – S Q L 命 令 - 图229SELECT – S Q L 命 令 - 图230SELECT – S Q L 命 令 - 图231SELECT – S Q L 命 令 - 图232SELECT – S Q L 命 令 - 图233按 列 的 值 对 查 询 结 果 的 行 进 行 分 组 GroupColumn 可 以 是 常 规 的 表 字 段 名也 可 以 是 一 个 包 含 SQL 字 段 函 数 的 字 段 名 还 可 以 是 一 个 数 值 表 达 式 指定 查 询 结 果 表 中 的 列 位 置 最 左 边 的 列 编 号 为 1 SELECT – S Q L 命 令 - 图234

HAVING FilterCondition

SELECT – S Q L 命 令 - 图235SELECT – S Q L 命 令 - 图236SELECT – S Q L 命 令 - 图237SELECT – S Q L 命 令 - 图238SELECT – S Q L 命 令 - 图239指 定 包 括 在 查 询 结 果 中 的 组 必 须 满 足 的 筛 选 条 件 H AVING 应 该 同 GROUP BY 一 起 使 用 它 能 包 含 数 量 不 限 的 筛 选 条 件 筛 选 条 件 用 A N D 或 OR 连 接 还可 以 使 用 NOT 来 对 逻 辑 表 达 式 求 反

SELECT – S Q L 命 令 - 图240FilterCondition 不 能 包 括 子 查 询

SELECT – S Q L 命 令 - 图241使 用 HAVING 子 句 的 命 令 如 果 没 有 使 用 GROUP BY 子 句 则 它 的 作 用 与

SELECT – S Q L 命 令 - 图242SELECT – S Q L 命 令 - 图243SELECT – S Q L 命 令 - 图244SELECT – S Q L 命 令 - 图245W H E R E 子 句 相 同 可 以 在 HAVING 子 句 中 使 用 本 地 别 名 和 字 段 函 数 如 果H AVING 子 句 不 包 含 字 段 函 数 的 话 使 用 W H E R E 子 句 可 以 获 得 较 快 的 速 度[UNION [ALL] SELECT 命 令 ]

SELECT – S Q L 命 令 - 图246SELECT – S Q L 命 令 - 图247SELECT – S Q L 命 令 - 图248SELECT – S Q L 命 令 - 图249SELECT – S Q L 命 令 - 图250把 一 个 SELECT 语 句 的 最 后 查 询 结 果 同 另 一 个 SELECT 语 句 最 后 查 询 结 果 组合 起 来 默 认 情 况 下 UNION 检 查 组 合 的 结 果 并 排 除 重 复 的 行 要 组 合 多 个UNION 子 句 可 使 用 括 号

SELECT – S Q L 命 令 - 图251ALL 防 止 UNION 删 除 组 合 结 果 中 重 复 的 行

SELECT – S Q L 命 令 - 图252UNION 子 句 遵 守 下 列 规 则

SELECT – S Q L 命 令 - 图253不 能 使 用 UNION 来 组 合 子 查 询

SELECT – S Q L 命 令 - 图254两 个 SELECT 命 令 的 查 询 结 果 中 的 列 数 必 须 相 同

SELECT – S Q L 命 令 - 图255两 个 SELECT 查 询 结 果 中 的 对 应 列 必 须 有 相 同 的 数 据 类 型 和 宽 度

SELECT – S Q L 命 令 - 图256SELECT – S Q L 命 令 - 图257SELECT – S Q L 命 令 - 图258SELECT – S Q L 命 令 - 图259只 有 最 后 的 SELECT 中 可 以 包 含 ORDER BY 子 句 而 且 必 须 按 编 号 指 出 所输 出 的 列 如 果 包 含 了 一 个 ORDER B Y 子 句 它 将 影 响 整 个 结 果

ORDER BY Order_Item

SELECT – S Q L 命 令 - 图260SELECT – S Q L 命 令 - 图261根 据 列 的 数 据 对 查 询 结 果 进 行 排 序 每 个 O rder_Item 都 必 须 对 应 查 询 结 果 中的 一 列

SELECT – S Q L 命 令 - 图262它 可 以 是 下 列 之 一

SELECT – S Q L 命 令 - 图263SELECT – S Q L 命 令 - 图264SELECT – S Q L 命 令 - 图265SELECT – S Q L 命 令 - 图266F R O M 子 句 中 表 的 字 段 同 时 也 是 SELECT 主 句 不 在 子 查 询 中 的 一 个 选择 项

SELECT – S Q L 命 令 - 图267SELECT – S Q L 命 令 - 图268一 个 数 值 表 达 式 表 示 查 询 结 果 中 列 的 位 置 最 左 边 列 编 号 为 1 SELECT – S Q L 命 令 - 图269

SELECT – S Q L 命 令 - 图270SELECT – S Q L 命 令 - 图271ASC 指 定 查 询 结 果 根 据 排 序 项 以 升 序 排 列 它 是 ORDER B Y 的 默 认 选 项

SELECT – S Q L 命 令 - 图272DESC 指 定 查 询 结 果 以 降 序 排 列

SELECT – S Q L 命 令 - 图273SELECT – S Q L 命 令 - 图274如果不使用 ORDER BY 指定查询结果的排列顺序 则查询结果不排序

说 明

SELECT – S Q L 命 令 - 图275SELECT – S Q L 命 令 - 图276SELECT – S Q L 命 令 - 图277SELECT – S Q L 命 令 - 图278SELECT – S Q L 命 令 - 图279SELECT – S Q L 命 令 - 图280同其他 Visual FoxPro 命令一样 SELECT 是 Visual FoxPro 的一个内部 SQL 命令当使用 SELECT 进行查询时 Visual FoxPro 先解释查询要求 然后从表中查询并检索指定数据 可以在下列环境内建立 SELECT 查询

  • 命 令 窗 口

  • SELECT – S Q L 命 令 - 图281SELECT – S Q L 命 令 - 图282

    个 Visual FoxPro 程 序 与 使 用 其 他 Visual FoxPro 命 令 一 样

  • 查 询 设 计 器

SELECT – S Q L 命 令 - 图283SELECT – S Q L 命 令 - 图284SELECT – S Q L 命 令 - 图285如果执行了 SET TALK ON 命令后再执行 SELECT 命令 则 Visual FoxPro 显示出执行查询所用的时间和查询结果中记录的数目 _TALLY 包含了查询结果中记录的数目

SELECT – S Q L 命 令 - 图286SET FILTER 设置的筛选条件对 SELECT 命令不起作用

SELECT – S Q L 命 令 - 图287SELECT – S Q L 命 令 - 图288SELECT – S Q L 命 令 - 图289SELECT – S Q L 命 令 - 图290SELECT – S Q L 命 令 - 图291下面部分将多次提到子查询 (subquery) 子查询是指在 SELECT 命令中包含的SELECT 命令 在 SELECT 命令的 WHERE 子句中可以包含最多两个平级的 非嵌套 的子查询 子查询中可以有多个 连 接条件 (join conditions)

SELECT – S Q L 命 令 - 图292SELECT – S Q L 命 令 - 图293创建查询输出时 列的命名遵循如下规则

  • SELECT – S Q L 命 令 - 图294SELECT – S Q L 命 令 - 图295

    果 选 择 项 是 具 有 唯 一 名 称 的 字 段 则 用 字 段 名 作 为 输 出 列 名

  • SELECT – S Q L 命 令 - 图296SELECT – S Q L 命 令 - 图297

    果 多 个 选 择 项 具 有 相 同 名 称 例 如 如 果 名 为 Customer 的 表 有 一 个

SELECT – S Q L 命 令 - 图298SELECT – S Q L 命 令 - 图299STREET 字 段 而 名 为 Employees 的 表 也 有 一 个 STREET 字 段 则 输 出

SELECT – S Q L 命 令 - 图300SELECT – S Q L 命 令 - 图301SELECT – S Q L 命 令 - 图302SELECT – S Q L 命 令 - 图303SELECT – S Q L 命 令 - 图304SELECT – S Q L 命 令 - 图305列 命 名 为 Extension _A 和 Extension _B STREET_A 和 STREET_B SELECT – S Q L 命 令 - 图306 如果 选 择 项 名 称 有 10 字 符 长 可 以 将 名 称 截 短 后 再 加 下 划 线 和 字 母 例 如DEPARTMENT 变 为 DEPARTME_A

  • SELECT – S Q L 命 令 - 图307SELECT – S Q L 命 令 - 图308

    果 选 择 项 是 表 达 式 它 的 输 出 列 命 名 为 EXP_A 其 他 表 达 式 分 别 命 名 为

SELECT – S Q L 命 令 - 图309SELECT – S Q L 命 令 - 图310SELECT – S Q L 命 令 - 图311EXP_B EXP_C 依 此 类 推

  • SELECT – S Q L 命 令 - 图312SELECT – S Q L 命 令 - 图313SELECT – S Q L 命 令 - 图314

    果 选 择 项 包 含 诸 如 COUNT 这 样 的 字 段 函 数 则 输 出 列 命 名 为

SELECT – S Q L 命 令 - 图315SELECT – S Q L 命 令 - 图316SELECT – S Q L 命 令 - 图317SELECT – S Q L 命 令 - 图318CNT_A 如 果 另 一 个 选 择 项 包 含 SUM SELECT – S Q L 命 令 - 图319 它 的 输 出 列 命 名 为 SUM_B

SELECT – S Q L 命 令 - 图320SELECT 子 句 中 的 用 户 自 定 义 函 数

SELECT – S Q L 命 令 - 图321SELECT – S Q L 命 令 - 图322在 SELECT 子句中使用用户自定义函数有明显优点 但使用时应考虑以下限制

  • SELECT – S Q L 命 令 - 图323SELECT – S Q L 命 令 - 图324SELECT – S Q L 命 令 - 图325SELECT – S Q L 命 令 - 图326

    SELECT 子 句 的 运 行 速 度 会 受 用 户 自 定 义 函 数 执 行 速 度 的 影 响 因 此 如果 使 用 户 自 定 义 函 数 的 操 作 量 很 大 则 这 些 函数 的 功 能 最 好 调 用 C 语 言 或汇编 语 言 编 写 的 API 或 用 户 自 定 义 函 数 来 完 成

  • SELECT – S Q L 命 令 - 图327

    SELECT 激 活 的 用 户 自 定 义 函 数 中 很 难 预 测 Visual FoxPro 输 入 / 输 出

SELECT – S Q L 命 令 - 图328SELECT – S Q L 命 令 - 图329SELECT – S Q L 命 令 - 图330SELECT – S Q L 命 令 - 图331SELECT – S Q L 命 令 - 图332SELECT – S Q L 命 令 - 图333SELECT – S Q L 命 令 - 图334I/O SELECT – S Q L 命 令 - 图335 和 表 的 环 境 一 般 来 说 不 知 道 选 择 的 工 作 区 是 哪 一 个 不 知 道 当前 表 的 名 称 甚 至 不 知 道 正 在 处 理 的 字 段 名 这 些 变 量 的 值 完 全 取 决 于 用 户自 定 义 函 数 在 优 化 过 程 的 什 么 地 方 激 活

  • SELECT – S Q L 命 令 - 图336SELECT – S Q L 命 令 - 图337SELECT – S Q L 命 令 - 图338

    在 SELECT 子 句 调 用 的 用 户 自 定 义 函 数 中 修 改 Visual FoxPro I/O 或 表 的 环境 是 很 不 安 全 的 一 般 来 说 这 样 做的 结 果 难 以 预 料

  • SELECT – S Q L 命 令 - 图339SELECT – S Q L 命 令 - 图340

    从 SELECT 将 值 传 递 给 用 户自 定 函 数 唯 一 可 靠 的 方 法 是 激 活 用 户 自 定 义函 数 时 以 参 数 的 形 式 传 递

  • SELECT – S Q L 命 令 - 图341SELECT – S Q L 命 令 - 图342SELECT – S Q L 命 令 - 图343

    经 过 实 践 有 可 能 发 现 某 种 被认 为 是 违 法 的 操 作 在 某 种 FoxPro 版 本 中 运 行正 确 但 这 并 不 保 证 它 在 以 后 的 版 本 中 也 能 正 确 运 行

SELECT – S Q L 命 令 - 图344SELECT – S Q L 命 令 - 图345SELECT – S Q L 命 令 - 图346抛开这些限制不说 用户自定义函数在 SELECT 语句中还是可接受的 但 不 要 忘 记 使用 SELECT 可能要降低性能

SELECT – S Q L 命 令 - 图347SELECT – S Q L 命 令 - 图348下列字段函数可以与选定项一起使用 选定项可以是一个字段或包含字段的表达式

  • SELECT – S Q L 命 令 - 图349SELECT – S Q L 命 令 - 图350A

    V G (Select_Item ) 计 算 列 中 数 值 的 平 均 值

  • SELECT – S Q L 命 令 - 图351SELECT – S Q L 命 令 - 图352SELECT – S Q L 命 令 - 图353COUNT

    ( Select_Item ) 计 算 列 中 选 定 项 的 数 目 计 算 查 询 输 出 的 行 数

  • SELECT – S Q L 命 令 - 图354SELECT – S Q L 命 令 - 图355M

    IN ( Select_Item ) 确 定 列 中 Select_Item 的 最 小 值

  • SELECT – S Q L 命 令 - 图356SELECT – S Q L 命 令 - 图357M

    A X ( Select_Item ) 确 定 列 中 Select_Item 的 最 大 值

  • SELECT – S Q L 命 令 - 图358SELECT – S Q L 命 令 - 图359SELECT – S Q L 命 令 - 图360S

    U M (Select_Item ) 计 算 列 中 数 值 的 和字 段 函 数 不 能 嵌 套 使 用

连 接 (Join)

SELECT – S Q L 命 令 - 图361SELECT – S Q L 命 令 - 图362SELECT – S Q L 命 令 - 图363SELECT – S Q L 命 令 - 图364SELECT – S Q L 命 令 - 图365SELECT – S Q L 命 令 - 图366Visual FoxPro 支持 ANSI SQL '92 连接 (Join) 语法 通过比较两个或多个表中的字 段 将它们的记录连接到一起 生成查询 例如 内部连接 (inner join) 是将两个表中连接字段 (joined field) 值相同的记录选取到查询中 Visual FoxPro 支持嵌套连接(nested joins)

重 要 事 项

SELECT – S Q L 命 令 - 图367SELECT – S Q L 命 令 - 图368创建连接条件时 请记住如下几点

  • SELECT – S Q L 命 令 - 图369SELECT – S Q L 命 令 - 图370SELECT – S Q L 命 令 - 图371SELECT – S Q L 命 令 - 图372SELECT – S Q L 命 令 - 图373

    如 果 在 查 询 中 包 括 两 个 表 又 没 有 指 定 连 接 条 件 那 么 第 一 个 表 中 每 一 个 记录 同 第 二 个 表 中 每 一 记 录 之 间 只 要 满 足筛 选 条 件 就 连 接 起 来 这 种 查 询

SELECT – S Q L 命 令 - 图374产 生 的 结 果 很 长

  • SELECT – S Q L 命 令 - 图375SELECT – S Q L 命 令 - 图376SELECT – S Q L 命 令 - 图377SELECT – S Q L 命 令 - 图378SELECT – S Q L 命 令 - 图379SELECT – S Q L 命 令 - 图380SELECT – S Q L 命 令 - 图381SELECT – S Q L 命 令 - 图382SELECT – S Q L 命 令 - 图383

    连 接 条 件 中 使 用 DELETED EOF FOUND RECCOUNT

SELECT – S Q L 命 令 - 图384SELECT – S Q L 命 令 - 图385SELECT – S Q L 命 令 - 图386SELECT – S Q L 命 令 - 图387SELECT – S Q L 命 令 - 图388SELECT – S Q L 命 令 - 图389SELECT – S Q L 命 令 - 图390SELECT – S Q L 命 令 - 图391SELECT – S Q L 命 令 - 图392SELECT – S Q L 命 令 - 图393SELECT – S Q L 命 令 - 图394SELECT – S Q L 命 令 - 图395SELECT – S Q L 命 令 - 图396SELECT – S Q L 命 令 - 图397SELECT – S Q L 命 令 - 图398和 RECNO 等 支 持 可 选 别 名 或 工 作 区 的 函 数 时 要 小 心 在 这 些函 数 中 包 括 别 名 或 工 作 区 可 能 导 致 不 可 预 料 的 结 果 SELECT 不 使 用 工 作区 它 执 行 与 USE ... AGAIN 相 同 的 操 作 在 不 带 可 选 别 名 和 工 作 区 的 情况 下 使 用 这 些 函 数 进 行 单 表 查 询 时 可 得 到 正 确 的 结 果 但 是 使 用 这 些 函数 进 行 多 表 查 询 时 即 使 不 带 可 选 别 名 或 工 作 区 也 可 能 得 到 一 些 莫 明 其 妙的 结 果

  • SELECT – S Q L 命 令 - 图399SELECT – S Q L 命 令 - 图400SELECT – S Q L 命 令 - 图401SELECT – S Q L 命 令 - 图402SELECT – S Q L 命 令 - 图403

    当 连 接 含 有 空 字 段 (empty field) 的 表 时 也 要 注 意 这 是 因 为 Visual FoxPro 匹 配 空 字 段 例 如 连 接 CUSTOMER.ZIP 和 INVOICE.ZIP 两 个 表 如 果CUSTOMER 表 中 的 100 条 记 录 中 没 有 给 出 邮 政 编 码 INVOICE 表 中 也 有

SELECT – S Q L 命 令 - 图404SELECT – S Q L 命 令 - 图405SELECT – S Q L 命 令 - 图406400 条 记 录 没 有 给 出 邮 政 编 码 那 么 查 询 结 果 中 将 会 由 于 空 字 段 的 匹 配 而 出现 40000 条 多 余 的 记 录 要 去 除 查 询 结 果 中 的 空 记 录 可 以 使 用 EMPTY

SELECT – S Q L 命 令 - 图407SELECT – S Q L 命 令 - 图408SELECT – S Q L 命 令 - 图409 函 数

SELECT – S Q L 命 令 - 图410SELECT – S Q L 命 令 - 图411SELECT – S Q L 命 令 - 图412SELECT – S Q L 命 令 - 图413SELECT – S Q L 命 令 - 图414SELECT – S Q L 命 令 - 图415有 关 连 接 的 其 它 情 况 请 参 阅 M icrosoft Visual FoxPro 6.0 中 文 版 程 序 员 指 南第 八 章 创 建 视 图

示 例

以下 示例 说明了使用 SELECT – SQL 用户自定义函数的用法 :

示 例 1

SELECT – S Q L 命 令 - 图416SELECT – S Q L 命 令 - 图417SELECT – S Q L 命 令 - 图418示例 1 显示了 customer 表中所有的公司名称 来自一个表的一个字段

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT customer.company ;

FROM customer

示 例 2

SELECT – S Q L 命 令 - 图419SELECT – S Q L 命 令 - 图420示例 2 显示了来自两个表中三个字段的内容及两个表基于 cust_id 字段的连接 两个表均使用了本地别名

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id

示 例 3

SELECT – S Q L 命 令 - 图421示例 3 显示了在指定字段只有唯一数据的记录

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT DISTINCT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id

示 例 4

SELECT – S Q L 命 令 - 图422SELECT – S Q L 命 令 - 图423示例 4 以升序次序显示了 country postalcode 和 company 字段

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT country, postalcode, company ;

FROM customer ;

ORDER BY country, postalcode, company

示 例 5

SELECT – S Q L 命 令 - 图424示例 5 将来自两个表的字段内容存储在第三个表中

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ; WHERE a.cust_id = b.cust_id ; INTO TABLE custship.dbf

BROWSE

示 例 6

SELECT – S Q L 命 令 - 图425示例 6 显示订单 (order) 日期早于 1994 年 2 月 16 日的记录

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT a.company, b.order_date, b.shipped_on ;

FROM customer a, orders b ;

WHERE a.cust_id = b.cust_id ;

AND b.order_date < {^1994-02-16}

示 例 7

SELECT – S Q L 命 令 - 图426示例 7 显示 customer 表中邮政编码与 orders 表的邮政编码相匹配的所有公司名

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT company FROM customer a WHERE ;

EXISTS (SELECT * FROM orders b WHERE a.postalcode = b.postalcode)

示 例 8

SELECT – S Q L 命 令 - 图427SELECT – S Q L 命 令 - 图428示例 8 显示 customer 表中公司名以大写的 C 开头 但长度未定的所有记录

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT * FROM customer a WHERE a.company LIKE "C%"

示 例 9

SELECT – S Q L 命 令 - 图429示例 9 显示 customer 表中国家名以大写的 U 开头其后跟着未知字母的所有记录

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT * FROM customer a WHERE a.country LIKE "U_"

示 例 10

SELECT – S Q L 命 令 - 图430SELECT – S Q L 命 令 - 图431示例 10 以大写方式 输出列为 CityList 显示所有城市名

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata')

SELECT UPPER(city) AS CityList FROM customer

示 例 11

SELECT – S Q L 命 令 - 图432SELECT – S Q L 命 令 - 图433SELECT – S Q L 命 令 - 图434示例 11 演示了您可以执行在包含百分比符号 (%) 数据上查询的方式 在百分比之前放置的反斜线 (\) 表示应该将百分比符号当作字符处理 而 ESCAPE 子句中的反斜线指定为转义字符

SELECT – S Q L 命 令 - 图435SELECT – S Q L 命 令 - 图436因为在 Visual FoxPro 的示例表中不包含百分比符号 所以查询没有返回结果

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer;

WHERE company LIKE "%\%%" ESCAPE "\"

示 例 12

SELECT – S Q L 命 令 - 图437SELECT – S Q L 命 令 - 图438SELECT – S Q L 命 令 - 图439示例 12 演示了您可以执行在包含下划线符号 (_) 数据上查询的方式 在下划线之前放置的反斜线 (\) 表示应该将下划线符号当作字符处理 而 ESCAPE 子句中的反斜线指定为转义字符

SELECT – S Q L 命 令 - 图440SELECT – S Q L 命 令 - 图441因为在 Visual FoxPro 的示例表中不包含下划线符号 所以查询没有返回结果

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer;

WHERE company LIKE "%\_%" ESCAPE "\"

示 例 13

SELECT – S Q L 命 令 - 图442SELECT – S Q L 命 令 - 图443SELECT – S Q L 命 令 - 图444SELECT – S Q L 命 令 - 图445在 示例 13 中 转义字符使用它自身的含义 短划线既是转义字符同时也是具有意义字符 查询返回公司名包含百分号后跟着短划线的所有行

SELECT – S Q L 命 令 - 图446SELECT – S Q L 命 令 - 图447因为在 Visual FoxPro 的示例表中不包含百分比符号 所以查询没有返回结果

CLOSE ALL

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'data\testdata') SELECT * FROM customer;

WHERE company LIKE "%-%--%" Escape "-"

请 参 阅

CREATE QUERY , CREATE TABLE – S Q L , INSERT – S Q L , MODIFY QUERY , SET ANSI , SET EXACT , SET PATH , _TALLY