UNION
SELECT Tname FROM Teacher;
交操作:形式
<查询块> INTERSECT <查询块>
参加INTERSECT操作的各结果表的列数必须相同;对应项的数据类型也必须相同
[例48] 查询计算机科学系的学生与年龄不大于19岁的学生的交集。 SELECT *
FROM Student WHERE Sdept= 'CS' INTERSECT SELECT *
FROM Student
WHERE Sage<=19;
本例实际上就是查询计算机科学系中年龄不大于19岁的学生。
SELECT *
FROM Student
WHERE Sdept= 'CS' AND
Sage<=19;
[例49] 查询选修课程1的学生集合与选修课程2的学生集合的交集
SELECT Sno FROM SC
WHERE Cno=' 1 ' INTERSECT SELECT Sno FROM SC
WHERE Cno= ' 2 ';
本例实际上是查询既选修了课程1又选修了课程2的学生。用嵌套查询实现。
SELECT Sno FROM SC
WHERE Cno=' 1 ' AND Sno IN (SELECT Sno
FROM
Sno WHERE Cno=' 2 ');
[例50] 查询学生姓名与教师姓名的交集。
SELECT Sname FROM Student INTERSECT SELECT Tname FROM Teacher;
本例实际上是查询学校中与教师同名的学生姓名。 SELECT DISTINCT Sname FROM Student
WHERE Sname IN
(SELECT Tname FROM Teacher); 差操作:形式
<查询块> EXCEPT <查询块>
参加EXCEPT操作的各结果表的列数必须相同;对应项的数据类型也必须相同
[例51] 查询计算机科学系的学生与年龄不大于19岁的学生的差集。 SELECT *
FROM Student WHERE Sdept= 'CS' EXCEPT SELECT *
FROM Student WHERE Sage<=19;
本例实际上是查询计算机科学系中年龄大于19岁的学生
SELECT *
FROM Student WHERE Sdept= 'CS' AND
Sage>19;
[例52] 查询学生姓名与教师姓名的差集。 SELECT Sname FROM Student
EXCEPT
SELECT Tname FROM Teacher;
本例实际上是查询学校中未与教师同名的学生姓名。 SELECT DISTINCT Sname FROM Student
WHERE Sname NOT IN (SELECT Tname FROM Teacher); SELECT语句的一般格式 SELECT [ALL|DISTINCT]
<目标列表达式> [别名] [ ,<目标列表达式> [别
名]] …
FROM <表名或视图名> [别名]
[ ,<表名或视图名> [别名]] …
[WHERE <条件表达式>]
[GROUP BY <列名1>[,<列名1’>] ... [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]
[,<列名2’> [ASC|DESC] ] … ]; SELECT目标列 目标列表达式格式 (1) *
(2) [ <表名>.] *
(3) COUNT(DISTINCT|ALL)
(4) [<表名>.]<属性列名表达式>[,[<表名>.]<属性列名表达式>] …
<属性列名表达式>:由属性列、作用于属性列的集函数和常量的任意算术运算(+,-,*,/)组成的运算公式。
数据更新
插入数据 两种插入数据方式——插入单个元组;插入子查询结果 插入单个元组 语句格式 INSERT INTO <表名> [(<属性列1>[,<属性列2 >…)] SET Sage=22
VALUES (<常量1> [,<常量2>] … ); 功能:将新元组插入指定表中。
[例1] 将一个新学生记录
(学号:95020;姓名:陈冬;性别:男; 年龄:18岁;所在系:IS)插入到Student表中。 INSERT
INTO Student
VALUES ('95020','陈冬','男' ,18 , 'IS'); [例2] 插入一条选课记录( '95020','1 ')。 INSERT
INTO SC(Sno,Cno)
VALUES (' 95020 ',' 1 '); 新插入的记录在Grade列上取值为空。 INTO子句——指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致;没有指定属性列:表示要插入的是一个完整的元组,且属性列属性与表定义中的顺序一致;指定部分属性列:插入的元组在其余属性列上取空值;VALUES子句:提供的值必须与INTO子句匹配:值的个数;值的类型 插入子查询结果 语句格式 INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )] 子查询;功能:将子查询结果插入指定表中
[例3] 对每一个系,求学生的平均年龄,并把结果存入数据库。 第一步:建表
CREATE TABLE Deptage ( Sdept CHAR(15) /* 系名*/ Avgage SMALLINT); /*学生平均年龄*/ 第二步:插入数据 INSERT
INTO Deptage(Sdept,Avgage) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept; 数据更新
修改数据:语句格式 UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]… [WHERE <条件>];
功能:修改指定表中满足WHERE子句条件的元组 三种修改方式:修改某一个元组的值;修改多个元组的值;带子查询的修改语句 修改某一个元组的值
[例4] 将学生95001的年龄改为22岁。
UPDATE Student
WHERE Sno=' 95001 '; 修改某一个元组的值
[例4] 将学生95001的年龄改为22岁。 UPDATE Student SET Sage=22
WHERE Sno=' 95001 '; 修改多个元组的值
[例5] 将所有学生的年龄增加1岁。 UPDATE Student
SET Sage= Sage+1;
[例6] 将信息系所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1
WHERE Sdept=' IS '; 带子查询的修改语句
[例7] 将计算机科学系全体学生的成绩臵零。
UPDATE SC
SET Grade=0 WHERE 'CS'=
(SELETE Sdept FROM Student
WHERE Student.Sno = SC.Sno); 删除数据 DELETE
FROM <表名> [WHERE <条件>];
功能:删除指定表中满足WHERE子句条件的元组;WHERE子句:指定要删除的元组;缺省表示要修改表中的所
有元组 三种删除方式:删除某一个元组的值;删除多个元组的值;带子查询的删除语句
删除某一个元组的值
[例8] 删除学号为95019的学生记录。
DELETE
FROM Student
WHERE Sno='95019';
删除多个元组的值
[例9] 删除2号课程的所有选课记录。 DELETE FROM SC;
WHERE Cno='2';
[例10] 删除所有的学生选课记录。 DELETE FROM SC;
带子查询的删除语句
[例11] 删除计算机科学系所有学生的选课记录。 DELETE FROM SC
WHERE 'CS'= (SELETE Sdept FROM Student
WHERE Student.Sno=SC.Sno);
第四章 空间信息查询 信息查询 概念
查询什么——空间查询的一般问题是“有没有?”、“是什么?”、“在什么地方?”、“怎样(到达)?”
查询对象:图形中的信息;属性表中的信息;其它信息
一般问题是“某图元代表什么实体,有什么属性”、“处于什么位臵、距离、路径”、“一定范围内包含的地物,地物之间的关系等”。
意义 信息管理:通过查询可以获取特定数据,进行信息管理和数据更新。特定信息提取:通过查询提取需要的信息,据弃无关的信息,便于使用。空间分析基础:查询结果一般是对所需查找的信息及数据的报告,研究需要对这些数据单独提出进行相关分析。 空间数据库中的信息 分类
空间位臵和形态:对象所在的地理区域,对象的几何和属性特征。空间关系和关联:空间对象间的拓扑关系。空间分布规律:特定类别地物分布在特定的区域,如电子市场、娱乐场所、饮食街等。时空演化:通过时间空间数据分析,可以研究和揭示事物发展演化的规律。
空间索引 概念
空间索引就是指依据空间对象的位臵和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构.其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空间对象实体的指针。
作用:空间索引介于空间操作算法和空间对象之间,它通过筛选作用,大量与特定空间操作无关的空间对象被排除,从而提高空间操作的速度和效率。空间索
引的性能的优劣直接影响空间数据库和地理信息系统的整体性能,它是空间数据库和地理信息系统的一项关键技术。
特点:索引对象的无序性:空间对象没有明确次序。当确定某对象在一个子空间内,需要逐个进行比较。索引对象的不规则性:空间对象不是规则图形。需要适当选取规则图形近似。例如,选取平行于坐标轴的矩形。索引对象的交叉性:空间对象可以交叉或者重叠。一个对象可能属于多个子空间,需要多路检索。例如:查找经过河南省的所有河流。常规方法:检查所有河流和河南省省界是否相交。缺点:用实际空间对象比较,算法复杂,计算开销大、IO开销大。索引方法:记录河流和省界的外接矩形。用外接矩形进行比较。
将空间位臵作为一个属性放入关系表中;建立一个空间索引层
cell
空间索引层
地理要素层
空间属性表描述要素的一般信息,空间索引表描述要素所在格网的信息,要素描述表描述要素的点数,范围等信息,三张表通过FID(Feature ID)关联
常见的空间索引 常见空间索引一般是自顶向下、逐级划分空间的各种数据结构空间索引,比较有代表性的包括BSP树、R树、R+树和CELL树等。此外,结构较为简单的格网型空间索引有着广泛的应用。 格网索引:基本思想是将研究区域用横竖线条划分大小相等和不等的格网,记录每一个格网所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大大地加速了空间索引的查询速度。
为了便于建立空间索引的线性表,每个格网按一定规律进行编码,建立码与空间实体的关系,该关系表就成为格网索引文件。每个要素在一个或者多个网格中,每个网格可以包含多个要素。
R树和R+树索引 R树根据地物的最小外接矩形建立,可以直接对空间中占据一定范围的空间对象进行索引。R树索引设计虚拟的矩形目标,将空间目标包含在矩形内。这些矩形作为空间索引,含有包含的空间对象的指针。RECT(ID,MinX,MaxX,MinY,MaxY)MBR(Minimum Bounding Box 最小外接矩形)
R树 在进行空间数据检索时,先判断哪些矩形落在检索窗口内,再进一步判断哪些目标是被检索的内容。
在R树构造中,要求虚拟矩形尽可能少重叠,并且一个空间对象通常仅仅被一个矩形包含。实际中很难保证这种情况。空间对象千姿百态,最小矩形通常范围重叠。于是提出了R树的改进,R+树。
R+树 R+树允许虚拟矩形相互重叠,并允许一个空间目标被多个虚拟矩形包含。
空间查询方式 图查文(图形查询属性);文查图(属性查询图形);空间关系的查询(面—点、面—线、面—面、线—点、线—线查询 );逻辑查询(SQL查询) 图查文 图文互查是GIS中最常用的查询。 如:在中国行政区图查人口>4000万的省。
1)和一般SQL查询类似,构建SQL查询语句进行查询。 2)查询到结果后,利用图形和属性的对应关系,再图上表示出结果。
文查图 一般GIS软件提供?INFO?工具。用点选、区域圈选、多边形选择、矩形选择的方式选中地物,并显示出查询对象的属性列表。1)利用空间索引,在数据库中快速检索被选空间实体。2)根据实体和属性的连接关系得到所查询实体的属性列表。
MapInfo软件中点目标的几何参数查询
MapInfo软件中线目标的几何参数查询
Mapinfo软件中面状目标的几何参数查询
是指给定一个点或一个几何图形,检索出该图形范围内的空间对象以及相应的属性。这种查询方式又称为图形查询属性的方式。
MapInfo软件中图形查属性的表达方式 ArcView软件中图形查属性的表达方式
空间关系的查询 通过空间关系查询和定位空间实