数据库作业——SQL总结

Posted Fmm-PMO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库作业——SQL总结相关的知识,希望对你有一定的参考价值。

没想到已经过去了这么久,数据库课程也已经结束了基础篇第1~5章的学习,下面就对这一段时间的学习做一个总结,主要总结一些重点的内容。希望通过总结,可以重拾对知识的记忆,未来学着也更踏实。话不多说,开始干活!

目录索引:

第1章 绪论
    一、数据库的4个基本概念
    二、数据库系统的特点
    三、概念模型在信息世界中重要的基本概念
    四、关系模型
    五、数据库系统的结构

第2章 关系数据库
    一、关系数据结构及形式化定义
    二、数据库系统的特点
    三、关系的完整性
    四、关系代数

第3章 关系数据库标准语言SQL
    一、数据的定义
    二、查询Query

第4章 数据库安全性
    一、安全标准</a
    
二、数据库安全性控制
    三、试图机制
    四、数据加密

第5章 数据库完整性
    一、三大完整性
    二、触发器(trigger) + 存储过程

收尾

第1章 绪论

一、数据库的4个基本概念
1.数据(data):

数据是数据库中存储的基本对象。描述事物的符号记录称为数据。数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。

2.数据库(DataBase,DB):

数据库时长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

3.数据库管理系统(DataBase Management System,DBMS):

数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统提供的语言功能:数据定义语言DDL、数据操纵语言DML。

4.数据库系统(DataBase System,DBS):

数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。一般简称数据库系统为数据库。

二、数据库系统的特点

❖数据结构化
结构化是指数据以结构方式存储(字段名,记录组成的二维表);而不是以文本(无结构)、html(半结构化)等方式存储

❖数据的共享性高,冗余度低且易扩充

❖数据独立性高
    ❖物理独立性
        ◼ 指用户的应用程序与数据库中数据的物理存储是相互独立的。即:当数据的物理存储改变了,应用程序不用改变。
    ❖逻辑独立性
        ◼ 指用户的应用程序与数据库的逻辑结构是相互独立的。即:数据的逻辑结构改变了,应用程序不用改变。

❖数据由DBMS统一管理和控制

三、概念模型在信息世界中重要的基本概念

(1)实体:客观存在并可相互区别的事物称为实体( 可以是具体的人、事、物或抽象的概念)
(2)属性:实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
(3)码:唯一标识实体的属性集称为码。如学号是学生实体的码。
(4)实体型:用实体名及其属性名集合来抽象和刻画同类实体称为实体型。如学生(学号,姓名,性别,院系,出生年月)。
(5)实体集:同一类型实体的集合称为实体集。如全体学生。
(6)联系:实体之间的联系通常是指不同实体集之间的联系。有一对一,一对多,多对多等类型。

四、关系模型

关系模型由一组关系构成,每个关系的数据结构是一张规范化的二维表。下面是相关术语。

  • 关系:一个关系对应通常说的是一张表。
  • 元组:表中的一行即为一个元组,也就是一个实体。
  • 属性:表中的一列即为一个属性,给每一个属性起一个名称即为属性名。
  • 码:也称为码键。表中的某个属性组,可以唯一确定一个元组。
  • 域:是一组具有相同数据类型的值的集合。属性的取值范围来自某个域
  • 分量: 元组中的一个属性值
  • 关系模式: 对关系的描述,一般表示为 关系名(属性1,属性2,···,属性n)
关系模型要求关系必须是规范化的,关系的每一个分量必须是一个不可分的数据项,即不允许表中还有表!所有的操作都是集合操作。
五、数据库系统的结构
1.相关概念

型(Type): 对某一类数据的结构和属性的说明
值(Value): 是型的一个具体赋值
❖模式(Schema)
    ◼ 数据库逻辑结构和特征的抽象描述
    ◼ 是型的描述,不涉及具体值
    ◼ 反映的是数据的结构及其联系
    ◼ 模式是相对稳定的
❖实例(Instance)
    ◼ 模式的一个具体值
    ◼ 反映数据库某一时刻的状态
    ◼ 同一个模式可以有很多实例
    ◼ 实例随数据库中的数据的更新而变动

2.数据库系统的三级模式结构

