2.5.4集合间运算

集合间运算包括交集"^",并集"&",差集"\",合集"|"等。

交集与差集运算

下面的网格中,将Amount大于等于20000且月份是3月的订单存入A2,将SalesID等于540992的订单存入B2。求A2B2的交集和差集,结果存入A3B3

 

A

B

1

=file("Order_Books.txt").import@t()

 

2

=A1.select(Amount>=20000 && month(Date)==3)

=A1.select(SalesID==540 || SalesID==992)

3

=A2^B2

=A2\B2

A2中排列如下:

B2中排列如下:

A3中计算交集,结果是排列:

B3中计算差集,从A2中去掉B2的成员,结果仍然是排列:

再来看看不同序表中的集合运算,先使用derive() 函数将序列或排列复制生成新序表,再计算交集和差集:

 

A

B

1

=file("Order_Books.txt").import@t()

 

2

=A1.select(Amount>=20000 && month(Date)==3)

=A1.select(SalesID==540 || SalesID==992)

3

=A2.derive()

=B2.derive()

4

=A3^B3

=A3\B3

A3B3中的序表中的数据,和前面例子中A2B2是相同的。

A4中计算A3B3的交集,结果为空集:

这说明序表作为实体成员的集合,不同序表的成员总是不同的,两个序表之间交运算一定是空,没有实际的业务意义。

B4中计算A3B3的差集,因为两个序表的成员总是不同的,因此差集的计算结果仍为A3

由于来自于同一个序表的排列进行集合运算时才会有实际的业务意义。不同的序表或来自不同序表的排列做交、差时通常没有实际的业务意义。

并集与合集运算

下面的网格中,从B1的排列中选择记录构成排列,将SalesID等于540992的订单存入A2,将SalesID等于540668的订单存入B2。求A2A3的并集和合集,结果存入A3B3

 

A

B

1

=file("Order_Books.txt").import@t()

=A1.select(Amount>=20000 && month(Date)==3)

2

=B1.select(SalesID==540 || SalesID==992)

=B1.select(SalesID==540 || SalesID==668)

3

=A2&B2

=A2|B2

A2中排列如下:

B2中排列如下:

A3中计算A2B2的并集。A2B2的成员会按顺序合并,重复的记录会去除。

A5中计算A2A3的合集。A2A3的成员会按顺序合并,重复的记录不会去除。

再来看看不同序表中的集合运算:

 

A

B

1

=file("Order_Books.txt").import@t()

=A1.select(Amount>=20000 && month(Date)==3)

2

=B1.select(SalesID==540 || SalesID==992)

=B1.select(SalesID==540 || SalesID==668)

3

=A2.derive()

=B2.derive()

4

=A3&B3

=A3|B3

A3B3中的序表中的数据,和前面例子中A2B2是相同的。

A4中计算A3B3的并集。两个序表的成员完全不同,做并运算即相当于两个表的简单合并(union all),这和做合集运算的结果相同:

B4中计算A3B3的合集,结果与A4中计算并集时完全相同: