Fork me on GitHub

数据库之关系代数


一、传统的集合运算

前提:

  关系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表示
 ¬   notandor

例:σ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 图标即可查看下载

四、SQL JOINS图

posted @   Lencamo  阅读(3071)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示