数据库之关系代数
一、传统的集合运算
前提:
关系R 和 关系S 具有相同的属性个数。
1、并 ∪
R∪S=
2、差 −
R−S=
3、交 ∩
R∩S=
4、笛卡尔积 ×
(n * m)
R×S=
二、专门的关系运算
选择σ、投影 π 关系运算、自连接
均用Student、Coures、SC 表来演示
# 自连接 /*以Course表为例*/ -- 查询每一门课的间接先修课(即先修课的先修课) select fist.Cno, second.Cpno from Coures as fist, Coures as second where fist.Cpno = second.Cno;
1、选择σ
目的:
选出满足条件的 诸元组 ∧ ∨ ¬
# 【选择σ】 不改变属性列个数 因此用 select *
-- 比较运算符的SQL表示
select *
from Student
where Sage < 20;
/*延展: [10,20] --> where Sage between 10 and 20; */
-- 逻辑运算符的SQL表示
¬ not
∧ and
∨ or
例:σSage<20 (Student)
2、投影 π
目的:
选出满足条件的若干 属性列
select Sname,Sdept
from Student;
πSname,Sdept (Student)
3、连接 θ 💖 ⋈
目的:
从两个关系R、S的笛卡尔积中选取 属性间满足一定条件的元组
①关系表
②连接运算
1、内连接
2、自然连接
3、外连接
③SQL语句
1、using关键字:连接查询时如果是同名字段作为连接条件,using可以代替on出现(比on更好)
- using是针对同名字段(using(id) === A.id = B.id)
- using关键字使用后会自动合并对应字段为一个
- using可以同时使用多个字段作为条件
2、自然连接:包含自然内连接和自然外连接
- 自然内连接:
natural join
- 自然外连接:
natural left/right join
- 自然连接条件匹配模式:自动寻找相同字段名作为连接条件(字段名相同)
#交叉连接
select *
from r2 cross join s2;
/*类似于:(笛卡尔积)
select *
from r2, s2;
*/
-- -------------------------------
#内连接
-- 非等值连接
/*
select *
from r2, s2
where r2.C < s2.E;
*/
select *
from r2 inner join s2 on r2.C < s2.E;
-- 等值连接
/*
select *
from r2,s2
where r2.B = s2.B;
*/
select *
from r2 inner join s2 on r2.B = s2.B;
-- -------------------------------
#自然连接
select *
from r2 natural join s2;
/*类似于使用using:
select *
from r2 inner join s2 using(B);
*/
-- -------------------------------
#外连接
-- 左外连接
/*
select *
from r2 left join s2 on r2.B = s2.B;
或者;
select *
from r2 natural left join s2;
*/
select *
from r2 left join s2 using(B);
-- 右外连接
/*
select *
from r2 right join s2 on r2.B = s2.B;
或者:
select *
from r2 natural right join s2;
*/
select *
from r2 right join s2 using(B);
其他:
自连接内容,详见《5、DQL语言(重点)》
4、除 ÷
-- 方式1
select A
from r3 natural join s3
GROUP BY r3.A
HAVING count(r3.A) = (
SELECT count(*)
FROM s3
);
-- 方式2
select A
from r3 left join s3 using(B,C) /*使用left join 是因为MySQL不支持💖完全外连接*/
GROUP BY r3.A
HAVING count(r3.A) = (
SELECT count(*)
FROM s3
);
三、配套SQL文件下载
本篇文章制作不易,期待你们的小星星😄。
点击右上角 GitHub 图标即可查看下载