GIS属性表怎么按属性选择?查询语句怎么写?
很多初学者在做数据筛选时都会遇到同一个问题:GIS属性表怎么按属性选择?查询语句怎么写? 其实核心并不复杂:先看字段类型,再按软件支持的 SQL 语法写条件,最后检查选择结果是否符合预期。
本文以常见的 QGIS、ArcGIS Pro 和通用 GIS 属性表为例,讲清楚按属性选择的基本方法、查询语句写法、常见错误和检查清单。适合 GIS 学生、制图人员、空间数据处理人员在日常工作中快速套用。
引言:GIS属性表按属性选择到底在做什么
GIS属性表按属性选择,本质上是根据图层属性表中的字段值筛选要素。例如,从行政区图层中选择“省份 = 四川省”的面要素,从道路图层中选择“道路等级 = 国道”的线要素,或者从监测点图层中选择“PM2.5 大于 75”的点要素。
按属性选择通常用于以下场景:
- 从一个大图层中筛选某一类要素。
- 批量导出符合条件的数据。
- 对选中的要素进行字段计算、裁剪、缓冲区或统计分析。
- 检查属性值是否填写错误,例如空值、异常值、重复编码。
很多查询失败并不是软件问题,而是字段类型、引号、字段名写法或中文字符处理不正确导致的。

