数据库关系操作集合

文章目录

    • 传统集合运算
      • 1:联合(UNION)
      • 2:差集(EXCEPT 或 MINUS 或 LEFT JOIN&&IS NULL)
      • 3:交集(INTERSECT或INNER JOIN)
      • 4:笛卡尔积(JOIN)
    • 专门集合运算
      • 1:选择(SELECT)
      • 2:投影(PROJECTION)
      • 3:连接(JOIN)
      • 4:除(DIVISION)

传统集合运算


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

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

1:联合(UNION)

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

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

例,表一people1数据为下:

数据库关系操作集合_第1张图片

例,表二people2数据为下:

数据库关系操作集合_第2张图片

使用联合 UNION:

select * from people1 
union 
select * from people2;

数据库关系操作集合_第3张图片

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数据为下:

数据库关系操作集合_第4张图片

例,表二people2数据为下:

数据库关系操作集合_第5张图片

使用差集(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数据为下:

数据库关系操作集合_第6张图片

例,表二people2数据为下:

数据库关系操作集合_第7张图片

使用交集(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 = "亚索";

数据库关系操作集合_第8张图片

2:投影(PROJECTION)

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

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

数据库关系操作集合_第9张图片

3:连接(JOIN)

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

4:除(DIVISION)

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

比如:

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

例,表三people3数据为下:

数据库关系操作集合_第10张图片

例,表四allproject数据为下:

数据库关系操作集合_第11张图片

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

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

在这里插入图片描述

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

你可能感兴趣的:(数据库,数据库,oracle,mysql)