数据库系统的三级模式结构是指数据库系统是由外模式模式内模式三级构成,如图所示

(1)模式(也称逻辑模式)
是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
一个数据库只有一个模式。是数据库系统模式结构的中间层
(2)外模式(也称子模式或用户模式)
是用户使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
介于模式与应用之间。

模式与外模式的关系:一对多。外模式与应用的关系:一对多

(3)内模式(也称存储模式)
是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式

第2章 关系数据库

一、关系数据结构及形式化定义

关系:
单一的数据结构
现实世界的实体及实体间的各种联系均用关系来表示
二维表: 逻辑结构

1.域:域是一组具有相同数据类型的值的集合。如自然数、整数、实数等
2.笛卡尔积:笛卡尔积是域上的一种集合运算。是所有域的所有取值的一个组合,不能重复。

给定一组域D1,D2,…,Dn,允许其中某些域是相同的。 D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn = {(d1,d2,…,dn)|diDi,i=1,2,…,n}

例如:
假设集合A=a, b,集合B=0, 1, 2,
则两个集合的笛卡尔积:
A×B=(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)

笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组
例如:在A×B=(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)中,(a, 0), (a, 1) 等 都是2元组

笛卡尔积元素(d1,d2,…,dn)中的每一个值di 叫作一个分量
例如:a,b,0,1等都是分量

基数:若Di(i=1,2,…,n)为有限集,其基数为mi(i=1, 2,…,n),则D1×D2×…×Dn的基数M为:
例如:集合A=a, b基数为2,集合B=0, 1, 2基数为3, A×B=(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)的基数为2×3=6

3.关系

关系是一个二维表。表的每行对应一个元组,表的每列对应一个属性。

❖ 候选码:
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。简单的情况:候选码只包含一个属性。最极端的情况:所有属性组是候选码,称为全码(第六章详解 P186)
❖ 主码:
若一个关系有多个候选码,则选定其中一个为主码
❖ 主属性:
候选码的诸属性称为主属性。不包含在任何侯选码中的属性称为非主属性或非码属性。

关系的三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。

4.关系模式

关系的描述称为关系模式。表示为R(U, D, DOM, F)。

R 关系名
U 组成该关系的属性名集合
D U中属性所来自的域
DOM 属性向域的映象的集合
F 属性间数据的依赖关系的集合
(数据依赖将在第六章详细叙述)

例:导师(SUPERVISOR)和研究生(POSTGRADUATE)出自同一个域——人(PERSON),在模式中定义属性向域的映象,说明它们分别出自哪个域:

DOM(SUPERVISOR)
= DOM(POSTGRADUATE)
= PERSON
二、关系操作

❖ 常用的关系操作
    ◼ 查询:
    选择、投影、连接、除、并、差、交、笛卡尔积
    (选择、投影、并、差、笛卡尔基是5种基本操作) 【 2.4节关系代数详细讲解这部分内容】
    ◼ 更新:插入、删除、修改

三、关系的完整性

三大完整性原则分别是:实体完整性、参照完整性、用户自定义完整性。

1.实体完整性

若属性A是基本关系R的主属性,则属性A不能取空值。可以简单记忆为:主属性不能为空

2.参照完整性

关系间的引用
比如:学生实体、专业实体(主码用下划线表示)。学生(学号,姓名,性别,专业号,年龄),专业(专业号,专业名)。这个例子中: 学生关系引用了专业关系的主码 “专业号”,学生关系中的 “专业号”值必须是 确实存在的专业的专业号。

外码(Foreign Key)
设F是基本关系R的一个或一组属性,但不是关系R的码(ps:码可唯一确定一个元组)。如果F与基本关系S的主码Ks相对应,则称F是R的外码,基本关系R称为参照关系(Referencing Relation),基本关系S称为被参照关系(Referenced Relation)。

参照完整性原则:
若属性(或属性组)F是基本关系R的外码它与基本关系S的主码Ks 相对应,则对于R中每个元组在F上的值必须为:
要么取空值(F的每个属性值均为空值),要么等于S中某个元组的主码值
简单记忆:外码要么为空,要么源自于被参照关系的主码。

3.用户自定义完整性

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。如年龄必须是10~25岁。

四、关系代数

一种抽象的查询语言,用对关系的运算来表达查询。

再谈笛卡尔积
    ❖ 严格地讲应该是广义的笛卡尔积
        ◼ R: n目关系,k1个元组
        ◼ S: m目关系,k2个元组
    ❖ R×S
        ◼ 列:(n+m)列元组的集合
            ⚫元组的前n列是关系R的一个元组
            ⚫后m列是关系S的一个元组
        ◼ 行: k1×k2个元组(基数)
            ⚫R×S = tr ts |tr R ∧ tsS

1.选择 σ:在关系R中选择满足给定条件的诸元组,是从行的角度进行的运算

σF® = t|tR∧F(t)= ‘真’
F:选择条件,是一个逻辑表达式,取值为“真”或“假”
查询信息系(IS系)全体学生。
σSdept = ‘IS’ (Student)

2.投影 π:从R中选择出若干属性列组成新的关系,投影操作主要是从列的角度进行运算。投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

πA® = t[A] | t R A:R中的属性列
查询学生关系Student中都有哪些系。去掉了重复的
πSdept(Student)

3.连接 ⋈:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。一般的连接操作是从行的角度进行运算。自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

R连接符号+条件 S = | tr  R ∧ ts S ∧ tr[A]θts[B]

❖两类常用连接运算
    ◼ 等值连接(equijoin)
        ⚫ θ为“=”的连接运算称为等值连接
        ⚫从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为:
    ◼自然连接(Natural join)
        ⚫自然连接是一种特殊的等值连接
            ➢两个关系中进行比较的分量必须是相同的属性组
            ➢在结果中把重复的属性列去掉
        ⚫自然连接的含义
❖悬浮元组(Dangling tuple)
    ◼ 两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍 弃了,这些被舍弃的元组称为悬浮元组。
    ❖外连接(Outer Join):如果把悬浮元组也保存在结果关系中,而在其他属性上,填空值(Null),就叫做外连接
        ◼ 左外连接(LEFT OUTER JOIN或LEFT JOIN)
            ⚫ 只保留左边关系R中的悬浮元组
        ◼ 右外连接(RIGHT OUTER JOIN或RIGHT JOIN)
            ⚫ 只保留右边关系S中的悬浮元组

4.除 ÷:同时从行和列角度进行运算

象集:给定一个关系R(X,Z),X和Z为属性组。 当t[X]=x时,x在R中的象集(Images Set)为:Zx=t[Z]|t R,t[X]=x,它表示R中属性组X上值为x的诸元组在Z上分量的集合(t[X]表示元组t中相应于属性X的一个分量)
给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:
R÷S=tr[X]|trR∧πY(S)Yx Yx:x在R中的象集,x = tr[X]

第3章 关系数据库标准语言SQL

一、数据的定义

SQL Server数据定义——模式与基本表操作

1.模式的定义与删除
-- 建立模式
CREATE SCHEMA 模式名 AUTHORIZATION 用户名
-- 删除模式(前提删除该模式下的所有内容,如删除基本表drop table test.tab1)
drop schema test
2.基本表的定义、删除与修改
-- 基本表的定义
create table 表名(
	属性名 类型 约束
);
-- 如建立学生表Student
create table Student(
	Sno char(9) primary key, -- 列级完整性约束条件,Sno为主码
	Sname varchar(10), -- 表中的Sname不可有重复值
	Ssex char(2),
	Sage smallint,
	Sdept char(20)
)
-- 基本表的修改
alter table 表名 + 要更改的内容
-- 如向Student表中增加“入学时间”列,其类型为日期
alter table Student add Sentrance date;
-- 删除基本表
drop table 表名
二、查询Query

查询涉及的知识点很多,关键是嵌套查询和子查询部分,是难点也是重点。囿于篇幅,不方便把知识点一一罗列,这里放上之前的链接,结合起来复习。就不多写了,自己慢慢消化!!

SQL Server——索引+基于单表的数据插入与简单查询【1】
2021-4-3课程——SQL Server查询【2】
2021-4-5课程——SQL Server查询【3】
2021-4-6课程——SQL Server查询【4】
2021-4-12课程——SQL Server查询【5】+数据更新+空值处理+视图

第4章 数据库安全性

一、安全标准

