SZU 数据设计与分析第3章 关系代数

@

关系代数

1.并/联合(Union U)

1.1 定义:

联合 (\(\cup\))
这个操作的结果,即 R  S,是一个包含所有在 R 或 S 或两者中的元组的关系。 重复的元组不会出现在输出中。
形式上: \(R\) \(\cup\) \(S\) \(=\) \(\{\) \(t | t\) \(\in\) R 或 t \(\in\) S \(\}\)
联合兼容性:设 R 和 S 是两个分别具有属性 \((A1, A2, ..., An)\)\((B1, B2, ....., Bn)\) 的关系。 如果要合并 R 和 S,则应满足以下两条规则:

规则1:关系 \(R\)\(S\) 必须具有相同的度数(属性)。
规则2:\(R\)的第\(i\)个属性的定义域和S的第\(i\)个属性的定义域必须相同。
\(dom(A_i) = dom(B_i)\),其中,1 \(\leq\) i \(\leq\) n。

1.2 例图

在这里插入图片描述

2.差运算(difference)

2.1 定义

与联合一样,关系差分运算符也要求其操作数为相同类型。
格式:R - S
形式上:R - S = { t | t \(\in\) R 和 t \(\notin\) S}
语义:给定两个相同类型的关系 R 和 S,这两个关系之间的差异 R-S 是包含 R 中所有未出现在 S 中的元组的关系。

2.2 例图

在这里插入图片描述

3.交(intersection)

3.1 定义

表达式 R ∩ S 返回出现在关系 R 和 S 中的所有元组。
与并集和差集一样,关系交集运算符要求其操作数为相同类型。
形式上:R \(\cap\) S = { t | t \(\in\) R 和 t \(\in\) S}
从现有运算符派生:
R \(\cap\) S = R - (R - S) = S - (S - R)

3.2 例图

在这里插入图片描述

4.笛卡尔积(X)

4.1 定义

笛卡尔积或叉积是一种二元运算,用于组合两个关系。 假设 R 和 S 分别与 n 和 m 属性的关系,笛卡尔积,R × S 可以写成,
R (A1, A2, …, An) × S (B1, B2, …, Bm)
上面设置操作的结果是,
Q (A1, A2, …, An, B1, B2, …, Bm)
在哪里,
度数 (Q) = n + m
count(Q) = R 中的元组数 * S 中的元组数。

4.2 例图

在这里插入图片描述

5.选择\(\partial\)

\(\partial_{age=19}(student)=\partial_{selection-condition}(Relation)\)
多重选择
在这里插入图片描述

6. 投影\(\pi\)

投影操作用于仅从关系中选择几列。
\(\pi_{attributes}(Relation)\)

7.join \(\infty\)

在这里插入图片描述

7.1 Theta Join(\(\Theta\)) || NoEqui Join

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

7.2 Equi join

在这里插入图片描述

7.3 自然连接

当我们在连接两个关系时省略条件,则称为自然连接(*):

让关系 R1 分别有属性(x1,x2,x3,M),
R2 分别有属性(y1,y2,y3,y4,y5,M)。
也就是说,M 属性是两个关系共有的。
那么 R1 和 R2 的自然连接是一个与 Heading(x1,x2,x3,M, y1,y2,y3,y4,y5) 和 body 的关系,该 body 由所有元组组成,重复属性 M 被删除。

7.4 LEFT JOIN AND OUT JOIN RIGHT OUTER JOIN

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

8.除法

把同时A中具有和B\(共同的\)所有属性的如果B中包含了A没有的可以直接忽略掉
在这里插入图片描述

9. SQL语句

9.1 create database + 数据库名字

9.2 drop database + 数据库名字

9.3 ALTER TABLE Persons (ADD DateOfBirth date / MODIFY DateOfBirth year / DROP COLUMN DateOfBirth)

9.4 创建表(主键+外键)

CREATE TABLE rent_Info(
    Order_ID int PRIMARY KEY AUTO_INCREMENT,
    Date_Rented DATE NOT NULL,
    Date_Returned DATE NOT NULL,
    Optional_Insurance TINYINT DEFAULT 0,
    Customer_ID VARCHAR(10),
    Bag_ID int,
    reverted TINYINT DEFAULT 0,
    CONSTRAINT + (约束名字) + FOREIGN key(Customer_ID) REFERENCES customers(Customer_ID),
    CONSTRAINT FOREIGN key(Bag_ID) REFERENCES bags(Bag_ID)
);

9.5 视图

create view table_name as + 语句

mysql> ALTER VIEW view_students_info
    -> AS SELECT id,name,age
    -> FROM tb_students_info;

mysql> DESC view_students_info;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | 0       |       |
| name  | varchar(45) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

drop view view_name

9.6 Oracle view

在这里插入图片描述

9.7 添加约束


1.主键约束
添加:alter table  table_name add primary key (字段)
删除:alter table table_name drop primary key
2.非空约束
添加:alter  table table_name modify 列名 数据类型  not null 
删除:alter table table_name modify 列名 数据类型 null
3.唯一约束
添加:alter table table_name add unique 约束名(字段)
删除:alter table table_name drop key 约束名
4.自动增长
添加:alter table table_name  modify 列名 int  auto_increment
删除:alter table table_name modify 列名 int  
5.外键约束
添加:alter table table_name add constraint 约束名 foreign key(外键列) 
references 主键表(主键列)
删除:
第一步:删除外键
alter table table_name drop foreign key 约束名
第二步:删除索引
alter  table table_name drop  index 索引名
[^1]: 
约束名和索引名一样
6.默认值
添加:alter table table_name alter 列名  set default '值'
删除:alter table table_name alter 列名  drop default

在这里插入图片描述

9.9 HAVING

where 和having之后都是筛选条件,但是有区别的:

1.where在group by前, having在group by 之后

2.聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

9.10 DISTINCT

mysql> select DISTINCT(name) from info;
+------+
| name |
+------+
| addd |
| adsd |
| dcj  |
+------+
3 rows in set (0.00 sec)

9.11 INNER JOIN

在使用 join 时,on 和 where 条件的区别如下:

1、 on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

9.12 LEFT /RIGHT JOIN

左表全部列出来
在这里插入图片描述

9.13 JOIN 总结

在这里插入图片描述

9.14 ANY/ALL/IN

在这里插入图片描述

9.15 UNOIN / intersect / minus

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SELECT column_name(s) FROM table1
UNION ALL(没有ALL) 默认去重/ instersect/ minus
SELECT column_name(s) FROM table2;

9.16 子查询

超详细链接

9.17 Exist And No Exist

在这里插入图片描述

在这里插入图片描述
一层一层的去分析就好了,你添加not exists之后考虑一下里面要展示什么信息
在这里插入图片描述

9.18 UPDATE

在这里插入图片描述

9.19 DELETE

 delete from info where age < 0;
posted @ 2022-01-08 15:59  dcj101404  阅读(185)  评论(0)    收藏  举报