[读书笔记]数据库系统概论(史嘉权版)
着重于笔试需要的 基本概念 语句用法 效率优化等
第一章:概述
以数据关系为基础的数据库为关系型数据库,关系其实就是二维表。
数据库三层模式: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 删除条件
更新 UPDATE 表 SET 属性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 视图名 删除视图,闪图视图不会对基本表有影响

浙公网安备 33010602011771号