记住CC标准,是评估信息产品安全性的主要标准。

二、数据库安全性控制
1.计算机系统的安全模式

2.存取控制

存取控制机制主要包括定义用户权限和合法权限检查两部分。定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。C2级的数据库管理系统支持自主存取控制,B1级的支持强制存取控制

3.自主存取控制(DAC):通过 SQL 的GRANT 语句和REVOKE 语句实现
  • 用户对不同的数据对象有不同的存取权限
  • 不同的用户对同一对象也有不同的权限
  • 用户还可将其拥有的存取权限转授给其他用户

(1)用户权限有两个要素组成:数据库对象和操作类型。在数据库系统中,定义存取权限称为授权(authorization)

(2)授权:授予与收回

GRANT语句向用户授予权限
REVOKE语句收回已经授予用户的权限

GRANT
在授予(grant)时,如果指定了with grant option子句,说明被授予权限的用户还可以把这种权限再授予其他的用户。

PS
①对属性列的授权时必须明确指出相应属性列名
②若授予所有用户使用public
③标准SQL在指定基本表时要写table,而T-SQL不写!!

REVOKE
格式和注意点基本与GRANT操作相同,只是把grant换成revoke

数据库角色:被命名的一组与数据库操作相关的权限。角色是权限的集合

-- 角色的创建
CREATE  ROLE  <角色名> 
-- 给角色授权和收回权限同用户,不再赘述
4.强制存取控制(MAC)
  • 每一个数据对象被标以一定的密级
  • 每一个用户也被授予某一个级别的许可证
  • 对于任意一个对象,具有合法许可证的用户才可以存取

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体客体两大类。
主体是系统中的活动实体
    ◼数据库管理系统所管理的实际用户
客体是系统中的被动实体
    ◼文件、基本表、索引、视图
❖两类常用连接运算
    ◼ 等值连接(equijoin)
        ⚫
❖敏感度标记(Label)
    ◼ 对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)敏感度标记分成若干级别:
        ⚫绝密(Top Secret,TS)
        ⚫机密(Secret,S)
    ⚫可信(Confidential,C)
        ⚫公开(Public,P)
    ◼TS>=S>=C>=P
    ◼主体的敏感度标记称为许可证级别(Clearance Level)
    ◼客体的敏感度标记称为密级(Classification Level)

❖强制存取控制规则
    ◼仅当主体的许可证级别大于或等于客体的密级时,该主体才能读相应的客体
    ◼仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体

三、试图机制

为不同的用户定义不同的机制,把数据对象限制在一定范围内。视图机制间接地实现支持存取谓词的用户权限定义

四、数据加密

数据加密主要包括存储加密和传输加密

第5章 数据库完整性

一、三大完整性
1.实体完整性

