地理数据库 - 图文(4)

2019-09-01 16:55

基本表(BASE TABLE):是独立存在的表,一个关系对应一个基本表。 视图(VIEW):是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。

SQL三级模式结构① 基本表构成了数据库的模式。② 视图构成了数据库的外模式。③ 数据库的存储文件和它们的索引文件构成了关系数据库的内模式。

SQL应用现状:SQL是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。大部分DBMS产品都支持SQL,成为操作数据库的标准语言。无论是 Oracle,SQL Server 等大型的DBMS,还是像Access,Visual FoxPro, PowerBuilder 这些微机上常用的DBMS,都支持SQL查询语言。 有方言,支持程度不同。

SQL的数据定义 SQL基本规则和数据类型

SQL对象命名约定:SQL对象包括数据库模式、表、视图、属性名等。这些对象名必须符合一定规则或约定,一般遵守下列规则:数据对象名字符长度有限制(在MySQL为64个字符,在Oracle为30个字符) 。数据对象名应以字母开头,其余字符可以由字母、数字、下划线组成。(MySQL:可以是任何数字、字符或符号,不能全部由数字组成;Oracle:任何字符 ) 在编写SQL语句时,应遵从某些准则以提高语句的可读性:SQL语句对大小写不敏感。为提高可读性,关键字通常大写。SQL语句可写成一行或多行,习惯上每个子句占用一行。关键字不能在行与行之间分开。SQL语句的结束符为分号“;”分号必须放在语句中的最后一个子句后面,但可以不在同一行。 在SQL语句语法格式中的一些约定符号:尖括号?< >?中的内容为实际语义。例如:<表名>意味着必须在此处填写一个表名。中括号?[ ]?中的内容为任选项。例如:[UNIQUE]意味着UNIQUE是可写可不写。 大括号?{ }?与竖线?|?表明此处为选择项,在所列出的各项中仅需选择一项。例如:{ A | B | C | D }意思是A、B、C、D中取其一。SQL中的数据项分隔符为?,?。

SQL基本数据类型

SQL模式的创建和撤消

模式概念 模式(schema)是一个命了名的对象的集

合,如表、视图和索引等。

当一个用户被创建时,一个与之相对应的模式也被创建。一个用户只能与一个模式相关。在数据库中,模式对象包括:表(tables)。视图(views)。索引(indexes)。约束(constraints)等。

SQL模式的创建可用CREATE SCHEMA语句定义,其基

本句法如下:

CREATE SCHEMA〈模式名〉 AUTHORIZATION〈用户名〉 定义模式例子

[例]定义一个学生-课程模式S-T

CREATE SCHEMA “S-T” AUTHORIZATION WANG; 为用户WANG定义了一个模式S-T

[例] CREATE SCHEMA AUTHORIZATION WANG; <模式名>隐含为用户名WANG

如果没有指定<模式名>那么<模式名>隐含为<用户名> 删除模式

DROP SCHEMA <模式名> CASCADE(级联)

删除模式的同时把该模式中所有的数据库对象全部删除。

RESTRICT(限制)

如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。 当该模式中没有任何下属的对象时才能执行。 删除模式(续)

[例] DROP SCHEMA ZHANG CASCADE; 删除模式ZHANG

同时该模式中定义的表TAB1也被删除 基本表的创建、修改和删除 定义基本表

CREATE TABLE <表名>

(<列名> <数据类型>[ <列级完整性约束条件> ] [,<列名> <数据类型>[ <列级完整性约束条件>] ] … [,<表级完整性约束条件> ] ); 基本表的创建 常用完整性约束

主码约束: PRIMARY KEY 唯一性约束:UNIQUE 非空值约束:NOT NULL 学生-课程 数据库

学生-课程模式 S-T : (教材82页)

学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade)

例题[例] 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。

CREATE TABLE Student

(Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(2) , Sage INT,

Sdept CHAR(15));

[练习] 建立“学生”表Student,学号是主码,姓名取值唯一。

CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); 删除基本表

DROP TABLE <表名> [RESTRICT | CASCADE] ;

基本表删除CASCADE 删除基本表时,基本表定义被删除,数据被删除表上建立的索引、视图、触发器等一般也将被删除 。缺省是RESTRICT删除。 例题

[例] 删除Student表

DROP TABLE Student ;

当某个基本表无用时,可将其删除。删除后,该表中的数据和在此表上所建的索引都被删除,而建立在该表上的视图不会随之删除,系统将继续保留其定义,但已无法使用。如果重新恢复该表,这些视图可重新使用。只能删除自己建立的表,不能删除其他用户所建的表。 修改基本表

ALTER TABLE <表名>

[ ADD <新列名> <数据类型> [ 完整性约束 ] ] [ DROP <完整性约束名> ]

[ ALTER COLUMN <列名> <数据类型> ];

<表名>:要修改的基本表;ADD子句:增加新列和新的

