『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

ArcGIS操作教程(85)ArcMap中的查询表达式

ArcGIS操作教程(85)ArcMap中的查询表达式
之前我已经介绍过一些ArcMap查询图层的相关内容,详见《ArcMap中的查询图层》《ArcMap创建查询图层》《修改查询图层》,这里面涉及一个很重要的内容就是查询表达式的构建。本文将结合官方的相关内容做一个介绍。

       之前我已经介绍过一些ArcMap查询图层的相关内容,详见《ArcMap中的查询图层》《ArcMap创建查询图层》《修改查询图层》,这里面涉及一个很重要的内容就是查询表达式的构建。本文将结合官方的相关内容做一个介绍。

 

       关于SQL

 

       相信学过数据库的人,对这个肯定不陌生。关于数据库的内容,我也会在以后的文章中做一些介绍。

 

       SQL 表达式

 

       SELECT * FROM TABLE_NAME

       这是一个最简单的SQL表达式,查询表达式使用跟随在 Select * From <图层或数据集> Where 子句之后这样的一般格式(例如,跟随在 SELECT * FROM <图层名称> WHERE 之后的 SQL 表达式部分)。

 

        以下是 ArcGIS 查询表达式的一般格式:

 

       <字段名> <运算符> <值或字符串>

       对于组合查询,使用以下格式:

 

        <字段名> <运算符> <值或字符串> <连接符> <字段名> <运算符> <值或字符串> ...

       也可以使用括号 () 来定义组合查询中的运算顺序。

 

       表达式的下一个部分是 WHERE 子句,这是构建的重要部分。基本的 SQL WHERE 子句如下所示

 

       SELECT * FROM TABLE_NAME WHERE NAME = 'malagis'

 

 

       SQL的其他语法

 

       SQL是数据库的重要部分,也不是三言两语就能讲清楚的,这里推荐一个SQL的入门教程,点击这里.

 

       ArcGIS中的 SQL使用参考

 

       字段

 

       在 SQL 表达式中指定字段时,如果该字段名可能产生岐义(比如与 SQL 保留关键字相同),则需提供一个分隔符。

 

       由于存在许多保留关键字,并且后续版本中还能添加新的保留关键字,所以建议您始终使用分隔符将字段名称括起来。

 

       DBMS DBMS 之间的字段名分隔符有所不同。如果要查询任何基于文件的数据(例如,文件地理数据库、ArcSDE 地理数据库数据,或者 ArcIMS 要素类或影像服务子图层中的数据),可以将字段名称用双引号括起:

 

       "AREA"

       如果要查询个人地理数据库数据,可以将字段名称用方括号括起:

 

       [AREA]

      对于个人地理数据库栅格数据集,应将字段名称用双引号括起:

 

        "AREA"

       对于文件地理数据库数据,您可以将字段名称用双引号括起,但是通常不需要。

 

       AREA

       字符串

 

       查询中的字符串必须始终用单引号括起。例如:

 

       STATE_NAME = 'California'

      表达式中的字符串区分大小写。对于要素类和表,可以用 UPPER LOWER 函数设置所选项的大小写。例如:

UPPER(STATE_NAME) = 'RHODE ISLAND'

       个人地理数据库要素类和表中的字符串不区分大小写。如果需要,可以使用与 UPPER LOWER 等效的 UCASE LCASE 函数。

       如果字符串包含单引号,您首先需要使用另一单引号作为转义字符。例如:

       NAME = 'Alfie''s Trough'

       进行部分字符串搜索所用的通配符还取决于所要查询的数据源。例如,在基于文件的或 ArcSDE 地理数据库数据源中,以下表达式将从美国州名称中选择 Mississippi Missouri

 

       STATE_NAME LIKE 'Miss%'

       百分号 (%) 表示这个位置可以是任意字符,即 1 个字符、100 个字符或者无字符均可。在查询个人地理数据库时,使用通配符“*”代表任意数量的字符,而使用“?”来代表一个字符。

 

      字符串函数可用来格式化字符串。例如,LEFT 函数将返回字符串左侧特定数量的字符。在以下示例中,查询将返回以字母 A 开头的所有州:

 

      LEFT(STATE_NAME,1) = 'A'

      有关支持的函数列表,请参阅 DBMS 文档。

 

      数值

 

      无论您的区域设置如何,小数点 (.) 将始终用作小数分隔符。在表达式中不能使用逗号作为小数分隔符或千位分隔符。

 

       可以使用等于 (=)、不等于 (<>)、大于 (>)、小于 (<)、大于等于 (>=) 和小于等于 (<=) BETWEEN 运算符查询数值。例如:

 

       POPULATION >= 5000

       数值函数可用来格式化数值。例如,ROUND 函数可将文件地理数据库中的数值四舍五入到指定的小数位数:

 

        ROUND(SQKM,0) = 500

       有关支持的数值函数列表,请参阅 DBMS 文档。

 

       日期和时间

 

       地理数据库数据源将日期保存在日期时间字段中。但是,ArcInfo coverage shapefile 不是这样。

 

       因此,下面所列的大部分查询语法都包含对时间的引用。在某些情况下,当已知字段只包含日期时,查询中的时间部分可以安全地省略掉;而在其他情况下则需要声明,否则查询将返回语法错误。

 

       ArcMap 日期格式的主要目的是存储日期,不是时间。当基础数据库实际上使用日期时间字段时,可以在此字段中只存储时间,但最好不要这样做。查询时间会比较麻烦;例如,12:30:05 p.m. 会被存储为 '1899-12-30 12:30:05'

 

       子查询

 

       子查询是指嵌套在另一个查询中的查询。子查询可用于应用谓词或聚合函数,或将数据与存储在另一张表中的值进行比较。可使用 IN ANY 关键字来完成。例如,以下查询只会选择未列在表 indep_countries 中的国家:

 

       "COUNTRY_NAME" NOT IN (SELECT "COUNTRY_NAME" FROM indep_countries)

       此查询将返回国家中 GDP2006 大于 GDP2005 的所有要素:

 

       "GDP2006" > (SELECT MAX("GDP2005") FROM countries)

       对于表中的每条记录,子查询可能需要在其目标表中分析所有数据。在大型数据集上执行时可能极其缓慢。

 

       文件地理数据库仅提供对以下子查询的支持:

 

       IN 谓词。例如:

       "COUNTRY_NAME" NOT IN (SELECT "COUNTRY_NAME" FROM indep_countries)

       包含比较运算符的标量子查询。标量子查询返回单个值。例如:

       "GDP2006" > (SELECT MAX("GDP2005") FROM countries)

       对于文件地理数据库,集合函数 AVGCOUNTMINMAX SUM 只能用在标量子查询内。

       EXISTS 谓词。例如:

       EXISTS (SELECT * FROM indep_countries WHERE "COUNTRY_NAME" = 'Mexico')

      京ICP备2025132830号-1 京公网安备 号