《arcgis10.2构建查询》由会员分享,可在线阅读,更多相关《arcgis10.2构建查询(18页珍藏版)》请在金锄头文库上搜索。
1、构建查询表达式ArcGIS 10.2定位主题在ArcGIS中,查询表达式用于选择要素和表记录的子集。 ArcGIS中的查询表 达式符合标准的SQL表达式。例如,您可以在使用 按属性选择工具或查询构建 器对话框时使用此语法来设置 图层定义查询。本主题将介绍如何构建基本的 WHERE子句表达式。如果您刚刚开始使用 SQL, 本主题会对您有所帮助。要获取更加详细的参考,请参阅在ArcGIS中使用的查 询表达式的SQL参考。简单的SQL表达式SELECT * FROM构成了 SQL表达式的第一部分,系统会自动为您提供该语句。查询表达式使用跟随在 Select * From Where子句之后这样的 一
2、般格式(例如,跟随在 SELECT * FROM WHERE之后的SQL表达 式部分)。以下是ArcGIS查询表达式的一般格式: 对于组合查询,使用以下格式: 也可以使用括号()来定义组合查询中的运算顺序。由于您是将列作为一个整体进行选择的,因此不能将SELECT限制为仅返回相应 表中的部分列,原因是SELECT*语法是通过硬编码实现的。因此,除非在使用 子查询时,否则无法在 ArcGIS 的SQL查询中使用DISTINCT、ORDER B舔口 GROUP BY等关键字。有关子查询的信息,请参阅 在ArcGIS中使用的查询表达 式的SQL参考。在从中构建查询表达式的多数 ArcGIS对话框中,
3、都会为您提供图层或表的名称 (或者从下拉列表中选择)。例如:表达式的下一个部分是 WHERE子句,这是您必须构建的部分。基本的SQL WHERE 子句如下所示STATE_NAME = Alabama这样会在名为STATE_NAME勺字段中选择包含“ Alabama的要素。SQL 语法所使用的SQL语法因数据源的不同而有所差异。每个 DBMS都拥有各自的SQL 方言。要查询基于文件的数据 (包括文件地理数据库、 coverage、shapefile 、INFO 表、 dBASE表、CAD和VPF数据),请使用支持 SQL功能的子集的ArcGIS SQL方 言。要查询个人地理数据库, 请使用 Mi
4、crosoft Access 语法。要查询 ArcSDE 地 理数据库,请使用基础 DBMS(即:Oracle、SQL Server、DB2 Informix 或 PostgreSQL)的 SQL 语法。从中创建SQL WHEREF句的ArcGIS对话框会帮助您对所查询的数据库使用正 确的语法。 它们利用适当的分隔符列出正确的字段名称和值。 而且还为您选择相 关的 SQL 关键字和运算符。搜索字符串字符串必须始终用单引号括起。例如:STATE_NAME = California表达式中的字符串区分大小写, 但在查询个人地理数据库中的要素类和表时除外。 要在其他数据格式中进行不区分大小写的搜索,
5、您可使用 SQL 函数将所有值转 换为相同的大小写形式。 对于基于文件的数据源 (如地理数据库或 shapefile ), 可使用UPPER或LOWER函数。例如,以下表达式将选择姓氏存储为 Jones 或 JONES 这两种形式的客户:UPPER(LAST_NAME) = JONES其他数据源也有类似的函数。例如,个人地理数据库中的UCASE和LCASE函数 可执行同样的操作。可使用 LIKE 运算符(而不是 = 运算符)来构建部分字符串搜索。例如,以下 表达式将从美国州名称中选择 Mississippi 和 Missouri :STATE_NAME LIKE Miss%表示其位置可以是任意
6、数量的任何字符:一个字符、一百个字符或无字符。此外,如果您希望在查询时通配符仅代表一个字符,则可使用“_”。例如,以下表达式将找到 Catheri ne Smith 和Katheri ne Smith :OWNER_NAME LIKE _atheri ne smith上述通配符适用于任何基于文件的数据或 ArcSDE地理数据库数据。在查询个人 地理数据库时,使用通配符*来表示任意数量的字符,而使用?来表示一个字 符。在按属性选择和查询构建器对话框中,通配符以按钮的形式显示。您可单击相 应的按钮来将通配符输入到正在构建的表达式中。 构建查询时,仅显示适用于所 查询的图层或表的数据源的通配符。如果
7、在字符串中同时使用通配符和 =运算符,则此字符将被视为字符串的一部 分,而不会将其视为通配符。还可使用大于()、小于()、大于等于(=)、小于等于(=)以及BETWEEN1 算符,来基于排序顺序选择字符串值。例如,以下表达式将选择coverage中名 称首字母为M到Z的所有城市:CITY_NAME = M查询字符串时,还可使用不等于()运算符。如果字符串包含单引号,您首先需要使用另一单引号作为转义字符。例如:NAME = Alfies Trough了解有关通配符的详细信息NULL关键字可使用NULL关键字来选择指定字段为空值的要素和记录。NULL关键字的前面始终使用IS或IS NOT。例如,要
8、查找尚未输入1996年人口的城市,可使用POPULATION96 IS NULL或者,要查找已输入1996年人口的城市,可使用POPULATION96 IS NOT NULL搜索数字可使用等于 (=) 、不等于 () 、大于 () 、小于 (=) 、小于等 于(= 5000无论区域设置如何定义, 所列出的数值将始终使用点作为小数分隔符。 在表达式 中不能使用逗号作为小数分隔符或千位分隔符。计算可使用算术运算符 +、- 、* 和 / 在查询中加入计算: 可在字段和数字之间进行计算。例如:AREA = PERIMETER * 100 也可在字段之间进行计算。例如,要查找人口密度小于等于每平方英里
9、25 人的所有国家, 可使用以下表达 式:POP1990 / AREA MALES * POP90_SQMI + AREA 与以下表达式的求值顺序不同HOUSEHOLDS MALES * (POP90_SQMI + AREA)可单击添加括号,然后输入括号内部的表达式,也可高亮显示要放入括号内部的现有表达式,然后单击括号按钮将其括起。组合表达式通过使用AND和OR运算符将表达式组合在一起,可构建复杂表达式。例如,以下表达式将选择面积超过 1,500平方英尺的所有房屋和一个可容纳三 台或更多汽车的车库。AREA 1500 AND GARAGE 3如果使用OR运算符,OR运算符两侧的两个表达式中必须
10、至少有一个为真时才 会选择记录。例如:RAINFALL 35在表达式开头使用NOT运算符可查找与指定表达式不匹配的要素或记录。例如:NOT STATE_NAME = ColoradoNOT表达式可与 AND和OR组合。例如,以下表达式将选择除 Maine以外的所有新英格兰州。SUB_REGION = New En gla nd AND NOT STATE_NAME = Mai ne子查询子查询是嵌套在另一个查询中的查询, 仅受地理数据库数据源支持。子查询可用于应用谓词或聚合函数,或将数据与存储在另一张表中的值进行比较。例如,以下查询只会选择未列在表in dep_cou ntries 中的国家:
11、COUNTRY_NAME NOT IN (SELECT COUNTRY_NAME FROM in dep_cou ntries)有关详细信息,请参阅 在ArcGIS中使用的查询表达式的SQL参考。查询日期 从中创建SQL WHERE子句的ArcGIS对话框会帮助您对所查询的数据库使用正 确的数据语法。大多数情况下,只需单击字段、运算符和值,即可生成正确的语 法。在ArcGIS 中使用的查询表达式的 SQL 参考ArcGIS 10.2定位主题本主题将介绍 ArcGIS中的选择表达式所用的常规查询的各个元素ArcGIS 中的查询表达式使用常规SQL语法警告:SQL语法不适用于使用字段计算器计算字段
12、。字段在SQL表达式中指定字段时,如果该字段名可能产生岐义(比如与SQL保留关 键字相同),则需提供一个分隔符。由于存在许多保留关键字,并且后续版本中还能添加新的保留关键字, 所以建议 您始终使用分隔符将字段名称括起来。DBMS和DBMS之间的字段名分隔符有所不同。如果要查询任何基于文件的数据(例如,文件地理数据库、ArcSDE地理数据库数据,或者 ArcIMS要素类或影 像服务子图层中的数据),可以将字段名称用双引号括起:AREA如果要查询个人地理数据库数据,可以将字段名称用方括号括起:AREA对于个人地理数据库栅格数据集,应将字段名称用双引号括起:AREA对于文件地理数据库数据,您可以将字
13、段名称用双引号括起,但是通常不需要。AREA字符串查询中的字符串必须始终用单引号括起。例如:STATE_NAME = California表达式中的字符串区分大小写。对于要素类和表,可以用UPPER或LOWER 函数设置所选项的大小写。例如:UPPER(STATE_NAME) = RHODE ISLAND个人地理数据库要素类和表中的字符串不区分大小写。如果需要,可以使用与UPPER或 LOWER等效的UCASE和LCASE函数。如果字符串包含单引号,您首先需要使用另一单引号作为转义字符。例如:NAME = Alfies Trough进行部分字符串搜索所用的通配符还取决于所要查询的数据源。例如,
14、在基于文件的或ArcSDE地理数据库数据源中,以下表达式将从美国州名称中选择Mississippi 和 Missouri :STATE_NAME LIKE Miss%百分号(%)表示这个位置可以是任意字符,即1个字符、100个字符或者无字 符均可。在查询个人地理数据库时,使用通配符“ *”代表任意数量的字符,而 使用“?”来代表一个字符。字符串函数可用来格式化字符串。例如,LEFT函数将返回字符串左侧特定数量 的字符。在以下示例中,查询将返回以字母A开头的所有州:LEFT(STATE_NAME,1) = A有关支持的函数列表,请参阅 DBMS文档数值无论您的区域设置如何,小数点(.) 将始终用作小数分隔符。在表达式中不能 使用逗号作为小数分隔符或千位分隔符。可以使用等于(=)、不等于()、大于()、小于(=)和小于等于(= 5000数值函数可用来格式化数值。例如,ROUNDg数可将文件地理数据库中的数值四 舍五入到指定的小数位数:ROUND(SQKM,0) = 500有关支持的数值函数列表,请参阅 DBMS文档日期和时间基本