构建查询表达式
ArcGIS 10.2
定位主题
在 ArcGIS 中,查询表达式用于选择要素和表记录的子集。ArcGIS 中的查询表达式符合标准的 SQL 表达式。例如,您可以在使用按属性选择工具或查询构建器 对话框时使用此语法来设置图层定义查询。
本主题将介绍如何构建基本的 WHERE 子句表达式。如果您刚刚开始使用 SQL,本主题会对您有所帮助。要获取更加详细的参考,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考。
简单的 SQL 表达式
SELECT * FROM 构成了 SQL 表达式的第一部分,系统会自动为您提供该语句。
查询表达式使用跟随在 Select * From <图层或数据集> Where 子句之后这样的一般格式(
例如,跟随在 SELECT * FROM <图层名称> WHERE 之后的 SQL 表达式部分)。
以下是 ArcGIS 查询表达式的一般格式:
<字段名><运算符><值或字符串>
对于组合查询,使用以下格式:
<字段名><运算符><值或字符串><连接符><字段名><运算符><值或字符串> ...
也可以使用括号 () 来定义组合查询中的运算顺序。
由于您是将列作为一个整体进行选择的,因此不能将 SELECT 限制为仅返回相应表中的部分列,原因是 SELECT * 语法是通过硬编码实现的。因此,除非在使用子查询时,否则无法在 ArcGIS 的 SQL 查询中使用 DISTINCT、ORDER BY 和 GROUP BY 等关键字。有关子查询的信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考。
在从中构建查询表达式的多数 ArcGIS 对话框中,都会为您提供图层或表的名称(或者从下拉列表中选择)。例如:
表达式的下一个部分是 WHERE 子句,这是您必须构建的部分。基本的 SQL WHERE 子句如下所示
STATE_NAME = 'Alabama'
这样会在名为 STATE_NAME 的字段中选择包含“Alabama”的要素。
SQL 语法
所使用的 SQL 语法因数据源的不同而有所差异。每个 DBMS 都拥有各自的 SQL 方言。
要查询基于文件的数据(包括文件地理数据库、coverage、shapefile、INFO 表、dBASE 表、CAD 和 VPF 数据),请使用支持 SQL 功能的子集的 ArcGIS SQL 方言。要查询个人地理数据库,请使用 Microsoft Access 语法。要查询 ArcSDE 地理数据库,请使用基础 DBMS(即:Oracle、SQL Server、DB2、Informix 或 PostgreSQL)的 SQL 语法。
从中创建 SQL WHERE 子句的 ArcGIS 对话框会帮助您对所查询的数据库使用正确的语法。它们利用适当的分隔符列出正确的字段名称和值。而且还为您选择相关的 SQL 关键字和运算符。
搜索字符串
字符串必须始终用单引号括起。例如:
STATE_NAME = 'California'distinct查询
表达式中的字符串区分大小写,但在查询个人地理数据库中的要素类和表时除外。要在其他数据格式中进行不区分大小写的搜索,您可使用 SQL 函数将所有值转换为相同的大小写形式。对于基于文件的数据源(如地理数据库或 shapefile),可使用 UPPER 或 LOWER 函数。
例如,以下表达式将选择姓氏存储为 Jones 或 JONES 这两种形式的客户:
UPPER(LAST_NAME) = 'JONES'
其他数据源也有类似的函数。例如,个人地理数据库中的 UCASE 和 LCASE 函数可执行同样的操作。
可使用 LIKE 运算符(而不是 = 运算符)来构建部分字符串搜索。例如,以下表达式将从
美国州名称中选择 Mississippi 和 Missouri:
STATE_NAME LIKE 'Miss%'
% 表示其位置可以是任意数量的任何字符:一个字符、一百个字符或无字符。此外,如果您希望在查询时通配符仅代表一个字符,则可使用“_”。
例如,以下表达式将到 Catherine Smith 和 Katherine Smith:
OWNER_NAME LIKE '_atherine smith'
上述通配符适用于任何基于文件的数据或 ArcSDE 地理数据库数据。在查询个人地理数据库时,使用通配符 * 来表示任意数量的字符,而使用 ? 来表示一个字符。
在按属性选择 和查询构建器 对话框中,通配符以按钮的形式显示。您可单击相应的按钮来将通配符输入到正在构建的表达式中。构建查询时,仅显示适用于所查询的图层或表的数据源的通配符。
如果在字符串中同时使用通配符和 = 运算符,则此字符将被视为字符串的一部分,而不会
将其视为通配符。
还可使用大于 (>)、小于 (<)、大于等于 (>=)、小于等于 (<=) 以及 BETWEEN 运算符,来基于排序顺序选择字符串值。例如,以下表达式将选择 coverage 中名称首字母为 M 到 Z 的所有城市:
CITY_NAME >= 'M'
查询字符串时,还可使用不等于 (<>) 运算符。
如果字符串包含单引号,您首先需要使用另一单引号作为转义字符。例如:
NAME = 'Alfie''s Trough'
了解有关通配符的详细信息
NULL 关键字
可使用 NULL 关键字来选择指定字段为空值的要素和记录。NULL 关键字的前面始终使用 IS 或 IS NOT。
例如,要查尚未输入 1996 年人口的城市,可使用
POPULATION96 IS NULL
或者,要查已输入 1996 年人口的城市,可使用
POPULATION96 IS NOT NULL
搜索数字
可使用等于 (=)、不等于 (<>)、大于 (>)、小于 (<)、大于等于 (>=)、小于等于 (<=) 和 BETWEEN 运算符查询数字。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论