完整性约束条件;DROP子句:删除指定的完整性约束条件;ALTER COLUMN子句:用于修改列名和数据类型 增加属性列

[例]向Student表增加“入学时间”列,其数据类型为日期型。

ALTER TABLE Student ADD Scome DATE;

不论基本表中原来是否已有数据,新增加的列一律为空值。

删除属性列

[例]向Student表删除“姓名”列。 ALTER TABLE Student Drop Sname;

[例] 将年龄的数据类型改为半字长整数。

ALTER TABLE Student ALTER COLUMN Sage SMALLINT; 注:修改原有的列定义有可能会破坏已有数据 [例] 删除学生姓名必须取唯一值的约束。 ALTER TABLE Student DROP UNIQUE(Sname); 例题[例]把S表中的SNO列加宽到8位字符宽度 ALTER TABLE S ALTER COLUMN SNO CHAR(8);

注意:使用此方式有如下一些限制:①不能改变列名;②不能将含有空值的列的定义修改为NOT NULL约束;③若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;④只能修改NULL|NOT NULL约束,其它类型的约束在修改之前必须先删除,然后再重新添加修改过的约束定义。 建立与删除索引

索引 索引是数据库检索的常用手段.实际上就是记录的关键字与其相应地址的对应表。

索引的作用可归纳为:1. 加快查询速度;2. 保证行的唯一性。

建立索引是加快查询速度的有效手段 建立索引——DBA或表的属主(即建立表的人)根据需要建立;有些DBMS自动建立以下列上的索引 PRIMARY KEY UNIQUE

维护索引——DBMS自动完成

使用索引——DBMS自动选择是否使用索引以及使用哪些索引 建立索引 语句格式

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…); 用<表名>指定要建索引的基本表名字;索引可以建立在该表的一列或多列上;用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录;CLUSTER表示要建立的索引是聚簇索引:索引项的顺序与记录

的物理顺序一致的索引。

例题[例]为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。

CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno);

CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

唯一值索引

对于已含重复值的属性列不能建UNIQUE索引。对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值,相当于增加了一个UNIQUE约束。

聚簇索引

建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放,即聚簇索引的索引项顺序与表中记录的物理顺序一致。

例:CREATE CLUSTER INDEX Stusname ON

Student(Sname);

在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放 在一个基本表上最多只能建立一个聚簇索引;聚簇索引的用途:对于某些类型的查询,可以提高查询效率;聚簇索引的适用范围;很少对基表进行增删操作;很少对其中的变长列进行修改操作 ;经常更新的列不适合聚簇索引 删除索引

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述。

[例] 删除Student表的Stusname索引。 DROP INDEX Stusname; 总结

本节问题

1、试叙述SQL语言的特点

2、了解SQL的四大功能。

3、掌握模式、表、索引的定义、修改和删除。

第三章 关系数据库标准语言SQL

概述

语句格式

SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] …

FROM <表名或视图名>[, <表名或视图名> ] … [ WHERE <条件表达式> ]

[ GROUP BY <列名1> [ HAVING <条件表达式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ]; 语句格式

SELECT子句:指定要显示的属性列

FROM子句:指定查询对象(基本表或视图)

WHERE子句:指定查询条件

GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。

HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序

单表查询

查询仅涉及一个表,是一种最简单的查询操作 一、选择表中的若干列二、选择表中的若干元组三、对查询结果排序四、使用聚集函数五、对查询结果分组

选择表中的若干列 查询指定列

[例1] 查询全体学生的学号与姓名。 SELECT Sno,Sname

FROM Student;

查询全部列

选出所有属性列:

在SELECT关键字后面列出所有列名 将<目标列表达式>指定为 *

[例3] 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或 SELECT *

FROM Student;

查询经过计算的值

SELECT子句的<目标列表达式>可以为:算术表达式;字符串常量;函数;列别名

SELECT子句的<目标列表达式>可以为:算术表达式;字符串常量;函数;列别名

[例4] 查全体学生的姓名及其出生年份。

SELECT Sname,2008-Sage /*假定当年的年份为2008年*/

FROM Student;

输出结果: Sname 2008-Sage 李勇 1988 刘晨 1989 王敏 1990 张立 1989

[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名

SELECT Sname,?Year of Birth: ',2008-Sage,

(1) 比较大小

在WHERE子句的<比较条件>中使用比较运算符 =,>,<,>=,<=,!= 或 <>,!>,!<; NOT+上述运算

LOWER(Sdept) FROM Student; 符

输出结果:Sname 'Year of Birth:' 2008-Sage [例8] 查询所有年龄在20岁以下的学生姓名及其年LOWER(Sdept)

李勇 Year of Birth: 1988 cs 刘晨 Year of Birth: 1989 is 王敏 Year of Birth: 1990 ma 张立 Year of Birth: 1989 is 使用列别名改变查询结果的列标题:

SELECT Sname NAME,'Year of Birth: ’ BIRTH, 2000-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student;

输出结果: NAME BIRTH BIRTHDAY DEPARTMENT

李勇 Year of Birth: 1984 cs 刘晨 Year of Birth: 1985 is 王敏 Year of Birth: 1986 ma 张立 Year of Birth: 1985 is 选择表中的若干元组——消除取值重复的行;查询满足条件的元组

1. 消除取值重复的行:如果没有指定DISTINCT关键词,则缺省为ALL

[例6] 查询选修了课程的学生学号。 SELECT Sno FROM SC;等价于: SELECT ALL Sno FROM SC;

执行上面的SELECT语句后,结果为: Sno 200215121 200215121 200215121 200215122 200215122 消除取值重复的行(续)

指定DISTINCT关键词,去掉表中重复的行 SELECT DISTINCT Sno FROM SC; 执行结果:Sno 200215121

200215122

查询满足条件的元组 WHERE子句常用的查询条件

龄。

SELECT Sname,Sage FROM Student WHERE Sage < 20;

(2) 确定范围

使用谓词 BETWEEN … AND …

NOT BETWEEN … AND …

[例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。

SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

[例11] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。

SELECT Sname,Sdept,Sage FROM Student

WHERE Sage NOT BETWEEN 20 AND 23; (3) 确定集合

使用谓词 IN <值表>, NOT IN <值表> <值表>:用逗号分隔的一组取值 [例12]查询信息系(IS)、数学系(MA)和计

算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student

WHERE Sdept IN ( 'IS','MA','CS' ); [例13]查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。 SELECT Sname,Ssex FROM Student

WHERE Sdept NOT IN ( 'IS','MA','CS' ); (4) 字符串匹配

[NOT] LIKE‘<匹配串>’[ESCAPE ‘ <换码字符>’] <匹配串>:指定匹配模板

匹配模板:固定字符串或含通配符的字符串,当匹配模板为固定字符串时,可以用 = 运算符取代 LIKE 谓词。用 != 或 < >运算符取代 NOT LIKE 谓词 通配符

% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串 _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串

ESCAPE 短语:当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE '<换码字符>' 短语对通配符进行转义。

例题

1) 匹配模板为固定字符串

[例14] 查询学号为95001的学生的详细情况。 SELECT * FROM Student

WHERE Sno LIKE '95001'; 等价于: SELECT *

FROM Student

WHERE Sno = '95001'; 2) 匹配模板为含通配符的字符串

[例15] 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student

WHERE Sname LIKE ?刘%?;

[例16] 查询姓\欧阳\且全名为三个汉字学生的姓名。 SELECT Sname FROM Student

WHERE Sname LIKE '欧阳__';

[例17] 查询名字中第2个字为\阳\字的学生的姓名和学号。

SELECT Sname,Sno

FROM Student

WHERE Sname LIKE '__阳%';

[例18] 查询所有不姓刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Student

WHERE Sname NOT LIKE '刘%';

3) 使用换码字符将通配符转义为普通字符

[例19] 查询DB_Design课程的课程号和学分。 SELECT Cno,Ccredit

FROM Course

WHERE Cname LIKE ‘DB\\_Design’

ESCAPE ‘\\’;

[例20] 查询以\开头,且倒数第3个字符为 i 的课程的详细情况。 SELECT *

FROM Course

WHERE Cname LIKE 'DB\\_%i_ _' ESCAPE ' \\ ';

(5) 涉及空值的查询:使用谓词 IS NULL 或 IS NOT NULL;“IS NULL” 不能用 “= NULL” 代替

[例21] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。

SELECT Sno,Cno FROM SC

WHERE Grade IS NULL;

[例22] 查所有有成绩的学生学号和课程号。 SELECT Sno,Cno

FROM SC

WHERE Grade IS NOT NULL; (6) 多重条件查询

用逻辑运算符AND和 OR来联结多个查询条件:AND的优先级高于OR;可以用括号改变优先级 可用来实现多种其他谓词 [NOT] IN

[NOT] BETWEEN … AND …

[例23] 查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student

WHERE Sdept= 'CS' AND Sage<20;

改写[例12] [例12] 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student

WHERE Sdept IN ( ?IS?,?MA?,?CS? ); 可改写为:

SELECT Sname,Ssex FROM Student

WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ‘ CS ’; 改写[例10]

[例10] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student

WHERE Sage BETWEEN 20 AND 23; 可改写为:

SELECT Sname,Sdept,Sage FROM Student

WHERE Sage>=20 AND Sage<=23; 对查询结果排序

使用ORDER BY子句:可以按一个或多个属性列排序(升序:ASC;缺省值;降序:DESC;)

当排序列含空值时:ASC: 排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示

[例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。


地理数据库 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2019届二轮复习书面表达专题高考大纲英语写作规定话题(8):人际

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: