卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 1
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
一 初识 SQL .......................................................................................................... 2
1 常用 SQL 语句 ............................................................................................................................................................. 2
2 几个高级查询运算符 .................................................................................................................................................. 2
3 连接 .............................................................................................................................................................................. 3
4 经典 SQL 语句示例 ..................................................................................................................................................... 4
二 SQL EXPRESSION .......................................................................................... 6
1 SQL EXPRESSION 在 ARCMAP 中的应用 ................................................................................................................ 6
1.1 数据管理 ......................................................................................................................................................... 6
1.1.1 提取(Extract) ................................................................................................................................................................ 6
1.1.2 转换(Conversion) ....................................................................................................................................................... 6
1.1.3 更新 ............................................................................................................................................................................... 7
1.2 地图制图 ......................................................................................................................................................... 7
1.2.1 显示 ............................................................................................................................................................................... 7
1.2.2 标注 ............................................................................................................................................................................... 8
1.3 地理处理 ......................................................................................................................................................... 8
1.3.1 Layer 相关 ................................................................................................................................................................... 8
1.3.2 Model Builder ............................................................................................................................................................. 9
1.3.3 线性参考(Linear Referencing) .................................................................................................................................. 9
2 SQL EXPRESSION 概览 ........................................................................................................................................... 10
2.1 超简单语句-直接查询 .................................................................................................................................. 10
2.2 简单语句-简单函数、运算符的使用 .......................................................................................................... 11
2.3 "and" 和 "or" ............................................................................................................................................. 11
2.4 "in" 和 "not in" .......................................................................................................................................... 11
2.5 嵌套 SQL 语句 .............................................................................................................................................. 12
2.6 Null................................................................................................................................................................ 12
2.7 通配符(From MS Access Help) ................................................................................................................ 13
2.8 复杂 sql 语句 ................................................................................................................................................ 14
三 FIELD CALCULATOR 中使用 SQL 语句 ...................................................... 15
1 利用 SQL 语句把 DLBM 的值赋给 DLBM1 ............................................................................................................... 15
2 表间计算-已有 DLBM1 根据按照代码名称对照表赋 DLMC1 ................................................................................. 17
3 土地利用现状数据库地类图斑层扣除线状地物面积字段计算 ............................................................................. 18
四 VBE 环境下 ADO 方式执行 SQL .................................................................. 21
1 创建 ADO CONNECTION ....................................................................................................................................... 21
2 执行 SQL 更新语句(UPDATE) ............................................................................................................................... 22
3 查询某查询条件返回
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
数 ................................................................................................................................ 23
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 2
ESRI 中国社区学习心得
---之 ArcMap 中的 SQL 语句
SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
语言,用于存取数
据以及查询、更新和管理关系数据库系统。
SQL 语言的强大这里咱就不夸了,百度谷歌输入 SQL 搜索一下随便都有上亿条结果,相关信息自己搜
索。这里主要来看 ArcMap 中 SQL 的应用,本文主要用例子说明问题。
一 初识SQL
有关 SQL 的
资料
新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单
数不胜数,这里简单介绍一下 SQL 的入门基础。
SQL 语言大致包含 4 个部分:
(1) 数据定义语言(DDL),例如:CREATE、DROP、ALTER 等语句。
(2) 数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
(3) 数据查询语言(DQL),例如:SELECT 语句。
(4) 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK 等语句。
在 ArcMap 中最长用到的为(2)和(3),其中 select 查询用的最多
1 常用 SQL 语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ‘%value1%’ ---like 的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
2 几个高级查询运算符
(1)UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生
出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表
的每一行不是来自 TABLE1 就是来自 TABLE2。
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 3
(2)EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个
结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
(3) INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果
表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
3 连接
分为 1. INNER JOIN 2. LEFT JOIN 3. RIGHT JOIN 4.LEFT OUTER JOIN
首先设定一个我们要用的两个表
表 A 表 B
ID NAME ID CLASS
1 IBM 1 C1
2 SONY 3 C3
3 BMW 4 C4
(1) INNER JOIN: SELECT * FROM A INNER JOIN B ON A.ID=B.ID
得表
ID NAME CLASS
1 IBM C1
3 BMW C3
对了 就是 两个表的 ID 都存在并相同 得到这两个表的组合表
(2) LEFT JOIN : SELECT * FROM A LEFT JOIN B ON A.ID=B.ID
得表
ID NAME CLASS
1 IBM C1
2 SONY null
3 BMW C3
得到的是 A(left 语句的左边的表)的所有记录 而 B 表对应的记录没有的话也要补齐
3 RIGHT JOIN : SELECT * FROM A RIGHT JOIN B ON A.ID=B.ID
得表
ID NAME CLASS
1 IBM C1
3 BMW C3
4 null C4
RIGHT(右) 得到的是 B(right 语句的右边的表)的所有记录 而 A 表对应的记录没有的话也要补齐
4 FULL OUTER JOIN: SELECT * FROM A FULL OUTER JOIN B ON A.ID=B.ID
得表
ID NAME CLASS
1 IBM C1
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 4
2 SONY null
3 BMW C3
4 null C4
4 经典 SQL 语句示例
一下部分语句的是 mysql 的写法,access 中的写法可能不尽相同。
(1)说明:复制表(只复制结构,源表名:a 新表名:b) (Access 可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
(2)说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access 可用)
insert into b(a, b, c) select d,e,f from b;
(3)说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access 可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
或 insert into b(a, b, c) select d,e,f from [数据库全路径].b where 条件
例子:..from b in ‘"&Server.MapPath(".")&"\data.mdb" &"‘ where..
(4)说明:子查询(表名 1:a 表名 2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
(5)说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table
where table.title=a.title) b
(6)说明:外连接查询(表名 1:a 表名 2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
(7)说明:在线视图查询(表名 1:a )
select * from (Select a,b,c FROM a) T where t.a > 1;
(8)说明:between 的用法,between 限制查询数据范围时包括了边界值,not between 不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值 1 and 数值 2
(9)说明:in 的使用方法
select * from table1 where a [not] in (‘值 1’,’值 2’,’值 4’,’值 6’)
(10)说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
(11)说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d
where .....
(12)说明:日程安排提前五分钟提醒
select * from 日程安排 where datediff(‘minute’,f 开始时间,getdate())>5
(13)说明:一条 SQL 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 5
表名 b where b.主键字段 = a.主键字段 order by a.排序字段
(14)说明:前 10 条记录
select top 10 * form table1 where 范围
(15)说明:选择在每一组 b 值相同的数据中对应的 a 最大的记录的所有信息(类似这样的用法可以用
于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
(16)说明:包括所有在 TableA 中但不在 TableB 和 TableC 中的行并消除所有重复行而派生出一个
结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
(17)说明:随机取出 10 条数据
select top 10 * from tablename order by rnd(id )
(18)说明:随机选择记录
select rnd( id )
(19)说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
(20)说明:列出数据库里所有的表名
select name from sysobjects where type=‘U’
(21)说明:列出表里的所有的
select name from syscolumns where id=object_id(‘TableName’)
(22)说明:列示 type、vender、pcs 字段,以 type 字段排列,case 可以方便地实现多重选择,类
似 select 中的 case。
select type,sum(case vender when ‘A’ then pcs else 0 end),sum(case vender when ‘C’
then pcs else 0 end),sum(case vender when ‘B’ then pcs else 0 end) FROM tablename group by
type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
(23)说明:选择从 10 到 15 的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
到这里,你可能要问了,说了这么多,我也没有看出来它和 ArcMap 有什么关系。下来我们就说说在
ArcMap 里面,SQL 可以用在哪里
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 6
二 SQL Expression
SQL,结构化查询语言,查询是其最重要的功能。在ArcMap中,主要体现在SQL Expression。ESRI 帮
助中,SQL Reference部分做了较为详细介绍,更具体的可以参阅网络或者不同数据库自身查询语言帮助
1 SQL Expression在ArcMap中的应用
SQL Expression,在地理数据管理、地图制图、地理处理中都得到充分应用
1.1 数据管理
主要包括栅格、矢量以及表格等数据提取、转换、更新相关
1.1.1 提取(Extract)
通过 Query Builder 实现自定义条件的数据提取,主要包含以下三个工具
工具名 操作数据类型 所在工具箱
Select 矢量 Analysis\Extract
Table Select 表格 Analysis\Extract
Extract by Attributes 栅格 Spatial\Analyst
1.1.2 转换(Conversion)
工具名 操作数据类型 所在工具箱
Feature Class To Feature Class 矢量 Conversion\To Geodatabase
Table To Table 表格 Conversion\To Geodatabase
CADLinestoPolygonFeatures CAD Samples\Conversion\To From CAD
说明:
A. Feature Class To FeatureClass 在 ArcToolbox 中可用,同时也是 ArcCatalog 中 import\Feature
Class(Single)调用的工具
B. CADLinestoPolygonFeatures 是 ESRI 自带的用 Model Builder 搭建的 Model,其中借助 Query
Builder 实现对 CAD 中满足某些条件的线、标注匹配生成面,同时把标注内容作为属性值的功能。比
如特定 CAD 图层的线和本层内点生成带标注属性的面就是在 polyline 和 annotation 都设置”layer”
= xx
卢宇森(lucy11149@163.com)
1.1.3 更新
工具名 所在位置 备注
Select By Attribut 菜单栏 Tools 借助 Field Calculator 实现自定义数据量更新
set Null Spatial Analyst\Conditional
1.2 地图制图
在 ArcMap 中做数据显示或者地图制图的时候,可以使用 SQL Expression 控制显示、标注哪些数据。
值得注意的是,这里语句出现错误可能导致 ArcMap Drawing Errors,出错后可以从数据类型等方面考虑
排查。
例如[A]字段是数字类型,在 SQL Expression 设置 [A] = ‘1’ 这样就会报如下错误
1.2.1 显示
Layer Properties\ Definition Query,实现自定义数据显示。在使用 Distributed Geodatabase 等工
具条或工具箱上工具的时候,会只对满足 Query 部分处理,比如,Definition Query 后用 Get Cout 可以
统计图层符合条件的要素数目
7 雷中华(tj051181@gmail.com)
卢宇森(lucy11149@163.com)
1.2.2 标注
Layer Properties\ Labels \ classes labels,可以实现分级标注,应用 SQL Expression 设置每一级标
注的数据
参考范例:
Lable 如何按字段来显示颜色?
http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=55808
1.3 地理处理
1.3.1 Layer 相关
地理处理中,许多工具的输入项可以是数据,也可以是图层(含图层文件及内存图层)。ArcGIS 环境下,
如果输入时图层,一般只对图层中、或者图层被选中部分进行处理。可以借助如下 layer 工具制造图层(2
中图层均可)参与地理处理
工具名 功能 所在工具箱
select layer by attribute 同菜单栏 Tools\Select by Attribute Layers and Table Views
Make Feature Layer 创建矢量内存图层,参与地理处理 同上
Make Query Table 同上,操作数据为属性 同上
8 雷中华(tj051181@gmail.com)
卢宇森(lucy11149@163.com)
1.3.2 Model Builder
借助 SQL Expression 实现相同 CAD 层的 polyline 加上 annotation 生成带标注属性的多边形
CAD Lines to Polygon Features (Samples)(参考 1.1.2)
SQL Expression 可以作为单独的变量,如下图,右键 Create Variable 新建
1.3.3 线性参考(Linear Referencing)
具体参考 Diligentpig 版主的系列讲座 ArcGIS 中的线性参考/动态分段技术
http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=56638
9 雷中华(tj051181@gmail.com)
卢宇森(lucy11149@163.com)
2 SQL Expression概览
如上图所示为 Select By Attribute 和 Query Builder 的界面。不难看出,ArcGIS 中的这个 SQL 生
成器不是通用的,前半部分固定 SELECT * FROM layer WHERE ,从第一部分我们早已了解,
这是纷繁芜杂的 SQL 中一条极为普遍也简单的查询语句,可以也只能通过 WHERE 条件 部分的补充完整
来实现 二.1 部分所提及的应用。
2.1 超简单语句-直接查询
(1)选中 dltb 层 dlbm 是”011”的要素
[DLBM] =‘011’
注意:不同类型的值写法不同,具体参见
(2)选中 dltb 层 dlbm 与 dlbm1 不相等的要素
[DLBM] <> [DLBM1]
注意:不同格式的数据字段的写法不一样,[]为 PGDB 中的写法,具体参见 ArcGIS 帮助
10 雷中华(tj051181@gmail.com)
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 11
2.2 简单语句-简单函数、运算符的使用
(1)选中 dltb 层 dlbm 前两位是 01 的要素
Left(TRIM([dlbm]),2)=‘01’
这里可以用函数对字段进行操作,具体函数使用说明可到论坛中搜索
(2)选中 dlmc 里包含 ‘果’的要素
[dlmc] like ‘*果*’
Personal Geodatabase shapefile
函数说明
Function Examples Function Examples
mod [字段] mod 2 = 0 mod mod("字段",2)=0 取余数
left left([字段],2)="Ts" substr substr("字段",1,2)=‘Ts’ 取最左侧 2 个字符
mid mid([字段],2,2)="so" substr substr("字段",2,2)=‘so’ 第 2 个起,取 2 个字符
len len([字段])= 4 char_length char_length( "字段" ) = 4 字符串长度
instr instr([字段],"o")=2 position position(‘o’ in "字段") = 2 字符串 a 在字符串 A 位置
- [字段]="tsonghua"
lower lower("字段")=‘tsonghua’
pGDB 不区分大小写;lower()转为小
写
pGDB 中是 Lcase() lcase lcase([字段])="tsonghua"
ucase ucase([字段])="TSONGHUA" upper
upper("字段
")=‘TSONGHUA’ 字符串转为大写
- [字段] > 2 ; [字段] = "2" - "字段" > 2 : "字段" = ‘2’ 字段名 pGDB 用[],fGDB 用""
#wildcard# [字段] like "2*" or [字段] like "?2" #wildcard#
"字段" like ‘2%’ or "字段"
like ‘_2’ 通配符, * & ? VS. % & _
#[字段]# [BIRTH] = #06-13-2001 19:30:00# date
"BIRTH" = date ‘2001-06-13
19:30:00’
pGDB 中#分割时间;fGDB 中在其前
加 date
注意:不同的数据格式函数的写法存在差异,以上表为例,PGDB 与 shp 的写法并不相同,在遇到不同格
式数据时需要加以判断。
范例:
属性查询—数字模糊查询
http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=60118
2.3 "and" 和 "or"
(1)选中当 dlbm 为’011’并且 dlmc 为’水田’的要素
[dlbm]=‘0110’ and [dlmc] =‘水田’
(2)选中当 dlbm 为’011’ 或者 dlmc 为’水田’的要素
[dlbm]=‘0110’ or dlmc =‘水田’
2.4 "in" 和 "not in"
(1)选中 dlbm 是’0110’或者’0120’或者’0130’的要素
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 12
可以写成
[dlbm]= ‘011’ or [dlbm]= ‘012’ or [dlbm]= ‘013’
这种情况用 in 显得方便的多
[dlbm] in (‘011’,’ 012’,’013’)
与 in 相反的为 not in
2.5 嵌套 SQL 语句
(1)随机选中 10 条记录
[OBJECTID] in (select top 10 [OBJECTID] from dltb order by rnd( [OBJECTID] ) )
(2)选中 OBJECTID 从 11 到 15 的记录
[OBJECTID] in (select top 5 OBJECTID from (select top 15 * from dltb order by OBJECTID asc) b
order by OBJECTID desc)
(2)选择地类图斑编码重复的记录记录
方法 1:选择重复要素但是会保留一个重复记录,适用于删除重复的要素
[OBJECTID] not in (select max(OBJECTID) from dltb group by dlbm)
方法 2:只要存在重复的即选中
[dlbm] in (select dlbm from dltb group by dlbm having count(*) >1)
(3)从其他 mdb 中查询
这个只适用于 pgdb 格式。这里嵌套的 sql 语句均为同一个 mdb 中的数据,如果要连接其他 mdb 中的数
据,可以用
[dlbm] in (select dlbm from [c:\tempdata.mdb].代码名称对照表)
这句话的意思是选中地类图斑层里面地类代码在 tempdata.mdb 中代码名称对照表里的 dlbm 字段中有的
所有要素
参见http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=55857
有关嵌套 sql 查询还可以看看一下帖子
http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=53458
在多个点中删除某属性值最大的前几个点
http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=54652
属性选取的问题
2.6 Null
空,在属性表里显示为
,注意和 "Null" 、 ""、0 的区别:Null 是什么都没有,各种类型的字段
都可以为 Null,判断是否为 Null 用的是 [字段] is Null 而不是 [字段] = Null
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 13
2.7 通配符(From MS Access Help)
内置模式匹配提供了一个功能丰富的工具用于比较字符串。下表显示可以与 Like 运算符一起使用的通配符
以及它们匹配的数字或字符串的数目。
模式中的字符 表达式中的匹配
? 或 _(下划线) 任意单字符
* 或 % 零个或多个字符
# 任意一位数字 (0 - 9)
[字符列表] 字符列表中的任意单字符
[!字符列表] 不在字符列表中的任意单字符
可以使用用方括号 ([ ]) 括起的一个字符或一组字符(字符列表)来匹配表达式中的任意单字符,并且
字符列表可以包括 ANSI 字符集(ANSI 字符集:Microsoft Windows 使用的 8 位字符集,允许您使用
键盘表示多达 256 个字符(0 到 255)。ASCII 字符集是 ANSI 集的子集。) (ANSI 字符集:Microsoft
Windows 使用的 8 位字符集,允许您使用键盘表示多达 256 个字符(0 到 255)。ASCII 字符集是
ANSI 集的子集。)中的几乎所有字符(包括数字)。只有在用括号括起的情况下,才能使用左方括号 ([ )、
问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符来直接匹配它们自身。不能使用组中的右方括号 ( ]) 来匹
配其自身,但可以在组外部使用右方括号作为单个字符。
除了用方括号括起的简单字符列表外,字符列表还可以通过用连字符 (-) 分隔范围的上限和下限来指
定字符范围。例如,如果在模式中使用 [A-Z],当表达式中的相应字符位置包含范围 A 到 Z 中的任意大
写字母时,则生成一个匹配。您可以在方括号中包括多个范围,且无需分隔各个范围。例如,[a-zA-Z0-9]
匹配任意字母数字字符。
请务必注意,ANSI SQL 中的通配符 (%) 和 (_) 只能在 Microsoft Access 数据库引擎和 Microsoft
Office Access 2007 OLE DB Provider 中使用。如果通过 Microsoft Office Access 2007 或 DAO 使用,
它们将被视为文字。
模式匹配的其他重要规则包括:
1.字符列表开头的感叹号 (!) 表示如果表达式中发现除字符列表中字符以外的任何字符,将生成一个匹配。
在方括号外面使用时,感叹号匹配其自身。
2.您可以在字符列表的开头(如果使用了感叹号,则在感叹号之后)或结尾使用连字符 (-) 来匹配连字符自
身。在任何其他位置,连字符标识某一范围的 ANSI 字符。
3.指定某一范围的字符时,字符必须以升序(A-Z 或 0-100)显示。[A-Z] 是有效模式,而 [Z-A] 是无效
模式。
4.字符序列 [ ] 被忽略;它被认为是零长度字符串(零长度字符串:不含字符的字符串。可以使用零长度字
符串来表明您知道该字段没有值。输入零长度字符串的方法是键入两个彼此之间没有空格的双引号 ("
")。) (零长度字符串:不含字符的字符串。可以使用零长度字符串来表明您知道该字段没有值。输入零长
度字符串的方法是键入两个彼此之间没有空格的双引号 (" ")。) ("")。
卢宇森(lucy11149@163.com)
雷中华(tj051181@gmail.com) 14
Like(From MS Access Help)
匹配的种类 模式 匹配(返回 True) 不匹配(返回 False)
多个字符 a*a aa、aBa、aBBBa aBC
*ab* abc、AABB、Xab aZb、bac
特殊字符 a[*]a a*a aaa
多个字符 ab* abcdefg、abc cab、aab
单个字符 a?a aaa、a3a、aBa aBBBa
单个数字 a#a a0a、a1a、a2a aaa、a10a
字符范围 [a-z] f、p、j 2、&
范围外 [!a-z] 9、&、% b、a
非数字 [!0-9] A、a、&、~ 0、1、9
组合 a[!b-m]# An9、az0、a99 abc、aj0
以下示例返回以字母 P 开头、后跟 A 和 F 之间任何字母以及三个数字的数据:
Like “P[A-F]###”
2.8 复杂 sql 语句
以土地利用现状数据库为例,要通过属性选择出地类图斑层扣除线状地物面积和线状地物层坐落在该
图斑内的现状地物面积的和不相等的地类图斑
[OBJECTID] in (select objectid from
(select objectid, xzqdm as 坐落单位单位代码,tbh as Dltbbh,dltb_xzdwmj as 地类图斑层线状地物面
积,xzdw_mj as 线状地物层线状地物面积,
iif(abs((dltb_xzdwmj-xzdw_mj))>0.0001,abs(dltb_xzdwmj-xzdw_mj),0) as DIfferent
from
(select a.objectid, a.zldwdm as xzqdm,a.xzdwmj as dltb_xzdwmj,a.tbbh as tbh,b.xzdwmj as
xzdw_mj from dltb a inner join
(select sum(xwmj) as xzdwmj,kctbbh1,kctbdwdm1 from
(SELECT sum(xzdwmj*kcbl) as xwmj,kctbbh1,kctbdwdm1 from xzdw
group by kctbbh1,kctbdwdm1
union all
SELECT sum(xzdwmj*(1-kcbl)) as xwmj,kctbbh2 as kctbbh1,kctbdwdm2 as kctbdwdm1 from xzdw
group by kctbbh2,kctbdwdm2
)group by kctbbh1,kctbdwdm1 order by kctbbh1) b
on a.zldwdm=b.kctbdwdm1 and a.tbbh=b.kctbbh1))
where abs(DIfferent)>0.0001 order by objectid)
SQL Expression 中可以写出写出非常复杂的语句,来完成表内表间的复杂查询。
卢宇森(lucy11149@163.com)
三 Field Calculator中使用SQL语句
ArcGIS 帮助中这样写道:
SQL 语法在 Field Calculator 中不适用。
涉及查询的 SQL Expression,ESRI 已经内嵌到所需的工具中,对于某些可以执行 SQL 的数据库(文件)
来说,能够在 Field Calculator 中进行语句,特别是更新语句的执行具有深远意义。我们知道, Field
Calculator 中可以使用 AO 底层细颗粒来实现属性、图形的操作。那么我们能不能借助 AO 来实现 SQL 语
句在 Field Calculator 中应用呢?
1 利用 SQL 语句把 dlbm 的值赋给 dlbm1
思路:利用 IWorkspace Interface ,ExecuteSQL Method,来实现 SQL 语句在 Field Calcula