数据库之关系代数
一、传统的集合运算
前提:
关系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 图标即可查看下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?