数据库关系操作集合

传统集合运算


传统集合运算包括 联合(UNION),差集(EXCEPT 或 MINUS 或 LEFT JOIN&&IS NULL),交集(INTERSECT或INNER JOIN),笛卡尔积(JOIN)

需要注意的是,不同数据库语法可能会有些不同,不过大体概念即是该段所讲内容。

1:联合(UNION)

联合作用:删除重复的行。

它会分别对比两个表的所有相同列的内容是否一致,但是,你不应该使用一个表的 n 列数据与另一个 n+1 列的数据进行使用 UNION,否则将出现错误。

例,表一people1数据为下:

请添加图片描述

例,表二people2数据为下:

请添加图片描述

使用联合 UNION:

select * from people1 
union 
select * from people2;

在这里插入图片描述

2:差集(EXCEPT 或 MINUS 或 LEFT JOIN&&IS NULL)

差集作用:查找在一个集合中存在而在另一个集合中不存在的元素。

  1. 对比列的数量必须相同,不可以使用一个集合的 n 列与另一个集合的 n+1 列进行比较。(通过上小段的内容,你可能会有点疑惑,其实,当不使用 select * 时,会出现 select name from people1 与 select name,source from people2 进行对比情况)
  2. 对应列的数据类型需要兼容。一个集合的列为 int 类型不要与另一个集合为 varchar 的列进行集合运算。

MySQL 不支持 EXCEPT 或 MINUS,可以使用LEFT JOIN&&IS NULL来实现,这不是必须的,其他可以实现相同逻辑的方法也是可以的。

PostgreSQL 和 Oracle 支持 EXCEPT 或 MINUS。

例:表一people1数据为下:

请添加图片描述

例,表二people2数据为下:

请添加图片描述

使用差集(MySQL数据库):

select * from people1 
left join 
people2 
on people1.name = people2.name 
where people2.name is null;

join 需要和 on 一起使用。

使用差集(PostgreSQL 和 Oracle数据库):

select * from people1 
MINUS
select * from people2 

在这里插入图片描述

可以看到,”亚索“ 这一行数据在另一个集合中是不存在的。

3:交集(INTERSECT或INNER JOIN)

交集作用:返回两个集合都相等的行。

MySQL 并不支持 INTERSECT,可以用 INNER JOIN 来实现交集的功能。

PostgreSQL 和 Oracle 支持 INTERSECT。

例:表一people1数据为下:

例:表一people1数据为下:

请添加图片描述

例,表二people2数据为下:

请添加图片描述

使用交集(MySQL数据库):

select * from people1 
inner join 
people2 
on people1.name = people2.name;

在这里插入图片描述

可以发现,“锐雯” 那一行数据在两个集合内都存在。

4:笛卡尔积(JOIN)

笛卡尔积通常有连接条件:

  1. INNER JOIN(内连接):返回两个集合中都匹配的行。
  2. LEFT JOIN(左连接):返回左表所有的行,以及右表匹配的行,否则,右表将返回NULL。
  3. RIGHT JOIN(右连接):返回右表所有的行,以及左表匹配的行,否则,左表将返回NULL。
  4. FULL JOIN(全连接):返回左表和右表的所有行,当某一侧行在另一侧的行没有匹配的,将返回NULL。

专门集合运算


专门集合运算包括 选择(SELECT),投影(PROJECTION),连接(JOIN),除(DIVISION)

1:选择(SELECT)

选择作用:选择出符合某种条件的行,通常用 WHERE 来实现

select * from people1 
where name = "亚索";

在这里插入图片描述

2:投影(PROJECTION)

投影作用:选择集合中特定的列

select name,source 
from people1 
where name = "亚索";

在这里插入图片描述

3:连接(JOIN)

连接作用:将两个表结合起来,通常和 INNER JOIN、LEFT JOIN、RIGHT JOIN 或 FULL JOIN 一起使用。

4:除(DIVISION)

想要很好使用这个,我们需要想象一个应用场景。

比如:

  1. 我们想要查找购买了所有商品的的人
  2. 我们想要查找获得所有奖项的班级
  3. 我们想要查找参加过所有活动的员工

例,表三people3数据为下:

在这里插入图片描述

例,表四allproject数据为下:

在这里插入图片描述

使用除,查找参加过所有项目的人:

select name from people3 
group by name 
having count(distinct project) = (select count(*) from allproject);

在这里插入图片描述

除(DIVISION)基本思想:使用 GROUP BY 进行分组,然后使用 HAVING 判断每个组的数量是否等于全集的数量。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一拖再拖 一拖再拖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值