📄 mapinfo重点及难点讲解1.htm
字号:
<P align=justify><FONT color=#000000>Williamette 1980人口,1990人口 478002
James Foster</FONT></P>
<P align=justify><FONT color=#000000>Mason 1980人口,1990人口 478003 Wick
mason</FONT></P>
<P align=justify><FONT color=#000000> </FONT></P>
<P align=justify></FONT><FONT face=宋体 color=#000000>Counties</FONT><FONT
color=#000000><FONT face=宋体 size=3>表</FONT><FONT face=宋体> Order表
</FONT></FONT><FONT face=宋体 size=3></P>
<P align=justify><FONT color=#000000> </FONT></P>
<P align=justify></FONT><FONT face=宋体><FONT color=#000000>在SQL Select
对话框中,你用Where Condition区告诉MapInfo如何联接这两个表。在这个区内填写如下:</FONT></P>
<P align=justify><FONT color=#000000>Select Columns: *</FONT></P>
<P align=justify><FONT color=#000000>Frome Table:
Counties,Order</FONT></P>
<P align=justify><FONT color=#000000>Where Condition:
Counties.Countyname=Order.county</FONT></P>
<P align=justify><FONT color=#000000>表名(在From
Tables区)的顺序是重要的。如果两个表都含有Map对象,结果表将只含有排列在From
Tables区中第一个表的Map对象。另外,当查询完成时,MapInfo会自动选择列在From
Tables区第一个表的部分或全部行。这样,在前例中,MapInfo会选择Counties表的部分或全部行。其结果也会包括从Orders表中拷贝来的数据,但Orders表本身不会被选择。</FONT></P>
<P align=justify><FONT color=#000000>在Where Condition区中,列的顺序必须与From
Tables区中表的顺序相匹配。在上例中,From Tables区把Counties表放到了Qoders表之前,因此,Where
Condition区必须把Counties.CountiName列放在Orders.County列之前。如果颠倒这两个表在From
Tables区内的顺序,你也必须颠倒在Where Contition区内列名的顺序。</FONT></P>
<P align=justify><FONT
color=#000000>当你联接两个表时,结果表的行数取决两个匹配的好坏。假定你有一个10000行的Order表,要把这个Order表与有50行的States表联接。结果表可能有10000行之多。但是如果Orders表中的某些行没有与States表中的行相匹配。结果表就会少于10000行。因此,如果Orders表中有400行无state名(或许由于数据输入错误),并且如果这个关联是依赖State名,结果表就可能只有9600个行了。</FONT></P>
<P align=justify><FONT color=#000000>当SQL
Select对话框联接两个表时,你指定的如何联接这两个表的子句(Clause(s))必须放在Where
Condition区内的其它子名之前。</FONT></P>
<P align=justify><FONT color=#000000>你可以用Update Column来修改SQL
Select多表联接的结果表。当你要更新一个表中带有另一个表的信息的一个列时,你可以:</FONT></P>
<OL>
<LI><FONT color=#000000>用SQL Select联接这两个表。</FONT>
<LI><FONT color=#000000>针对Selection表使用Update Column。</FONT> </LI></OL>
<BLOCKQUOTE>
<P align=justify><FONT
color=#000000>更新会自动影响到相应的基础表。</FONT></P></BLOCKQUOTE>
<P align=justify><FONT color=#000000>(4)次选择(Subselects)</FONT></P>
<P align=justify><FONT color=#000000>MapInfo允许SQL Select中的再次选择。再选择是放在SQL
Select对话框Where
Condition区内里面的一个选择语句。MapInfo首先处理Subselects,然后用这个Subselects的结果去处理主要的SQL
Select。</FONT></P>
<P align=justify><FONT
color=#000000>例如,假定你要选出1990年人口大于全国各州平均值的全部州。换句话说,如果平均州人口是5百万,你要选出所有平均人口大于5百万的州。在实行中,你要在Where
Condition区中使用如下的过滤标准:</FONT></P>
<P align=justify><FONT color=#000000>Pop_1990>平均人口</FONT></P>
<P align=justify><FONT
color=#000000>然而,你并不知道那平均值是多少。但是,你知道MapInfo能够用如下集合表达式计算出那个平均值:</FONT></P>
<P align=justify><FONT color=#000000>Avg(Pop_199)</FONT></P>
<P align=justify><FONT color=#000000>为了计算平均州人口,要在Where
Condition区输入一个再选择(Subselect)。Where
Condition区那时能够比较对Pop_1990列再选择的结果。要进行那样一种查询,如下填写SQL Select对话框。</FONT></P>
<P align=justify><FONT color=#000000>Select Columns: *</FONT></P>
<P align=justify><FONT color=#000000>From Table: States</FONT></P>
<P align=justify><FONT color=#000000>Where Condition: Pop_1990>(Sekect
Avg(Pop_1990) From States)</FONT></P>
<P align=justify><FONT color=#000000>再选择是在Where
Condition区内,在>操作符之后。再选择必须用园括号括起来。</FONT></P>
<P align=justify><FONT
color=#000000>最有用的再选择包括一个Select子句,一个from子句和一个Where子句,象下面这样:</FONT></P>
<P align=justify><FONT
color=#000000>Select某些列from某些表where某些条件存在。</FONT></P>
<P align=justify><FONT color=#000000>考虑如下的SQL
Select,它选择各州中人口大于4000000的全部城市:</FONT></P>
<P align=justify><FONT color=#000000>Select Columns: *</FONT></P>
<P align=justify><FONT color=#000000>From table: cities</FONT></P>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align=justify><FONT color=#000000>Where Condition: obj
within any(Select obj from states where
Pop_1990>4000000)</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE>
<P align=justify><FONT
color=#000000>再选择返回代表1990年人口大于400000的全部州的地理对象。然后主选择语句设到被再选择选中了的州内全部城市。注意:主选择语句用了一个地理操作符(Within)来做这个事情。</FONT></P>
<P align=justify><FONT
color=#000000>虽然前一查询用两个表,States表和Cities表,但Cities是出现From
Tables区的仅有的表。这是因为在再选择中使用了States。如果一个表仅仅是被用于再选择内,那么这个表的表名不需要出现在From
Tables区中。</FONT></P>
<P align=justify><FONT
color=#000000>在下一个例子中,我们选择与田西纳州相交的所有州,换言之,所有相邻的州。</FONT></P>
<P align=justify><FONT color=#000000>Select columns: *</FONT></P>
<P align=justify><FONT color=#000000>From tables: states</FONT></P>
<P align=justify><FONT color=#000000>Where conditions: obj
Intersects(select obj from states where </FONT></P>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align=justify></FONT><FONT face=宋体
color=#000000>state=</FONT><FONT color=#000000>”<FONT
face=宋体>TN</FONT>”</FONT></P></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE></BLOCKQUOTE>
<P><FONT face=宋体><FONT color=#000000> </FONT></P>
<P align=justify><FONT color=#000000>首先,MapInfo执行再选择:</FONT></P>
<P align=justify></FONT><FONT face=宋体 color=#000000>Selectobj from states
where state=</FONT><FONT color=#000000>”<FONT
face=宋体>TN</FONT>”</FONT></P>
<P><FONT face=宋体><FONT color=#000000> </FONT></P>
<P align=justify><FONT color=#000000>再选择找到了代表田纳西州的图形对象。然后主Where
condition找到了States表中与代表田纳西州的图形相交的全部对象。你可以用类似的查询选择与某给定街道相交的全部街道。</FONT></P>
<P align=justify><FONT color=#000000>现考虑这个例子:</FONT></P>
<P align=justify><FONT color=#000000>Select columns: *</FONT></P>
<P align=justify><FONT color=#000000>From Tables: County</FONT></P>
<P align=justify><FONT color=#000000>Where Condition: County.obj contains
any(select obj from dealers)</FONT></P>
<P align=justify><FONT color=#000000>这个查询找到含有销售商的所有县。主Where
condition有这样的一个形式:</FONT></P>
<P align=justify><FONT color=#000000>一个县对象Contains一个经销商对象。</FONT></P>
<P align=justify><FONT color=#000000>经销商对象组是由再选择:Select obj from
dealers产生的。MapInfo选择代表含有经销商的各个县对象的行。</FONT></P>
<P align=justify><FONT color=#000000>最后,对于再选择有几点注意事项:</FONT></P>
<UL>
<LI><FONT color=#000000>在再选择中你可以使用在From
Table区中未列出的表.但是你必须把这些表列在你的再选择的From子句中(如前面例子所示那样)。</FONT>
<LI></FONT><FONT color=#000000><FONT face=宋体>当再选择带有关键字</FONT>”<FONT
face=宋体>any</FONT>”<FONT face=宋体>或</FONT>”<FONT
face=宋体>all</FONT>”</FONT><FONT face=宋体
color=#000000>时,再选择必须并且只能返回一个列。下面的句例是无效的,因为它试图返回两个列(State_name
和Pop_1990):</FONT><FONT face=宋体> </LI></UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align=justify><FONT color=#000000>Any(Select state_name,pop_1990
from state)</FONT></P></BLOCKQUOTE></BLOCKQUOTE>
<UL>
<LI></FONT><FONT color=#000000><FONT face=宋体>当再选择不带</FONT>”<FONT
face=宋体>any</FONT>”</FONT><FONT face=宋体
color=#000000>、“all”或“in”时,再选择必须准确返回一个行的值。下面的例子是无效的,因为再选择返回了一组行:</FONT><FONT
face=宋体> </LI></UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align=justify><FONT color=#000000>obj within(Select obj from state
where Pop_1990>2000000)</FONT></P></BLOCKQUOTE></BLOCKQUOTE>
<UL>
<LI></FONT><FONT color=#000000><FONT face=宋体>当再选择不用</FONT>”<FONT
face=宋体>any</FONT>”</FONT><FONT face=宋体
color=#000000>、“all”或“in”时,你不能在再选择中使用Group by Columns子句。</FONT><FONT
face=宋体>
<LI><FONT color=#000000>你不能有嵌套的再选择,即是说,每个Select语句你只能有一个再选择。</FONT>
</LI></UL>
<BLOCKQUOTE>
<P align=justify><FONT color=#000000>设置过滤标准</FONT></P>
<P align=justify><FONT
color=#000000>一个过滤标准是一个逻辑表达式,它通常把一个列值与某个另外的值作比较。例如,以下的过滤标准用大于操作符(>)测试订单金额列是否有大于100的值。</FONT></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -