导图社区 关系数据库标准语言SQL
数据库系统概论干货思维导图!第三章关系数据库标准语言SQL包括:SQL概述、学生-课程数据库、数据定义、数据查询、数据更新、视图、小结等内容,干货满满,赶快收藏学起来吧!
编辑于2019-01-17 06:59:11数据库系统概论干货思维导图!第三章关系数据库标准语言SQL包括:SQL概述、学生-课程数据库、数据定义、数据查询、数据更新、视图、小结等内容,干货满满,赶快收藏学起来吧!
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。干货满满,赶快收藏学起来吧!
数据库系统概论(第5版)王珊 萨师煊 编著
社区模板帮助中心,点此进入>>
数据库系统概论干货思维导图!第三章关系数据库标准语言SQL包括:SQL概述、学生-课程数据库、数据定义、数据查询、数据更新、视图、小结等内容,干货满满,赶快收藏学起来吧!
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。干货满满,赶快收藏学起来吧!
数据库系统概论(第5版)王珊 萨师煊 编著
关系数据库标准语言SQL
结构化查询语言(Structured Query Language,SQL)
数据定义
模式
创建
CREATE SCHEMA
接受CREATE TABLE, CREATE VIEW和GRANT子句
删除
DROP SCHEMA
CASCADE(联级)
在删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制)
如果该模式下已经定义了下属的数据库对象(如表、视图等),则拒接该删除语句的执行
表
创建
CREATE TABLE
完整性约束条件
数据类型
删除
DROP TABLE
修改
ALTER TABLE
增加列、约束 ADD
删除列 DROP
删除约束 DROP CONSTRAINT
修改列名、数据类型 ALTER COLUMN
索引
创建
CREATE INDEX
常见索引
关系数据库管理系统在执行查询时会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引。
顺序文件上的索引
针对按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
B+树索引
将索引属性组织成B+树形式,B+树的叶节点为属性值和相应的元组指针。
散列(hash)索引
建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。
位图索引
用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值。
UNIQUE
此索引的每一个索引值只对应唯一的数据记录
CLUSTER
要建立的索引是聚簇索引
删除
DROP INDEX
修改
ALTER INDEX
视图
创建
CREATE VIEW
删除
DROP VIEW
数据查询
核心操作
SELECT
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]... FROM<表名或视图名>[,<表名或视图名>...]|(<SELECT语句>)[AS]<别名> [WHERE<条件表达式>] [GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]];
单表查询
仅涉及一个表的查询
选择表中的若干列
查询制定列
SELECT Sno,Sname FROM Student;
查询全部列
SELECT * FROM Student;
查询经过计算的值
SELECT Sname,2018-Sage FROM Student; SELECT Sname NAME,'Year of Birth:' BIRTH,2018-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT FROM Student; //可以是字符串常量、函数等,指定别名来改变查询结果的列标题
选择表中的若干元组
消除取值重复的行
SELECT DISTINCT Sno FROM SC;
DISTINCT
查询满足条件的元组
比较大小
=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定范围
BETWEEN AND, NOT BETWEEN AND
确定集合
IN, NOT IN
字符匹配
LIKE, NOT LIKE
通配符
SELECT Sname,Sno FROM Student WHERE Sname LIKE '_阳%'; //查询名字中第二个字为“阳”的学生的姓名和学号
%(百分号)代表任意长度(可以为0)的字符串
_(下划线)代表任意带个字符
ESCAPE'<转换字符>'对通配符进行转义
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i__' ESCAPE'\'; //查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况
涉及空值的查询
IS NULL, IS NOT NULL
IS不能用=代替
多重条件查询
AND, OR, NOT
ORDER BY 子句
对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排序
聚集函数
1、当聚集函数遇到空值时,除COUNT(*)外,都跳过空值而只处理非空值 2、聚集函数只能用于SELECT子句和GROUP BY中的HAVING子句
COUNT(*)
统计元组个数
COUNT([DISTINCT|ALL]<列名>)
统计一列中值的个数
一列值中
SUM([DISTINCT|ALL]<列名>)
数值型
AVG([DISTINCT|ALL]<列名>)
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
GROUP BY 子句
将查询结果按某一列或多列的值分组,值相等的为一组 分组后聚集函数将作用于每一个组,即每一组都有一个函数值
HAVING
SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90; WHERE子句和HAVING短语的区别在于作用对象不同 WHERE:作用于基本表或视图,从中选择满足条件的元组 HAVING:作用于组,从中选择满足条件的组
连接查询
等值与非等值连接查询
连接条件/连接谓词
[<表名1>.]<列名><比较运算符>[<表名2>.]<列名2>
自身连接
先取别名
外连接
SELECR Student,Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON(Student.Sno=SC.Sno); //左外连接
多表连接
嵌套查询
一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询
带IN谓词的子查询(子查询返回集合)
带比较运算符的子查询(子查询返回单值)
带有ANY(SOME)或ALL谓词的子查询(返回多值)
聚集函数实现子查询通常比直接用ANY或ALL查询效率要高
带有EXISTS谓词的子查询
不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”
集合查询
并操作 UNION
列数必须相同,对应项的数据类型也必须相同
交操作 INTERSECT
差操作 EXCEPT
基于派生表的查询
子查询出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象 SELECT Sname FROM Student,(SELECT Sno FROM SC WHERE Cno='1')AS SC1 WHERE Student.Sno=SC1.Sno;
数据更新
插入数据 INSERT
插入元组
INSERT INTO SC VALUES('201215128','1',NULL)
插入子查询结果
INSERT INTO<表名>[<属性列1>[,<属性列2>]...] 子查询;
修改数据 UPDATE
修改某一个元组的值
UPDATE Student SET Sage=22 WHERE Sno='201215121';
修改多个元组的值
UPDATE Student SET Sage=Sage+1;
带子查询的修改语句
UPDATE SC SET Grade=0 WHERE Sno IN (SELECT Sno FROM Student WHERE Sdept='CS');
删除数据 DELETE
删除某一个元组的值
删除多个元组的值
DELETE FROM SC;
带子查询的删除语句
视图
从一个或几个基本表(或视图)导出的表 组成视图的属性列名或者全部省略或者全部指定
定义视图
CREATE VIEW<视图名>[(<列名>[,<列名>]...)] AS<子查询> [WITH CHECK OPTION]; 子查询可以是任意的SELECT语句。 WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操纵时要保证更新、插入或删除的行满足视图定义中的谓词条件。
行列子集视图
从单个基本表导出,并且只是去掉了基本表的某些行和某些列,但保留了主码。
带虚拟列的视图
带表达式的视图 虚拟列:派生属性在基本表中并不实际存在
分组视图
用带有聚集函数和GROUP BY子句的查询来定义视图
删除视图
查询视图
试图消解
从数据字典中取出视图的定义,把视图中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。
更新视图
不是所有的视图都是可更新的
视图的作用
简化用户的操作
使用户能以多种角度看待同一数据
对重构数据库提供了一定程度的逻辑独立性
对机密数据提供安全保护
适当利用视图可以更清晰地表达查询
空值的处理
空值:就是“不知道”或“不存在”或“无意义”的值
空值的产生
空值的判断
IS NULL或IS NOT NULL
空值的约束条件
NOT NULL
UNIQUE
码
空值的算术运算、比较运算和逻辑运算
只有使WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为输出结果。 例,“成绩<60”不包括无成绩的学生
空值与另一个值的算术运算的结果为空值
空值与另一个值的比较运算的结果为UNKNOWN
三值逻辑
SQL概述
产生与发展
目前,没有一个数据库系统能够支持SQL标准的所有概念和特性
特点
综合统一
集数据定义语言、数据操纵语言、数据控制语言的功能于一体
高度非过程化
无须了解存取路径
面向集合的操作方式
非关系数据模型采用的是面向记录的操纵方式
以同一种语法结构提供多种使用方式
既是独立的语言,又是嵌入式语言
语法简洁,易学易用
基本概念
外模式
包括若干视图和部分基本表
模式
若干基本表
内模式
若干存储文件
一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中
数据字典
关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等
查询块
SELECT-FROM-WHERE
外层查询/父查询
内层查询/子查询
SELECT语句中不能使用ORDER BY子句(ORDER BY子句只能对最终查询结果排序)
不相关子查询
查询与刘晨在同一个系学习的学生 SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM S WHERE Sname='刘晨');
相关子查询
找到每个学生超过他自己选修课程平均成绩的课程号 SELECT Sno,Cno FROM SC x WHERE Grade>=(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);
区别
定义视图并查询视图
视图定义将永久保存在数据字典中
基于派生表的查询
在语句执行时临时定义,语句执行后该定义即被删除