2025年数据库的交、并、差、笛卡尔积运算(代码实现)

数据库的交、并、差、笛卡尔积运算(代码实现)前言 关系代数是以关系为运算对象的一组高级运算的集合 由于关系定义为属性个数相同的元组的集合 因此集合代数的操作就可以引入到关系代数中 关系代数中的操作可以分为两类 传统的关系操作 并 差 交 笛卡尔积 他们的图示可以表示为 但是这样看可能不好理解 下面举例说明一下这些运算的用途 注

大家好,我是讯享网,很高兴认识大家。

前言

关系代数是以关系为运算对象的一组高级运算的集合。由于关系定义为属性个数相同的元组的集合,因此集合代数的操作就可以引入到关系代数中。关系代数中的操作可以分为两类:传统的关系操作,并、差、交、笛卡尔积。
他们的图示可以表示为:
在这里插入图片描述
讯享网

1. 并运算(UNION)

和离散中的并运算含义相同,即返回所有至少符合一个查询条件的部分。
在这里插入图片描述
下面举例说明:
学生表1
在这里插入图片描述

它可以对多个表进行查询也可以对单个表进行查询。
例如

(SELECT 学号, 姓名 FROM 学生表1 WHERE 性别 = '男' and 年龄 = 20) UNION (SELECT 学号, 姓名 FROM 学生表1 WHERE 性别 = '女' and 年龄 = 19) 

讯享网

这段代码的含义是:在表(学生表1)中查询所有20岁的男生和所有19岁的女生的学号和姓名。
结果应如下:
在这里插入图片描述
它也可以对多个表查询。

讯享网(SELECT 学号, 姓名 FROM 学生表1 WHERE 性别 = '男') UNION (SELECT 学号, 姓名 FROM 学生表2 WHERE 性别 = '男') 

这段代码的含义是:查出两个表(学生表1,学生表2)中所有的男生。
结果应如下:
在这里插入图片描述
它也可以多个语句进行交运算。
例如:

(SELECT 学号, 姓名 FROM 学生表1 WHERE 性别 = '男') UNION (SELECT 学号, 姓名 FROM 学生表2 WHERE 性别 = '男') UNION (SELECT 学号, 姓名 FROM 学生表2 WHERE 年龄 = 18 and 性别 = '女') 

同理,这个结果应为上次的结果加上(学生表2)中18岁的女生,这里就不画图了。感兴趣可以自己用DBMS软件调试。

2. 交运算(INTERSECT)

返回同时满足所有条件的结果。
在这里插入图片描述
它也是可以对多个表进行查询也可以对单个表进行查询。
还是用上个图举例
对单个表查询:

讯享网(SELECT 学号, 姓名 FROM 学生表1 WHERE 性别 = '男') INTERSECT (SELECT 学号, 姓名 FROM 学生表1 WHERE 年龄 = 18) 

这段代码的含义是:查询表(学生表1)中所有18岁的男生的学号和姓名。
结果应如下:
在这里插入图片描述
对两个表查询:

(SELECT 年龄 FROM 学生表1 WHERE 性别 = '男') INTERSECT (SELECT 年龄 FROM 学生表2 WHERE 性别 = '女') 

由于两个表中没有相交的学号和姓名,故查询年龄代替,含义为:表1中男生的年龄和表2中女生的年龄有哪些重叠的。
结果为下:
在这里插入图片描述
(测试环境:SQL server 2008 R2)

3. 差运算(EXCEPT)

查询在第一个条件里面但是不在后面的条件里面。
在这里插入图片描述
在这里插入图片描述
它也是可以对多个表进行查询也可以对单个表进行查询。


一个小插曲
在这里插入图片描述
在实验代码的时候发现minus一直报错,找了好久才知道minus是Oracle里面的语法,SQL server 应用 EXCEPT。


他也可以多语句同时使用,举例:

讯享网SELECT 学号 FROM 学生表1 WHERE 性别 = '男' except SELECT 学号 FROM 学生表1 WHERE 年龄 = 17 except SELECT 学号 FROM 学生表1 WHERE 年龄 = 18 

结果:
在这里插入图片描述

4. 笛卡尔积运算

笛卡尔积运算就是把两个集合中的元素重组一个大的一一对应的集合。
在这里插入图片描述
例如,A={a,b}, B={0,1,2},则

A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}

B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

代码我暂时还不会写。多举两个例子助理解吧:
l表:

lid name
101 北京
102 太原
101 NULL
102 NULL

II表:

matid qty lid mname
10011 1 101 北京
20012 1 102 太原
10011 1 102 太原
10011 1 102 太原

结果:

lid name matid qty lid mname
101 北京 10011 1 101 北京
102 太原 10011 1 101 北京
101 NULL 10011 1 101 北京
102 NULL 10011 1 101 北京
101 北京 20012 1 102 太原
102 太原 20012 1 102 太原
101 NULL 20012 1 102 太原
102 NULL 20012 1 102 太原
101 北京 10011 1 102 太原
102 太原 10011 1 102 太原
101 NULL 10011 1 102 太原
102 NULL 10011 1 102 太原
101 北京 10011 1 102 太原
102 太原 10011 1 102 太原
101 NULL 10011 1 102 太原
102 NULL 10011 1 102 太原
小讯
上一篇 2025-01-16 13:47
下一篇 2025-01-10 15:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119383.html