5.6. 创建查询和视图¶
DB Manager有一个SQL窗口,该窗口允许对数据库执行SQL查询。本节将说明如何使用SQL窗口查询表并在SpatiaLite中创建空间视图。
不同的数据库支持不同的SQL命令。
SQLite支持大部分(但不是全部)标准SQL。
有关支持的SQL操作的完整列表,请访问http://www.sqlite.org/sessions/lang.html。
5.6.1. 创建SQL查询¶
要创建SQL查询,请执行以下步骤:
1.通过单击 Database 下的 "DB Manager" 来打开 DB Manager 。
2.在 "Tree" 面板中,导航到并选择要在其上执行SQL查询的数据库。
3.引导到 f2 ,打开SQL窗口。
,或按键盘上的4.在顶部的文本框中输入SQL查询。点击键盘上的 Execute 按钮,或 f5 ,对数据库执行SQL查询。查询结果将显示在 底部的结果框中,并且受影响的行数和执行时间将显示在 Execute 按钮。如 图 5.12 显示了成功运行查询的示例。

图 5.12 SQL查询¶
5.通过在顶部的文本框中输入名称,然后单击 Store 按钮。要加载并运行存储的查询,请在顶部的下拉框中选择 查询名称。要删除存储的查询,请在下拉框中选择该查询,然后单击 Delete 按钮。
5.6.2. 创建空间视图¶
使用DB Manager中的SQL窗口在SpatiaLite数据库上创建空间视图需要两步。 第一步是创建包含具有唯一标识符的字段和几何体列的视图。第二步是在 "views_geometry_columns" 表中插入一跳新纪录, 以将视图注册为空间视图。在本节中,我们将在瀑布表上创建一个空间视图,以显示 "Mowich Lake quad" 中的所有瀑布; 要执行此操作,请执行以下步骤:
1.通过单击 Database 下的 "DB Manager" 来打开 DB Manager 。
2.在 "Tree" 面板中,导航到并选择 "GiffordPinochet.sqlite" 数据库。
3.导航到 f2 ,打开SQL窗口。
窗口,或按键盘上的4.输入以下查询:
CREATE VIEW mowich_lake_waterfalls AS
SELECT w.id as ROWID, w.NAME, w.TYPE, w.geom from Waterfalls as w
WHERE w.quadname = 'Mowich Lake';
在 CREATE VIEW 查询中,两个字段必须包含在 "SELECT" 语句:唯一标识符字段(应重命名为ROWID)和几何字段。 您必须将唯一标识符重命名为ROWID,否则该视图无法注册为空间视图。
5.单击 Execute 按钮创建视图。以下屏幕快照显示了 "Waterfalls" 表的成功编写和执行的视图:如 图 5.13 。

图 5.13 Waterfalls表查询结果¶
现在已经创建了视图,我们需要通过在 "views_geometry_columns" 表中插入新行来将其注册为空间视图。 该表将视图的几何图形链接到其选择的表的几何图形。
6.在 "SQL" 窗口中,单击 Clear 按钮清除SQL查询文本框。
7.输入以下查询:
INSERT INTO views_geometry_columns (view_name, view_geometry, view_rowid, f_table_name,
f_geometry_column, read_only) VALUES('mowich_lake_waterfalls', 'geom', 'rowid', 'waterfalls',
'geom', 1);
在这 INSERT 查询,六个字段中插入了值:
view_name :这包含要注册为空间视图的视图的名称。
view_geometry :它包含视图中几何体字段的名称。
view_rowid :它包含 罗维德 字段。请注意 must 是 罗维德 . 如果 罗维德 字段被命名为其他名称, 您将需要使用 罗维德 字段。
f_table_name :视图所选表的名称。
f_geometry_column :视图所选表中几何字段的名称。
read_only :在此字段中,输入 1 将空间视图设置为只读并输入 0 使空间视图读/写。请注意,从QGIS的2.6.0版开始, 在QGIS桌面中不能编辑设置为读/写的视图。但是,视图在某些插件中或使用SQL查询时可能是可编辑的。
8.单击 Execute 按钮创建视图。以下屏幕截图显示了 "Waterfalls" 表的成功编写和执行的视图:如 图 5.14 。

图 5.14 Waterfalls表查询结果¶
该视图现在注册为空间视图,可以像任何其他空间表一样添加到QGIS桌面画布中。
5.6.3. 删除空间视图¶
删除空间视图需要删除空间视图表并删除 "view_geometry_columns" 表中的相关条目。
要删除空间视图表,请使用 "SQL DROP VIEW" 命令。例如,删除 "mowich_lake_waterfalls" 视图, 需要执行以下SQL命令:
DROP VIEW mowich_lake_waterfalls
删除视图后,最后一步是使用 "SQL DELETE" 命令删除 "view_geometry_columns" 表中的相关条目。 例如,要删除与mowich_lake_waterfalls视图相关的条目,您将需要执行以下SQL命令:
- ::
DELETE FROM views_geometry_columns
WHERE view_name = 'mowich_lake_waterfalls';