数据库系统第三周小结

数据库系统

2023-3-6~2023-3-12

第三周小结

第五讲–关系演算

1.关系演算根据谓词变量不同,分为关系元组演算(元组为变量)、关系域演算(域变量);
2.关系元组演算:
{t|P(t)},其中t是元组变量,t∈r表示元组t在关系r中,t[A]表示t元组t的分量,P是与谓词逻辑相似的公式,P(t)表示以元组t为变量的公式;
P(t)有原子公式(s∈R,s[A]θc,s[A]θu[B]);
在这里插入图片描述

例如,检索出年龄小于20岁或者03系的所有男学生
{t|t∈Studentꓥ(t[Sage]<20ꓦt[D#]=’03’)ꓥt[Ssex]=’男’}
检索不是(小于20岁的男同学)的所有同学
{t|t∈Studentꓥ┐(t[Sage]<20ꓥt[Ssex]=’男’)}
3.存在量词与全称量词公式
在这里插入图片描述

被存在或任意限定的元组变量t为约束变量,否则t为自由变量;
例如,检索出年龄不是最小的所有同学
在这里插入图片描述

在关系代数中,下面的表达式与上述表达的含义等价:
在这里插入图片描述
在这里插入图片描述

检索出课程都及格的所有同学
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
检索所有同学所有课程全都及格的系
在这里插入图片描述

4.元组演算的等价性变换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.关系元组演算的典型示例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.关系元组演算公式与关系代数的等价性
在这里插入图片描述

7.关系域演算
{<x1,x2,…,xn>|P(x1,x2,…,xn)},其中xi代表域变量/常量,P为以xi为变量的公式;
公式P有原子公式(<x1,x2,…,xn>∈R,xθc,xθy)
在这里插入图片描述

例如,检索出不是03系的所有学生:
{<a,b,c,d,e,f>|<a,v,c,d,e,f>∈Studentꓥe<>’03’};
检索不是(小于20岁的男同学)的所有同学的姓名:
在这里插入图片描述

8.关系域演算和元组演算的比较
元组演算以元组为变量、基本处理单位,先找到元组,再找元组分量,进行谓词判断;域演算以域变量为基本处理单位,先有域变量,再判断由域变量组成的元组是否存在或是否满足谓词判断;
公式的运算符(与、或、非、任意、存在)是相同的,只是其中的变量不同;
元组演算和域演算可以等价互换;
9.关系演算的安全性
不产生无限关系和无穷验证的运算是安全的;
关系代数是集合运算,是安全的(集合的有穷性);
关系演算不一定是安全的;
在这里插入图片描述

10.安全约束有限集合DOM:
DOM(φ)是一个有限集合,其中每个符号要么是φ中明显出现的符号,要么是出现在φ中的某个关系R的某元组的分量;
11.安全元组演算表达式:
存在表达式,只需要验证DOM中元素是否有使谓词公式为真,DOM以外的元素认为明确不满足谓词公式;
任意表达式,只需要验证DOM中是否有使谓词公式为假的元素,DOM以外的元素认为明确满足谓词公式;
在这里插入图片描述

12.关系运算的思维:
关系代数,以集合为对象,由集合到集合的变换;
元组演算,以元组为对象,取出关系的每一个元组验证,有一个元组变量则可能要一个循环,多个元组变量需要多个循环;
域演算,以域变量为对象,取出域的每一个变量进行验证;
13.关系代数、安全的元组演算表达式、安全的域演算表达式是等价的;
14.三种关系运算都是非过程性的(域演算>元组演算>关系代数);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第六讲–SQL语言

1.SQL语言,是集合DDL、DML和DCL于一体的数据库语言;
DDL语句引导词,create、alter(修改)、drop(撤销);
DML语句引导词,insert、delete、update、select;
DCL语句引导词,grant、revoke;
2.SQL-SELECT完整语法:
在这里插入图片描述

3.建立数据库,包括定义数据库和表(DDL)、向表中追加元组(DML);
Create database 数据库名;
Create table 表名(列名 数据类型 [Primary key/Unique][Not null][,列名 数据类型 [Not null],…]);
其中[]中的可以省略;primary key为主键约束(每表至多一个);unique为唯一性约束(候选键);Not null为非空约束;
Insert into 表名[(列名 [,列名]…] values (值 [,值],…);(若列名省略,必须与存储列名一致排列)
4.单表查询-SELECT-FROM-WHERE
在这里插入图片描述

例如,检索学生表中所有学生的信息
Select S#,Sname,Ssex,Sage,Sclass,D#
From Student;(也可以Select * From Student;)
检索学生表中所有年龄小于等于19岁的学生的年龄及姓名
Select Sage,Sname
From Student
Where Sage <=19;
在这里插入图片描述

5.结果唯一性问题
在表中要求无重复元组通过定义primary key/unique保证,检索结果中要求无重复元组则通过DISTINCT保留字实现;
例如,检索成绩大于80分的所有学号:
Select DISTINCT S#
From SC
Where Score>80;
6.结果排序问题
在Select语句中加入order by子句实现,order by 列名 [asc|desc],默认为asc升序,指明desc时为降序;
例如,按学号由小到大顺序显示所有学生的学号和姓名:
Select S#,Sname From Student
Order By S# ASC;
7.模糊查询
Like运算符表达式:列名 [not] like “字符串;
“%”匹配非负整数个字符;
“_”匹配单个字符;
“\”转义字符;
例如,检索不姓张的所有同学的姓名:
Select Sname From Student
Where Sname Not Like ‘张%’;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.多表联合查询
在这里插入图片描述

例如,按”001”号课程成绩由高到低显示所有学生的姓名(二表连接):
Select Sname From Student,SC
Where Student.S# = SC.S# and SC.C#=’001’
Order By Score DESC;
9.重名处理
Select 列名 as 列别名 [[,列名 as 列别名]…]
From 表名1 as 表别名1,表名2 as 表别名2,…
Where 检索条件;(其中as可以省略)
例如,求有薪水差额的任意两名教师:
Select T1.Tname as Teacher1,T2.Tname as Teacher2
From Teacher T1,Teacher T2
Where T1.Salary>T2.Salary;
求既学过001号课又学过002号课的所有学生的学号:
Select S1.S# From SC S1,SC S2
Where S1.S#=S2.S# and S1.C#=’001’ and S2.C#=’002’;
在这里插入图片描述
在这里插入图片描述
10.SQL之元组的其他操作
元组新增insert,新增若干元组至table中;
Insert into 表名 [(列名[, 列名]…)]
子查询;
在这里插入图片描述

元组更新update,对某些元组的某些属性值重新设定;
Delete From 表名 [Where 条件表达式];(where条件省略时,表示删除所有元组)
例如,删除自动控制系的所有同学:
Delete From Student Where D# in (Select D# From Dept Where Dname = ‘自动控制’);
元组删除delete,删除某些元组;
Update 表名
Set 列名 = 表达式 | (子查询)
[[,列名 = 表达式 | (子查询)]…]
[Where 条件表达式];(Where条件省略,则更新所有元组)
例如,将所有计算机系的教师工资上调10%:
Update Tearcher
Set Salary = Salary * 1.1
Where D# in (Select D# From Dept Where Dname = ‘计算机’);
在这里插入图片描述

11.SQL-DDL之撤销与修改
在这里插入图片描述

例如,在学生表Student中新增二裂Saddr、PID:
Alter Table Student Add Saddr char[40],PID char[18];
撤销基本表 drop table 表名;(delete只是删除表的元组,但是drop是撤销表格式、表的所有元组、该表导出的视图等相关所有内容)
撤销数据库 drop database 数据库名;
12.SQL-DDL之数据库指定与关闭命令
指定当前数据库 use 数据库名;
关闭当前数据库 close 数据库名;
在这里插入图片描述
在这里插入图片描述
13.(NOT) IN子查询
基本语法–表达式 [not] in (子查询);
例如,列出张三、王五同学的所有信息:
Select * From Student
Where Sname in (“张三”,”王五”);
求既学过001号课又学过002号课学生的学号:
Select S# From SC
Where C#=’001’ and S# in (Select S# From SC Where C#=‘002’);
14.子查询的相关性
在这里插入图片描述

非相关子查询,内层查询独立进行,没有涉及任何外层查询相关信息的子查询;
相关子查询,内层查询需要依靠外层查询的某些参数为限定条件才能进行的子查询;(外层向内层传递的参量用外层的表名/表别名限定)(相关子查询不能内层向外层传递参数)
例如,求学过001号课程的同学的姓名:
Select Sname From Student Stud
Where S# in (Select S# From SC Where S# = Stud.S# and C#=’001’);
15.Θ some/θ all子查询
基本语法–θ some (子查询);θ all (子查询);
语义–类似于存在、任意量词;
例如,找出工资最低的教师姓名:
Select Tname From Teacher
Where Salary <= all (Select Salary From Teacher);
找出001号课成绩不是最高的所有学生的学号:
Select S# From SC
Where Score < some (Select Score From SC Where C# = ‘001’);
找出所有课程都不及格的学生姓名(相关子查询):
Select Sname From Student
Where 60 > all (Select Score From SC Where S# = Student.S#);
找出张三同学成绩最低的课程号:
Select C# From SC,Student S
Where Sname = ‘张三’ and S.S# = SC.S# and Score <= all
(Select Score From SC Where S# = S.S#);
16.表达式 = some (子查询) 等价于 表达式 in (子查询)
在这里插入图片描述

17.表达式 not in (子查询) 等价于 表达式 <> all (子查询)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(上题的B是因为可能有学生名重复,对应的是该学生多门秋季课程在90分以上)

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深海质粒ABCC9

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

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

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

打赏作者

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

抵扣说明:

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

余额充值