背景:为什么GIS查询语句经常写不对
在 GIS 软件中,属性表查询语句通常接近 SQL 表达式,但不同软件、不同数据源会有一些差异。Shapefile、GeoPackage、File Geodatabase、PostGIS 图层在字段名、字符串、日期和空值表达上可能略有不同。
最常见的问题有五类:
- 字段类型看错:把文本字段当数值字段写,或者把数值字段加了引号。
- 字符串没加引号:中文、名称、编码等文本值通常需要单引号。
- 字段名写错:字段名包含中文、空格或特殊字符时,软件可能需要自动引用。
- 空值判断写错:空值不是等于空字符串,通常要用 IS NULL。
- 模糊查询语法不清楚:LIKE 和通配符用法没有掌握。
所以,学习 GIS 属性表怎么按属性选择,不建议死记某一条语句,而要理解字段类型和判断条件之间的关系。
原理:按属性选择查询语句的基本结构
一个属性查询语句通常由三部分组成:
字段名 运算符 查询值
例如:
name = '成都市'
其中,name 是字段名,= 是运算符,'成都市' 是查询值。
1. 文本字段查询
文本字段,也叫字符串字段,常用于存储名称、类别、编码等内容。文本值一般需要加单引号。
city = '成都市'
type = '住宅用地'
如果字段值是中文,也同样使用单引号。不要写成:
city = 成都市
这种写法通常会报错,因为软件会把“成都市”当成字段名或非法表达式。
2. 数值字段查询
数值字段包括整数、浮点数、面积、人口、长度、等级代码等。数值查询通常不需要加引号。
area > 10000
population >= 500000
level = 2
如果把数值写成 '2',有些软件会自动转换,有些数据源可能会导致查询异常。为了稳定,数值字段建议不加引号。
3. 多条件查询
多个条件可以使用 AND 和 OR 连接。
city = '成都市' AND area > 10000
type = '国道' OR type = '省道'
AND 表示同时满足,OR 表示满足其中一个即可。如果条件复杂,建议使用括号控制优先级。
(type = '国道' OR type = '省道') AND length > 1000
4. 模糊查询
模糊查询常用于名称中包含某个关键词的情况。一般使用 LIKE。
name LIKE '%学校%'
这条语句表示选择名称中包含“学校”的要素。常见写法如下:
| 查询目标 | 查询语句示例 |
|---|---|
| 以“成”开头 | name LIKE '成%' |
| 以“市”结尾 | name LIKE '%市' |
| 包含“道路” | name LIKE '%道路%' |
5. 空值查询
空值不是普通文本,不能简单写成 field = ''。真正的空值通常要使用 IS NULL。
name IS NULL
查询非空值则写成:
name IS NOT NULL
需要注意,空值和空字符串不是一回事。空字符串表示字段里有一个长度为 0 的文本,而空值表示没有值。
步骤:GIS属性表怎么按属性选择
步骤1:打开图层属性表
在 QGIS 或 ArcGIS Pro 中,先在图层列表中选中目标图层,然后打开属性表。不要在错误图层上写查询语句,这是初学者最容易忽略的问题。
- QGIS:右键图层,选择“打开属性表”。
- ArcGIS Pro:右键图层,选择“属性表”。
步骤2:确认字段名和字段类型
写查询语句前,先确认要查询的字段。例如字段是 name、type、area 还是 code。同时要看字段类型是文本、整数、小数还是日期。
这一步决定了查询值是否需要加引号:
- 文本字段:查询值通常加单引号,例如
name = '成都市'。 - 数值字段:查询值通常不加引号,例如
area > 10000。 - 空值判断:使用
IS NULL或IS NOT NULL。
步骤3:打开按属性选择工具
不同软件入口略有不同,但逻辑基本一致。
| 软件 | 常见入口 | 说明 |
|---|---|---|
| QGIS | 属性表中的“按表达式选择要素” | 可使用表达式构建器,适合快速选择和复杂条件。 |
| ArcGIS Pro | Map 选项卡中的 Select By Attributes | 可通过图形界面构建 SQL 条件。 |
| ArcMap | Selection 菜单中的 Select By Attributes | 旧项目中仍然常见,语法与数据源有关。 |
步骤4:编写查询语句
以下是 GIS 属性表查询语句的常用模板,可以直接替换字段名和字段值。
| 需求 | 查询语句 |
|---|---|
| 选择名称等于成都市 | name = '成都市' |
| 选择面积大于 10000 | area > 10000 |
| 选择类型不是住宅用地 | type <> '住宅用地' |
| 选择道路等级为国道或省道 | type = '国道' OR type = '省道' |
| 选择名称包含学校 | name LIKE '%学校%' |
| 选择字段为空 | name IS NULL |
步骤5:执行选择并检查结果
执行查询后,不要马上导出或分析。建议先做三项检查:
- 地图上是否高亮显示了预期位置的要素。
- 属性表中选中记录数量是否合理。
- 随机查看几条选中记录,确认字段值确实满足查询条件。
如果结果为空,优先检查字段值是否存在空格、全角半角差异、中文标点差异和字段类型错误。
步骤6:导出选中要素
确认选择结果正确后,可以将选中要素导出为新图层。
- QGIS:右键图层,选择“导出”,再选择“另存为”,勾选“仅保存选中的要素”。
- ArcGIS Pro:右键图层,选择“Data”,再选择“Export Features”,输入要素可设置为当前选择结果。
导出后建议重新打开新图层属性表,确认记录数量与选择数量一致。
常见坑:GIS属性表查询语句容易出错的地方
1. 文本字段忘记加引号
错误写法:
name = 成都市
推荐写法:
name = '成都市'
只要字段值是名称、类别、编码等文本内容,通常都要加单引号。
2. 字段值看起来一样,其实有空格
有些数据从 Excel、CSV 或外部系统导入后,字段值前后可能带空格。例如看起来是“成都市”,实际可能是“ 成都市”或“成都市 ”。这会导致 name = '成都市' 查不到结果。
遇到这种情况,可以先用模糊查询排查:
name LIKE '%成都市%'
如果模糊查询能选中,而精确查询选不中,通常说明字段值存在隐藏空格或异常字符。
3. 把空值和空字符串混为一谈
查询空值要用:
field IS NULL
查询空字符串才可能使用:
field = ''
实际数据清洗时,两种情况可能同时存在,需要分别检查。
4. AND 和 OR 没有加括号
复杂条件中,括号非常重要。下面这类语句容易产生误解:
type = '国道' OR type = '省道' AND length > 1000
更清晰的写法是:
(type = '国道' OR type = '省道') AND length > 1000
这样表示先筛选国道或省道,再要求长度大于 1000。
5. 字段名和显示别名混淆
ArcGIS Pro 和部分数据库图层可能显示字段别名,但查询语句通常需要使用真实字段名。字段别名看起来更友好,但不一定能直接用于查询。
如果语句报字段不存在,检查图层字段设计,确认真实字段名。
方法比较:QGIS、ArcGIS Pro和通用SQL写法有什么区别
不同 GIS 软件的按属性选择工具界面不同,但查询思路一致:字段、运算符、值。主要差异在字段引用方式、函数名称和表达式构建器。
| 项目 | QGIS | ArcGIS Pro | 通用SQL思路 |
|---|---|---|---|
| 适合人群 | 开源 GIS 用户、学生、数据处理人员 | 企业 GIS、测绘制图、自然资源项目用户 | 数据库和脚本处理用户 |
| 查询入口 | 按表达式选择要素 | Select By Attributes | WHERE 条件 |
| 文本查询 | "name" = '成都市' |
name = '成都市' |
WHERE name = '成都市' |
| 数值查询 | "area" > 10000 |
area > 10000 |
WHERE area > 10000 |
| 优势 | 表达式函数丰富,适合数据检查 | 与地理数据库和制图流程结合紧密 | 适合批量处理和自动化 |
| 注意点 | 字段常用双引号引用 | 语法受数据源影响 | 需要了解数据库字段类型 |
如果你只是在桌面软件中选择要素,使用软件自带的表达式构建器最稳妥。它可以自动插入字段名和部分运算符,减少手写错误。
检查清单:写GIS属性表查询语句前先核对这些
在执行 GIS 属性表按属性选择之前,可以按下面清单逐项检查:
- 是否选中了正确的图层。
- 字段名是否是真实字段名,而不是字段别名。
- 字段类型是文本、数值、日期还是其他类型。
- 文本值是否使用单引号。
- 数值条件是否没有误加引号。
- 中文字段值是否存在前后空格或全角半角差异。
- 空值查询是否使用
IS NULL。 - 多个条件是否正确使用
AND、OR和括号。 - 执行后是否检查了选中数量和地图高亮结果。
- 导出结果后是否再次核对记录数。
实用建议:如果查询语句一直报错,先用一个最简单的条件测试,例如
type = '国道'。确认能运行后,再逐步增加其他条件。
FAQ:GIS属性表按属性选择常见问题
1. GIS属性表怎么按属性选择某一类地物?
先打开属性表,找到分类字段,例如 type 或 landuse,然后使用等值查询。例如选择住宅用地:
landuse = '住宅用地'
执行后检查地图中的高亮要素是否与预期一致。
2. 查询语句怎么写才能选择多个类别?
可以使用 OR 连接多个条件:
type = '国道' OR type = '省道'
如果还要限制长度,可以加括号:
(type = '国道' OR type = '省道') AND length > 1000
3. 为什么我写了字段等于某个中文值,但选择结果为空?
常见原因包括字段值前后有空格、字段值不完全一致、字段类型不是文本、中文标点不同,或者选错了图层。可以先用模糊查询排查:
name LIKE '%关键词%'
如果模糊查询能查到,说明原字段值可能不是完全等于你输入的文本。
4. GIS属性表查询空值应该怎么写?
查询空值通常写:
field IS NULL
查询非空值写:
field IS NOT NULL
不要把空值简单理解为 field = '',两者含义不同。
5. QGIS查询语句和ArcGIS Pro查询语句一样吗?
基本逻辑一样,但细节可能不同。QGIS 表达式里字段常用双引号引用,例如:
"name" = '成都市'
ArcGIS Pro 中常见写法为:
name = '成都市'
具体语法还会受数据源影响。建议优先使用软件的字段列表和表达式构建器自动插入字段名。
6. 按属性选择后可以只导出选中的要素吗?
可以。QGIS 中导出时勾选“仅保存选中的要素”;ArcGIS Pro 中使用导出要素工具时,当前选择集通常会参与导出。导出后要核对新图层记录数,避免误导出全部数据。
结论:先判断字段类型,再写查询条件
理解 GIS属性表怎么按属性选择 的关键,不在于背很多复杂语句,而是掌握三个判断:字段是什么类型、要用什么运算符、查询值应该怎么写。
实际工作中,最常用的查询语句就是等值查询、范围查询、模糊查询、多条件查询和空值查询。只要按“字段名 + 运算符 + 查询值”的结构来写,并在执行后检查选中结果,大多数 GIS 属性表查询问题都可以快速定位和解决。
建议初学者先从简单条件开始,确认结果正确后再叠加复杂条件。这样不仅能减少语法错误,也能避免因为选择结果不准确而影响后续空间分析和制图成果。