全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
之前我已经介绍过一些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)
对于文件地理数据库,集合函数 AVG、COUNT、MIN、MAX 和 SUM 只能用在标量子查询内。
EXISTS 谓词。例如:
EXISTS (SELECT * FROM indep_countries WHERE "COUNTRY_NAME" = 'Mexico')