数据库笔记汇总:数据库系统概论复习笔记(五)笔记汇总
教材:数据库系统概论(第五版)
出版社:高等教育出版社
SQL:结构化查询语言,是关系数据库的标准语言
数据库(有的系统称为目录)→ 模式 → 表以及视图、索引等
这里的模式,不是关系模式,也不是三级模式结构中的模式,指的是数据库管理系统(软件)的一个层次,也是实际的一个用户数据库
CREATE SCHEMA <模式名>AUTHORIZATION<用户名>
定义数据库模式实际上定义了一个命名空间
DROP SCHEMA <数据库模式名> <CASCADE|RESTRICT>
删除模式的同时把该模式中所有的数据库对象全部删除
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
…
[,<表级完整性约束条件> ] );
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ ALTER COLUMN <列名> <数据类型> ];
ALTER TABLE Student ADD S_entrance DATE;
直接删除属性列:
例:ALTER TABLE Student Drop Scome;
建立索引的目的:加快查询速度
索引类型:
CREATE [UNIQUE] [CLUSTER] [NONCLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
SC表按学号升序和课程号降序建唯一索引
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
ALTER INDEX <旧索引名> RENAME TO <新索引名>
将SC表的SCno索引名改为SCSno
ALTER INDEX SCno RENAME TO SCSno;
DROP INDEX <索引名>;
DROP INDEX <表名>.<索引名>
删除Student表的Stusname索引
DROP INDEX Stusname;
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息
关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息
SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>] …
FROM <表名或视图名>[,<表名或视图名> ]…|(SELECT 语句)
[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
查询仅涉及一个表
查询全部列:SELECT * FROM Student;
指定DISTINCT关键词,去掉表中重复的行(作用范围是所有目标列)
BETWEEN … AND …
NOT BETWEEN … AND …
IN <值表>
NOT IN <值表>
例:WHERE Sdept IN (‘CS’,'MA’,‘IS’ );
[NOT] LIKE ‘<匹配串>’
当匹配模板为固定字符串时:
可以用 = 运算符取代 LIKE 谓词
用 != 或 < >运算符取代 NOT LIKE 谓词
匹配串:
% (百分号) 代表任意长度(长度可以为0)的字符串
_ (下横线) 代表任意单个字符。
[ ]:匹配[ ]中的任意一个字符
[^ ]:不匹配[ ]中的任意一个字符
IS NULL
IS NOT NULL
AND和 OR来连接多个查询条件
可以按一个或多个属性列排序
例:ORDER BY Grade DESC;
聚合函数就用来输入多个数据,输出一个数据的
WHERE子句中不能用聚集函数作为条件表达式。聚集函数只能用于SELECT子句和GROUP BY 中的HAVING子句
COUNT(*)
COUNT([DISTINCT|ALL] <列名>)
SUM([DISTINCT|ALL] <列名>)
AVG([DISTINCT|ALL] <列名>)
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)
按指定的一列或多列值分组,值相等的为一组
GROUP BY子句的作用对象是查询的中间结果表
等值连接:连接运算符为=
查询每一门课的间接先修课(即先修课的先修课)
SELECT FIRST.Cno, SECOND.Cpno
FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno = SECOND.Cno;
查询每个学生的学号、姓名、选修的课程名及成绩
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course/*多表连接*/
WHERE Student.Sno = SC.Sno
AND SC.Cno = Course.Cno;
将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
种类:
参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同
自动去掉重复元组,如果要保留重复元组,用ALL。
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
INTO子句
例子:将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student
VALUES ('201215128','陈冬','男', 18, 'IS');
可以一次插入多个元组
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
例子:将计算机系学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1
WHERE sdept='cs';
DELETE
FROM <表名>
[WHERE <条件>];
视图的特点
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
组成视图的属性列名:全部省略或全部指定
由子查询中SELECT目标列中的诸字段组成
关系数据库管理系统执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,保留了主码
带虚拟列的视图
带有GROUP BY子句的查询来定义视图
ALTER VIEW 视图名 [( 列名[ ,...n ] )]
AS
查询语句
DROP VIEW <视图名>[CASCADE];
略
允许对行列子集视图进行更新