本讲主要内容
? 结构化查询语言的语法特点 ( SQL的功
能, SQL的数据类型, SQL的动词 )
? 数据库的基本操作( 创建数据库, 创
建表, 修改表, 删除表, 创建索引,
删除索引 )
? 数据的操作( 数据的添加, 数据的更
新, 数据的删除 )
第七章
数
据
库 (
第
三
讲
)
结构化查询语言的语法特点 (第 7章第 3讲)
结构化查询语言 (Structured Query Language,SQL)
是应用程序与数据库管理系统之间相互通讯的语言。
SQL是查询语言,主要用于数据库的数据查询,所以
没有其它编程语言 (如 C,Pascal,Basic)复杂。 SQL 又是
结构化语言,可以把 SQL直接编入应用程序,直接对数据
库进行数据维护和查询。同时,SQL 是关系数据库标准
语言,它仅适用于关系数据库。
SQL称作结构化查询语言其实并不准确。首先它只是
一种数据库子语言,并非严格的结构化语言。其次,SQL
决不仅仅是一个查询工具,而是一种能控制数据库管理系
统并能与之交互的综合性语言。
SQL的功能 (第 7章第 3讲)
SQL提供给用户 控制数据库管理系统的功能 包括,
① 数据定义 (Data definition)。 就是定义数据库中数据的结
构和组织,以及数据项之间的关系。
② 数据检索 (Data retrieval)。 按用户意见检索数据库中用户
想要的数据。
③ 数据操纵 (Data manipulation)。 允许用户对数据库中数据
进行增加、删除、修改等更新操作。
④ 数据安全 (Data security)。 根据权限限制用户检索、更新
数据库中的数据,以确保数据库中的数据不被非法窃取。
⑤ 数据共享 (Data sharing)。 调整数据让用户之间共享,并
保证用户之间彼此透明,不受干扰。
⑥ 数据完整性 (Data integrity)。 规定数据库的完整性条件,
避免数据因修改紊乱或系统出错而损坏。
SQL的数据类型 (第 7章第 3讲)
? 不同版本的 SQL,其数据类型也有所不同,这里主要介绍 SQL92的数据
类型。
? SQL92标准支持七种通用的数据类型,精确数、近似数、字符串、位
串、日期时间、区间,NULL。 在每个通用的类型内部可以有些子类型。
① 精确数类型 精确数字类型可以精确地表示一个数字的值。 它包含
INTEGER,SMALLINT,NUMBERIC和 DECIMAL。
INTEGER类型,整数类型的数据。
SMALLINT类型,SMALLINT类型是一类精度比 INTEGER类型低的整数。
NUMERIC类型,NUMERIC类型数据可以含有小数部分。一个数的精度不能超
过它的规模。规模是指允许的最大数的位数,精度是指小数部分的位数。
例如数 345.78便是一个规模为 5,精度为 2的数,即属于类型 NUMERIC(5,2)
的数。
DECIMAL类型,DECIMAL类型非常类似 NUMERIC类型。但 SQL工具提供的精度
可以大于 DECIMAL定义的精度。
② 近似数类型 SQL92定义了三种近似数类型。那就是 REAL,DOUBLE、
FLOAT。
REAL类型,实数类型 (REAL)是单精度浮点数,它的精度取决于所用的工具。
DOUBLE类型,双精度数据类型给出了一个双精度浮点数。该类型的数字都
可以用尾数乘以 10的升幂来表示。定义双精度类型的目的主要是弥补单精
度类型对精度的不足。
FLOAT类型,浮点类型 (FLOAT)类型与硬件无关。
③ 字符串类型
字符串类型有两种:定长字符串 (CHARACTER)与变长字符串 (VARCHAR)。
CHARACTER类型,当输入数据到一个指定宽度的 CHARATER域中时,如果输入
的字符数少于指定的字符数,剩余的字符空间将会以空格填充。
VARCHAR类型,当输入的字符数是变长的,并且不想剩余的空间被空格填充
时,选用 VARCHAR类型是正确的选择。
④ 串类型
SQL92定义了两种位串类型 BIT和 BITVARYING。
BIT(X)类型,指定一个定长的二进制数据,X表示位数。不带变量的 BIT类
型缺省值是一位。
BITVARING(X)类型,可以存储位长变化的位串。 X表示接收的数据域的最
大的位数。
⑤ 日期和时间类型
DATE类型,日期型 (DATE)存储年、月、日的值。 DATE是一个十位长度的值,
如
1998-01-28。
TIME类型, TIME类型存储小时、分、秒的值。秒的值可带小数部分,但小
数部分的精度与工具有关。指定 TIME类型可用 TIME或 TIME(P),P是位数。
缺省是零位小数。
⑥ 区间类型 (Intervals)
区间类型有 时间间隔数据类型 和 日期时间数据类型 两种。间隔是两个日期时
间值之差。 SQL92定义了两种间隔类型:年 --月间隔和日 --时间间隔。年 --
月间隔是两个日期间年和月的数值,而日 --时间隔是一个月中两个时刻间的
日、小时、分、秒的数值。计算年 --月间隔不能同计算日 --时间隔相混合,
因为月的长度是变化的。
⑦ NULL值
在数据库中不含数据项的域,称之为具有空值 —— NULL。
NULL是一特殊的值,它无数据类型可言,即数据库中的域不管其数据类型是
什么,都可以取值为 NULL。 NULL不是数字域中的 0,也不是字符域中的空格。
空值 NULL意味着这个域中的值是未定义的。
SQL的动词 (第 7章第 3讲)
SQL完成 数据定义, 数据操作, 数据控
制 的核心功能只用了 9个动词。
SQL功能 动词
数据查询 SELECT
数据定义 CREATE,DROP,ALATER
数据操作 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE
创建数据库 (第 7章第 3讲)
用 CREAT DATABASE语句,可生成一个数据
库。典型的 CREAT DATABASE语句的语法如下,
CREAT DATABASE数据库名;
具体的 S QL工具,其语法有所不同。大
多数 DBMS需要同时指定数据库的大小,一般以
硬盘空间的单位 (兆 )来计算。
创建表 (第 7章第 3讲)
SQL语言使用 CREAT TABLE语句创建表。一般格式
如下,
CREAT TABLE表名( <列名 ><数据类型 >[列级完整性约束 ]
[,<列名 ><数据类型 >[列级完整性约束 ]]
[,<表级完整性约束 >])
[其它参数 ];
例如 建立一个 学生社团表 (STB),它由社团编号 (BH)、
社团名称 (MC)、社团电话 (DH)和负责人 (FZR)4个属性组
成。其中,社团编号和社团名称不可重复,也不能为空。 CREAT TABLE STB( BH CHAR(4) NOT NULL UNIQUE,
MC CHAR(20) NOT NULL UNIQUE,
DH INT,
FZR CHAR(10)
);
修改表 (第 7章第 3讲)
使用 ALTER TABLE命令可以对表的列进行增加、改动。其语
法格式如下,
ALTER TABLE表名
<ADD列名 数据类型;|
MODIFY列名 数据类型; >
例如,将表 STB的字段 FZR的数据类型 CHAR(10)增长为
CHAR(20),可以用如下命令,
ALTER TABLE STB
MODIFY FZR CHAR(20);
值得注意的是,这条命令的反操作不行,即不能把一个
CHAR(20)的数据类型改为 CHAR(10)。
例如,给 STB增加一个地址( DZ)字段,可以用如下命令,
ALTER TABLE STB
ADD DZ CHAR(40);
删除表 (第 7章第 3讲)
使用 DROP TABLE 可删除表,其一般格
式如下,
DROP TABLE 表名
例如,删除表 STB,可以用如下命令,
DROP TABLE STB
创建索引 (第 7章第 3讲)
创建索引 的基本语法如下,
CREATE [UNQUE] [CLUSTER] INDEX <索引名 >
ON <表名 > (列名 1 [<顺序 > ][,列名 2 [<顺序 >]]..,)
其中,UNQUE表示此索引的每一个索引值只对应
唯一的数据记录,CLUSTER表示要建立的索引是聚簇
索引。
比如,给学生社团表 (STB)建立一个索引的代码如
下,其中索引字段是社团编号 (BH)。
CREATE INDEX STB_INDEX
ON STB(BH)
删除索引 (第 7章第 3讲)
使用 DROP INDEX语句 可删除索引,其一般格式
如下,
DROP TABLE 索引
例如,删除 STB的索引,可以用如下命令,
DROP TABLE STB_INDEX
数据的添加 (第 7章第 3讲)
SQL中的 INSERT语句用于将数据录入到数据库中。
它有如下两个语句,
① INSERT..,VALUES语句以 一次一记录 的方式录入数
据,对于只和几条记录打交道的小规模操作很有用。它的
语法格式如下,
INSERT INTO表名 (列 1,列 2..,) VALUES(值 1,值 2.,,)
② INSERT..,SELECT语句用于将另外数据表的查询结
果插入到该表中。它经常用于创建专供查询的表,查询这
种表比在不同表之间建立复杂的连接查询快得多。
INSERT...SELECT的语法格式如下,
INSERT INTO表名 1 (列 1,列 2,..,) SELECT 列 1,
列 2,..,FROM 表名序列 WHERE 搜索条件
数据的更新 (第 7章第 3讲)
SQL中的 UPDATE语句用于更新数据库中的
数据。它的语法格式如下,
UPDATE表名 SET列 1=值 1[,列 2=值
2]..,WHERE搜索条件
UPDATE语句首先检查 WHERE子句,对在
指定表中的所有满足 WHERE条件的记录的相应
字段的值进行更新。
例如,UPDATE STB SET DH= 7897899
WHERE BH= ‘ 0101’ ;就是更新学生社团表
中编号( BH)为 0101的电话( DH)。
数据的删除 (第 7章第 3讲)
SQL中的 DELETE命令用于从表中删除整行的数据。
DELETE语句的语法格式如下,
DELETE FROM 表名 WHERE 搜索条件
依靠使用 DELETE语句中的 WHERE子句,SQL可
以做以下事情:删除单行记录,删除多行记录,删除所
有记录 (不带 WHERE子句 )。
当使用 DELETE语句时,应记住以下事项:
DELETE语句不能用于删除单个字段的值 (这时需用
UPDATE); DELETE语句以整行为单位删除单个表中
的数据;类似 INSERT和 UPDATE,从表中删除数据会
引起在其它表中的参照完整性的问题; DELETE语句用
于删除表中的记录,即使是删除表中所有记录,也不等
于删除表本身。
? 结构化查询语言的语法特点 ( SQL的功
能, SQL的数据类型, SQL的动词 )
? 数据库的基本操作( 创建数据库, 创
建表, 修改表, 删除表, 创建索引,
删除索引 )
? 数据的操作( 数据的添加, 数据的更
新, 数据的删除 )
第七章
数
据
库 (
第
三
讲
)
结构化查询语言的语法特点 (第 7章第 3讲)
结构化查询语言 (Structured Query Language,SQL)
是应用程序与数据库管理系统之间相互通讯的语言。
SQL是查询语言,主要用于数据库的数据查询,所以
没有其它编程语言 (如 C,Pascal,Basic)复杂。 SQL 又是
结构化语言,可以把 SQL直接编入应用程序,直接对数据
库进行数据维护和查询。同时,SQL 是关系数据库标准
语言,它仅适用于关系数据库。
SQL称作结构化查询语言其实并不准确。首先它只是
一种数据库子语言,并非严格的结构化语言。其次,SQL
决不仅仅是一个查询工具,而是一种能控制数据库管理系
统并能与之交互的综合性语言。
SQL的功能 (第 7章第 3讲)
SQL提供给用户 控制数据库管理系统的功能 包括,
① 数据定义 (Data definition)。 就是定义数据库中数据的结
构和组织,以及数据项之间的关系。
② 数据检索 (Data retrieval)。 按用户意见检索数据库中用户
想要的数据。
③ 数据操纵 (Data manipulation)。 允许用户对数据库中数据
进行增加、删除、修改等更新操作。
④ 数据安全 (Data security)。 根据权限限制用户检索、更新
数据库中的数据,以确保数据库中的数据不被非法窃取。
⑤ 数据共享 (Data sharing)。 调整数据让用户之间共享,并
保证用户之间彼此透明,不受干扰。
⑥ 数据完整性 (Data integrity)。 规定数据库的完整性条件,
避免数据因修改紊乱或系统出错而损坏。
SQL的数据类型 (第 7章第 3讲)
? 不同版本的 SQL,其数据类型也有所不同,这里主要介绍 SQL92的数据
类型。
? SQL92标准支持七种通用的数据类型,精确数、近似数、字符串、位
串、日期时间、区间,NULL。 在每个通用的类型内部可以有些子类型。
① 精确数类型 精确数字类型可以精确地表示一个数字的值。 它包含
INTEGER,SMALLINT,NUMBERIC和 DECIMAL。
INTEGER类型,整数类型的数据。
SMALLINT类型,SMALLINT类型是一类精度比 INTEGER类型低的整数。
NUMERIC类型,NUMERIC类型数据可以含有小数部分。一个数的精度不能超
过它的规模。规模是指允许的最大数的位数,精度是指小数部分的位数。
例如数 345.78便是一个规模为 5,精度为 2的数,即属于类型 NUMERIC(5,2)
的数。
DECIMAL类型,DECIMAL类型非常类似 NUMERIC类型。但 SQL工具提供的精度
可以大于 DECIMAL定义的精度。
② 近似数类型 SQL92定义了三种近似数类型。那就是 REAL,DOUBLE、
FLOAT。
REAL类型,实数类型 (REAL)是单精度浮点数,它的精度取决于所用的工具。
DOUBLE类型,双精度数据类型给出了一个双精度浮点数。该类型的数字都
可以用尾数乘以 10的升幂来表示。定义双精度类型的目的主要是弥补单精
度类型对精度的不足。
FLOAT类型,浮点类型 (FLOAT)类型与硬件无关。
③ 字符串类型
字符串类型有两种:定长字符串 (CHARACTER)与变长字符串 (VARCHAR)。
CHARACTER类型,当输入数据到一个指定宽度的 CHARATER域中时,如果输入
的字符数少于指定的字符数,剩余的字符空间将会以空格填充。
VARCHAR类型,当输入的字符数是变长的,并且不想剩余的空间被空格填充
时,选用 VARCHAR类型是正确的选择。
④ 串类型
SQL92定义了两种位串类型 BIT和 BITVARYING。
BIT(X)类型,指定一个定长的二进制数据,X表示位数。不带变量的 BIT类
型缺省值是一位。
BITVARING(X)类型,可以存储位长变化的位串。 X表示接收的数据域的最
大的位数。
⑤ 日期和时间类型
DATE类型,日期型 (DATE)存储年、月、日的值。 DATE是一个十位长度的值,
如
1998-01-28。
TIME类型, TIME类型存储小时、分、秒的值。秒的值可带小数部分,但小
数部分的精度与工具有关。指定 TIME类型可用 TIME或 TIME(P),P是位数。
缺省是零位小数。
⑥ 区间类型 (Intervals)
区间类型有 时间间隔数据类型 和 日期时间数据类型 两种。间隔是两个日期时
间值之差。 SQL92定义了两种间隔类型:年 --月间隔和日 --时间间隔。年 --
月间隔是两个日期间年和月的数值,而日 --时间隔是一个月中两个时刻间的
日、小时、分、秒的数值。计算年 --月间隔不能同计算日 --时间隔相混合,
因为月的长度是变化的。
⑦ NULL值
在数据库中不含数据项的域,称之为具有空值 —— NULL。
NULL是一特殊的值,它无数据类型可言,即数据库中的域不管其数据类型是
什么,都可以取值为 NULL。 NULL不是数字域中的 0,也不是字符域中的空格。
空值 NULL意味着这个域中的值是未定义的。
SQL的动词 (第 7章第 3讲)
SQL完成 数据定义, 数据操作, 数据控
制 的核心功能只用了 9个动词。
SQL功能 动词
数据查询 SELECT
数据定义 CREATE,DROP,ALATER
数据操作 INSERT,UPDATE,DELETE
数据控制 GRANT,REVOKE
创建数据库 (第 7章第 3讲)
用 CREAT DATABASE语句,可生成一个数据
库。典型的 CREAT DATABASE语句的语法如下,
CREAT DATABASE数据库名;
具体的 S QL工具,其语法有所不同。大
多数 DBMS需要同时指定数据库的大小,一般以
硬盘空间的单位 (兆 )来计算。
创建表 (第 7章第 3讲)
SQL语言使用 CREAT TABLE语句创建表。一般格式
如下,
CREAT TABLE表名( <列名 ><数据类型 >[列级完整性约束 ]
[,<列名 ><数据类型 >[列级完整性约束 ]]
[,<表级完整性约束 >])
[其它参数 ];
例如 建立一个 学生社团表 (STB),它由社团编号 (BH)、
社团名称 (MC)、社团电话 (DH)和负责人 (FZR)4个属性组
成。其中,社团编号和社团名称不可重复,也不能为空。 CREAT TABLE STB( BH CHAR(4) NOT NULL UNIQUE,
MC CHAR(20) NOT NULL UNIQUE,
DH INT,
FZR CHAR(10)
);
修改表 (第 7章第 3讲)
使用 ALTER TABLE命令可以对表的列进行增加、改动。其语
法格式如下,
ALTER TABLE表名
<ADD列名 数据类型;|
MODIFY列名 数据类型; >
例如,将表 STB的字段 FZR的数据类型 CHAR(10)增长为
CHAR(20),可以用如下命令,
ALTER TABLE STB
MODIFY FZR CHAR(20);
值得注意的是,这条命令的反操作不行,即不能把一个
CHAR(20)的数据类型改为 CHAR(10)。
例如,给 STB增加一个地址( DZ)字段,可以用如下命令,
ALTER TABLE STB
ADD DZ CHAR(40);
删除表 (第 7章第 3讲)
使用 DROP TABLE 可删除表,其一般格
式如下,
DROP TABLE 表名
例如,删除表 STB,可以用如下命令,
DROP TABLE STB
创建索引 (第 7章第 3讲)
创建索引 的基本语法如下,
CREATE [UNQUE] [CLUSTER] INDEX <索引名 >
ON <表名 > (列名 1 [<顺序 > ][,列名 2 [<顺序 >]]..,)
其中,UNQUE表示此索引的每一个索引值只对应
唯一的数据记录,CLUSTER表示要建立的索引是聚簇
索引。
比如,给学生社团表 (STB)建立一个索引的代码如
下,其中索引字段是社团编号 (BH)。
CREATE INDEX STB_INDEX
ON STB(BH)
删除索引 (第 7章第 3讲)
使用 DROP INDEX语句 可删除索引,其一般格式
如下,
DROP TABLE 索引
例如,删除 STB的索引,可以用如下命令,
DROP TABLE STB_INDEX
数据的添加 (第 7章第 3讲)
SQL中的 INSERT语句用于将数据录入到数据库中。
它有如下两个语句,
① INSERT..,VALUES语句以 一次一记录 的方式录入数
据,对于只和几条记录打交道的小规模操作很有用。它的
语法格式如下,
INSERT INTO表名 (列 1,列 2..,) VALUES(值 1,值 2.,,)
② INSERT..,SELECT语句用于将另外数据表的查询结
果插入到该表中。它经常用于创建专供查询的表,查询这
种表比在不同表之间建立复杂的连接查询快得多。
INSERT...SELECT的语法格式如下,
INSERT INTO表名 1 (列 1,列 2,..,) SELECT 列 1,
列 2,..,FROM 表名序列 WHERE 搜索条件
数据的更新 (第 7章第 3讲)
SQL中的 UPDATE语句用于更新数据库中的
数据。它的语法格式如下,
UPDATE表名 SET列 1=值 1[,列 2=值
2]..,WHERE搜索条件
UPDATE语句首先检查 WHERE子句,对在
指定表中的所有满足 WHERE条件的记录的相应
字段的值进行更新。
例如,UPDATE STB SET DH= 7897899
WHERE BH= ‘ 0101’ ;就是更新学生社团表
中编号( BH)为 0101的电话( DH)。
数据的删除 (第 7章第 3讲)
SQL中的 DELETE命令用于从表中删除整行的数据。
DELETE语句的语法格式如下,
DELETE FROM 表名 WHERE 搜索条件
依靠使用 DELETE语句中的 WHERE子句,SQL可
以做以下事情:删除单行记录,删除多行记录,删除所
有记录 (不带 WHERE子句 )。
当使用 DELETE语句时,应记住以下事项:
DELETE语句不能用于删除单个字段的值 (这时需用
UPDATE); DELETE语句以整行为单位删除单个表中
的数据;类似 INSERT和 UPDATE,从表中删除数据会
引起在其它表中的参照完整性的问题; DELETE语句用
于删除表中的记录,即使是删除表中所有记录,也不等
于删除表本身。