数据库系统第四周小结

数据库系统

2023-3-13~2023-3-19

第四周小结

第七讲–复杂查询与视图

1.(NOT) EXISTS 子查询:
基本语法–[not] exists (子查询)
语义–子查询结果中有无元组存在;
例如,检索选修了赵三老师主讲课程的所有同学的姓名:
Select DISTINCT Sname From Student
Where exists ( Select * From SC,Course C,Teacher T Where SC.C#=C.C# and SC.S#=Student.S# and C.T#=T.T# and Tname = ‘赵三’);
检索学过001号教师将的所有课程的所有同学的姓名:
Select Sname From Student
Where not exists //不存在
(Select * From Course //有一门001教师的课
Where Course.T#=’001’ and not exists
(Select * From SC Where S# = Student.S# and C#=Course.C#)); //该同学没学过
表示不存在有一门001号老师主讲的课该同学没学过;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.结果计算:
Select 列名 | expr | agfunc(列名) [[, 列名 | expr |agfunc(列名)]…]
From 表名1 [,表名2 …]
[Where 检索条件];
其中expr可以是常量、列名、由常量、列名、特殊函数及算术运算符构成的算术运算式;agfunc()是一些聚集函数;
例如,求有差额的任意两位教师的薪水差额:
Select T1.Tname as TR1,T2.Tname as TR2,T1.Salary-T2.Salary
From Teacher T1,Teacher T2
Where T1.Salary>T2.Salary;
3.聚集函数
在这里插入图片描述

例如,求数据库课程的平均成绩:(课程名在Course表中)
Select AVG(Score) From Course C,SC
Where C.Cname=’数据库’ and C.C#=SC.C#;
4.分组查询与分组过滤
分组的基本语法:
Select 列名 | expr | agfunc(列名) [[,列名 | expr | agfunc(列名)]…]
From 表名1 [,表名2…]
[Where 检索条件]
[Group by 分组条件];
其中,分组条件可以是列名1,列名2,…;
例如,求每一个学生的平均成绩
Select S#,AVG(Score) From SC
Group by S#;
分组过滤,对集合(即分组)进行条件过滤,不满足的剔除,有Having子句(需要Group by子句支持),[Group by 分组条件 [Having 分组过滤条件]];
例如,求不及格课程超过两门的同学的学号:
Select S# From SC Group by S# Having Count(*)>2;
5.Having子句和Where子句表达条件的区别
每一分组检查是否满足条件使用Having子句,每一行都检查是否满足的使用Where子句;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.并-交-差的处理(需要满足相容性)
基本语法–子查询 {Union [ALL] | Intersect [ALL] |Except [ALL] 子查询}
其中ALL表示要保留重复的元组;
在这里插入图片描述

例如,求学过002号课或003号课的同学的学号:
Select S# From SC Where C#=’002’ UNION Select S# From SC Where C#=‘003’;
求既学过002号课又学过003号课的同学的学号:
Select S# From SC Where C#=’002’ INTERSECT Select S# From SC Where C#=‘003’;
假定所有学生都有选课,求没学过002号课程的学生的学号:
Select S# From SC EXCEPT Select S# From SC Where C#=’002’;
7.空值
空值检测–is [not] null
例如,找出年龄为空的学生姓名:
Select Sname From Student Where Sage is null;
在这里插入图片描述

8.内连接、外连接(考试并不考察)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
9.SQL-SELECT的完整语法
在这里插入图片描述

10.SQL-视图定义
Create view view_name [(列名[, 列名]…)] as 子查询 [with check option]
若视图的属性名缺省,则默认为子查询结果的属性名;
With check option表示对视图进行增、删、改操作时元组是否满足视图定义中子查询中定义的表达式;
例如,定义视图CompStud为计算机系的学生,屏蔽其他系的学生:
Create View CompStud AS (Select * From Student Where D# in (Select D# From Dept Where Dname=’计算机’));
11.定义好的视图可以像表一样在SQL各种语句中使用;
例如,检索主讲数据库课程教师的姓名,使用Teach(Teach如下所示):
Select T.Tname From Teach T Where T.Cname=’数据库’;
在这里插入图片描述

检索计算机系所有学生:Select * From CompStud;
12.视图更新

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第八讲–SQL语言与数据库完整性和安全性

1.广义完整性和狭义完整性
广义完整性包括语义完整性、并发控制、安全控制、DB故障恢复等;
狭义完整性专指语义完整性,DBMS通常有专门的完整性管理机制与程序来处理语义完整性;
2.DBMS允许用户通过SQL-DDL定义一些完整性约束规则。当DB更新操作时,DBMS自动按照完整性约束条件检查;
3.完整性约束条件的一般形式
Integrity Constraint ::=(O,P,A,R)
O为约束的对象(列、元组、元组集合等);P为谓词条件,怎样的约束;
A为触发条件,何时检查;R为响应动作,不满足时如何。
4.数据库完整性分类
按照约束对象分类,有域完整性约束条件(施加在某一列)、关系完整性约束条件(施加在关系/Table);
按照约束来源分类,有结构约束(来自模型的约束,如函数依赖约束、主键约束–实体完整性、外键约束–参照完整性,只关心数值是否相等,是否允许空值)、内容约束(来自用户的约束,如用户自定义完整性,Sage>23);
按照约束状态分类,有静态约束(DB任何时候都应该满足)、动态约束(DB从一状态变为另一状态要满足);
5.静态约束
列完整性–域完整性约束;
表完整性–关系完整性约束;
Intergrity Constraint ::=(O,P,A,R)中O和P需要定义,A和R默认即可;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.Create Table
功能:定义关系模式、定义完整性约束、定义物理存储特性;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Check中的条件可以是Select-From-Where内任何Where后的语句,包含子查询;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.断言ASSERTION
一个断言就是一个谓词表达式,表达了希望数据库总满足的条件;
语法形式–CREATE ASSERTION CHECK
断言增加数据库维护的负担;
在这里插入图片描述

8.动态约束
Integrity Constraint ::=(O,P,A,R),其中O、P、A、R都需要定义;
触发器Trigger是一种过程完整性约束(Create Table中定义的都是非过程性约束),是一段程序,在特定时刻自动触发;
在这里插入图片描述

当某一事件发生时,对该事件产生的结果检查条件,若满足则执行后面的程序段;
在这里插入图片描述

当一个事件(增/删/改)发生前Before或发生后After触发,触发器要处理更新前、更新后的值;
在这里插入图片描述

例如,设计一个触发器,当SC表更新时,使其成绩只升不降:
create trigger sc_chgsal before update of score on SC
referencing new x,old y
for each row when(x.score<y.score)
begin raise_application_error(-20003,”invalid score on update”); end;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
9.数据的安全级别:绝密、机密、可信、无分类;
10.数据库系统DBS的安全级别:物理控制、网络控制、操作系统控制、DBMS控制;
11.DBMS的安全机制:
自主安全性机制–存取控制,权限在用户间传递,用户自主管理数据库安全性;
强制安全性,对数据和用户强制分类,不同类别用户能访问不同类别的数据;
推断控制机制;
数据加密存储机制;
12.DBMS允许用户通过SQL-DCL定义一些安全性控制规则,当有DB访问操作时,自动按照安全性控制规则检查;
在这里插入图片描述

13.自主安全性的实现方式
存储矩阵:
在这里插入图片描述

视图:
在这里插入图片描述

14.授权命令与收回授权命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
15.授权传播范围
水平传播数量是授权者的再授权者用户数目(树的广度);
垂直传播数量是授权者传播给授权者,再被传播给另一个被授权者(树的深度);
16.授权过程中的问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海质粒ABCC9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值