以主码作为唯一性标识,竹马中的属性即主属性不能取空值。用PRIMARY KEY定义
插入或更新操作时,DBMS按照实体完整性规则自动进行检查。
(1)检查主码值是否唯一,如果不唯一则拒绝插入或修改
(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

2.参照完整性

参照和被参照关系。主码和外码。用FOREIGN KEY短语定义哪些列为外码。用REFERENCES短语指明这些外码参照哪些表的主码

3.用户自定义完整性

❖CREATE TABLE时定义属性上的约束条件
    ◼列值非空(NOT NULL)
    ◼列值唯一(UNIQUE)
    ◼检查列值是否满足一个条件表达式(CHECK)

❖在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制

二、触发器(trigger) + 存储过程

❖触发器类型
    ◼行级触发器(FOR EACH ROW)
    ◼语句级触发器(FOR EACH STATEMENT)
❖AFTER/BEFORE是触发的时机
    ◼AFTER表示在触发事件的操作执行之后激活触发器
    ◼BEFORE表示在触发事件的操作执行之前激活触发器
❖触发器的执行
是由触发事件激活的,并由数据库服务器自动执行!
❖删除触发器

-- 标准SQL
DROP TRIGGER<触发器名> ON <表名>
-- T-SQL
drop trigger 触发器名;
-- 或者这样写,下面这种写法更好,类似删表,如果存在才删除
if(object_id('触发器名') is not null)
	drop trigger 触发器名;

❖存储过程
由过程化SQL语句,经编译和优化后存储在数据库服务器中,可以被反复调用,运行速度较快。

◼标准SQL创建存储过程

CREATE OR REPLACE PROCEDURE 过程名([参数1,参数2,…])
AS <过程化SQL块>;

◼T-SQL典型例子,用以说明建立过程

if (exists (select * from sys.objects where name = 'Proc_TRANSFER'))
    drop procedure Proc_TRANSFER
go
create procedure Proc_TRANSFER 
@inAccount int,@outAccount int,@amount float
 /*定义存储过程TRANSFER,参数为转入账户、转出账户、转账额度*/
as
begin transaction TRANS   
   	declare	/*定义变量*/
	@totalDepositOut float,
	@totalDepositIn float,
	@inAccountnum int;
	 /*检查转出账户的余额 */     
	select @totalDepositOut = total from Account where accountnum = @outAccount;
	/*如果转出账户不存在或账户中没有存款*/
	if @totalDepositOut is null               	   
		begin
			print '转出账户不存在或账户中没有存款'
			rollback transaction TRANS; 	   /*回滚事务*/
			return;
		end;
	/*如果账户存款不足*/
	if @totalDepositOut < @amount     	
		begin
			print '账户存款不足'
			rollback transaction TRANS; 				/*回滚事务*/
			return;
		end
	/*检查转入账户的状态 */  
	select @inAccountnum = accountnum  from Account	where accountnum = @inAccount;
	/*如果转入账户不存在*/ 
	if @inAccountnum is null   		                       
		begin
			print '转入账户不存在'
		    rollback transaction TRANS; 	         	 		/*回滚事务*/
			return;
		end;
	/*如果条件都没有异常,开始转账。*/ 
	begin
		update Account set total = total - @amount where accountnum = @outAccount; /* 修改转出账户余额,减去转出额 */
		update Account set total = total + @amount where accountnum = @inAccount; /* 修改转入账户余额,增加转入额 */
		print '转账完成,请取走银行卡'
		commit transaction TRANS;                       	/* 提交转账事务 */
		return;
	end

◼执行存储过程:T-SQL是用exec,标准SQL是call或者perform

◼修改存储过程:只需将创建时的create改成alter

◼删除存储过程:

drop procedure 过程名;

❖函数

函数和存储过程的异同

同:都是持久性存储模块
异:函数必须指定返回的类型

下面是标准SQL函数的相关内容

1.函数的定义语句格式

CREATE OR REPLACE FUNCTION 函数名 ([参数1,参数2,…]) RETURNS <类型> AS <过程化SQL块>;

2.函数的执行语句格式

CALL/SELECT 函数名 ([参数1,参数2,…]);

3.修改函数

重命名

ALTER FUNCTION 过程名1 RENAME TO 过程名2;

重新编译

ALTER FUNCTION 过程名 COMPILE;

下面是T-SQL函数的相关内容,拿个练习的例子说

create function AvgAge(@Sex varchar(10)='男')    --在这里是给参数默认值,即可以不传参数调用这个函数
returns decimal
as
begin
    declare @AvgAge decimal(10,2)
    select @AvgAge=AVG(Convert(decimal(10,2),Sage)) from Student where Ssex=@Sex
    return @AvgAge
end;

-- 测试:select [函数的所有者].函数名 as 字段别名
select dbo.AvgAge(default) as AvgAge;
select dbo.AvgAge('男');
select dbo.AvgAge('女');

六、收尾

写的过程中发现自己忘的真的不是一星半点,而是so much!基础篇第1~5章的内容不少,需要记忆和练习的东西也很多,尤其是第3章,难点是第5章和第8章的存储过程,属于基础篇自然有它的道理,基础打的牢才能走的远,在学习进阶等高级部分时也会更容易上手!“不积跬步无以至千里,不积小流无以成江海”。Just Do It !

以上是关于数据库作业——SQL总结的主要内容,如果未能解决你的问题,请参考以下文章

数据库作业——SQL总结

CISSP-OSG-要点总结梳理

对sql作业的总结(不用group by 通过with as,exists实现分类)

数据结构学习笔记——基数排序 | 排序算法总结

数据结构学习笔记——基数排序 | 排序算法总结

Hypervisor