[读书笔记]数据库系统概论(史嘉权版)

着重于笔试需要的 基本概念 语句用法 效率优化等

第一章:概述

数据关系为基础的数据库为关系型数据库,关系其实就是二维表

数据库三层模式:1、外模式(数据库模式的子集,提供给用户使用的接口)2、逻辑模式(全部数据的逻辑结构)3、内模式(数据的存储结构与存储方式)

两层映像:1、逻辑模式-外模式映像(模式改变时外模式不变,保证数据与程序之间的逻辑独立性)2、逻辑模式-内模式映像(如存储结构改变时只需改变映像保证逻辑模式不变,保证数据的物理独立性

第二章:数据库建模

约束:1、键码(key) 2、单值约束 3、引用完整性(实体的某个属性必须引用另外实体确实存在的键码属性) 4、域约束(范围) 

第三章:关系模型与关系运算

基本概念1、属性(表中的列名)2、模式(关系的名称与关系的属性集合)3、笛卡尔积(多个关系的并集,如有同名属性,必须重命名)

第四章:SQL语言

1、简单查询

SELECT * FROM 表名 WHERE 选择条件1 AND 选择条件2

SELECT XX AS YY ->别名  

也可以给运算结果起别名 SELECT XX-10 AS YY  也可以给表中没有的起别名 SELECT '电子科大' AS SCHOOL

可用连接号(或)||连接字符串  '你'||'好'='你好'    不等号是<>  注意判断空值不能用=或<> 只能用 IS (NOT) NULL

字符串匹配 str (NOT) LIKE pattern,%匹配任意长字符串 _匹配单个字符 普通字符串中出现这两要用转义符\

输出顺序 ORDER BY age (DESC), score (DESC) 首先按age排,age相等按score排。 默认是升序,加上DESC降序

聚合符号5种(计算一列的值) SUM、AVG、MIN、MAX、COUNT如SELECT AVG(age) FROM student

分组SELECT dept,COUNT(*) FROM student GROUP BY dept按dept分组,显示每个系的人数

筛选分组SELECT dept,COUNT(*) FROM student GROUP BY dept HAVING COUNT(*)>50人数大于50的系。注意WHERE不能与聚合函数(如SUM)一起使用,因此使用了聚合函数就必须使用HAVING来限定条件。GROUP BY一般和聚合函数一并使用。

2、连接查询

UNION、INTERSECT、EXCEPT表示两个查询结果之间的并、交、差集。

(SELECT * FROM student) UNION (SELECT * FROM teacher)

使用连接求笛卡尔积也可以求上面并SELECT * FROM student,teacher WHERE student.id=teacher.id

笛卡尔积 SELECT * FROM 表1 CROSS JOIN 表2                                                                              

自然连接 SELECT * FROM 表1 NATURAL JOIN 表2   对两个表的公共属性进行连接 并 删除重复结果

等值连接 SELECT * FROM 表1 (INNER) JOIN 表2 ON 表1属性=表2属性  (其实就是没有公共属性的自然连接)

外部链接 SELECT * FROM 表1 NATURAL <LEFT|RIGHT|FULL> OUTER JOIN 表2 ON 表达式

左连接:以左表属性为主,左表属性全部保留。右连接是以右表为主。全连接是左右都保留。如下图

 

3、嵌套查询

以子查询的结果作为判断条件,或者以子查询结果为FROM后面的目标表。

选择关系关键字:EXISTS-非空、IN-属于、ALL-全部满足、ANY-至少一个满足

HAVING AVG(score)>=ALL(子查询)   ALL、ANY前面都是逻辑判断符的一种

WHERE id IN (子查询) 如果子查询结果大于1个时候必须用IN,而不能用=

去重复 SELECT DISTINCT name FROM.... 或 COUNT(DISTINCT course) (而UNIQUE是定义表时的唯一约束)

4、数据库更新

INSERT INTO 表(属性1,属性2,属性3) VALUES (值1,值2,值3)  如果插入属性完整的话表后不必加属性括号

也可以 INSERT INTO 表 子查询

删除 DELETE FROM 表 WHERE 删除条件

更新 UPDATESET 属性1=值1,属性2=值2 WHERE 更新条件  可以利用属性的原值SET age=age+1

5、表操作

定义表

撤销表 DROP TABLE 表名

修改表 ADD MODIFY

删除一列 ALTER TABLE 表名 DROP 列名

6、建立索引

比如movie表有10000部电影,而年份为2000的电影只有200部。平时需要遍历这10000部逐个对比年份属性才能找出这200部。当我们在year这个属性建立了索引,则可以直接索引出这2000部,提高查询效率。

CREATE INDEX 索引名 ON 表名(属性名),如CREATE INDEX indexYear ON movie(year),                                    多个属性也可以 movie(year,name)

删除索引 DROP INDEX 索引名

7、视图VIEW

视图是一张从各表中抽取有用属性组成的抽象表。

CREATE VIEW 视图名 AS 子查询,子查询的结果就是视图,也可以通过视图名(别名1,别名2)来给属性起别名

DROP VIEW 视图名 删除视图,闪图视图不会对基本表有影响

posted @ 2013-04-08 11:01  iyjhabc  阅读(447)  评论(0)    收藏  举报