我在理解sql中的连接时遇到了麻烦,并且遇到了这个我认为可能对我有用的图像.问题是我不完全理解它.例如,图像右上角的连接,它将整个B圆圈的颜色设置为红色,但只有A的重叠.图像使得它看起来像圆圈B是sql语句的主要焦点,但是sql语句本身,从A开始(从A中选择,加入B),向我传达了相反的印象,即A将成为sql语句的焦点.
同样,下面的图像只包含来自B圈的数据,那么为什么在连接语句中包含A呢?
问题:从右上角顺时针工作并在中心完成,有人可以提供有关每个sql图像表示的更多信息,解释
a)为什么在每种情况下都需要连接(例如,特别是在没有数据来自A或B的情况下,即只有A或B而不是两者都被着色的情况)
b)以及任何其他细节可以澄清为什么图像是sql的良好表示

我试图确定有多少种不同的方法可以从序列中删除一组值,保留原始序列的顺序(稳定),并确保从原始序列中只删除1个实例值.例如,如果我有 
 [1,2,1,3,1,4,4],我想删除[1,4,4]我得到的组合将是:
[1,2,1,3,1,4,4] \ [1,4,4] = [ [2,1,3,1], [1,2,3,1], [1,2,1,3] ]
要么 
[1,2,1,3,1,4,4] \ [1,1] = [ [2,3,1,4,4], [1,2,3,4,4], [2,1,3,4,4] ]
我有javascript代码我写的所有数组值的组合没有删除和删除部分似乎应该很容易但我没有看到算法需要多次可能删除多个值.
我有两个集合a和b.我想计算a或者b两者中的项目集合,而不是两者中的项目集合(逻辑异或).有了LINQ,我可以想出这个:
IEnumerable<T> Delta<T>(IEnumerable<T> a, IEnumerable<T> b)
{
    return a.Except (b).Union (b.Except (a));
}
我想知道是否还有其他更有效或更紧凑的方法来产生两个集合之间的差异.
编辑1:Jon Skeet发布了第一个解决方案,它不依赖于a来保留项目的顺序HashSet.我想知道是否有其他方法可以保持输出的顺序a和b输出.
给定输入数组
[a,b,c,d,e]
和'加入'功能 (a,b) => (a+b)
我的代码返回以下数组数组,包含通过将join函数应用于各种元素对而获得的每个可能的变体,同时保持顺序:
[
  [a,b,c,d,e],
  [a,b+c,d,e],
  [a,b+c+d,e],
  [a,b,c+d,e],
  [a+b,c,d,e],
  [a+b,c+d,e],
  [a+b+c,d,e],
  [a+b+c+d,e],
  [a,b,c,d+e],
  [a,b+c,d+e],
  [a,b+c+d+e],
  [a,b,c+d+e],
  [a+b,c,d+e],
  [a+b,c+d+e],
  [a+b+c,d+e],
  [a+b+c+d+e],
]
在视觉上,我想要做的是:

代码可以工作,但我不知道该怎么称呼它 - 并且想要使用熟悉此操作的其他开发人员可以理解的名称,如果存在这样的名称.它不是一个电源组,但它是类似的......这个特定的set/array操作有一个名字吗?
编辑:好的.它们不是排列 ; 排列将是不同顺序的5元素阵列[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]
它们不是分区,因为任何子集只能包含输入的相邻元素. - 换句话说,分区允许这样:

(这可能源于纯集理论,没有有序集的概念.)
它们不是组合,因为输出的每个元素都只使用输入集的每个成员一次.
我认为myArray.OrderedPartitions((a,b) => (a+b))可能是一个适当的简洁和解释.
假设你想实现一套理论概念,如element,set,collection并relation在Java中:你如何表示空集 ??
如果我想到NULL数据库的三值逻辑所使用的概念,我是否会误导自己?
我有两个共享一些共同元素的NSArrays A和B,例如
A: 1,2,3,4,5 
B: 4,5,6,7
我想创建一个新的NSArray,它包含两个NSArrays之间共同的内容,它们与第二个NSArray的内容相连,同时保持元素的顺序并删除重复项.也就是说,我想(A∩B)∪B.
以前的NSArrays上的操作将产生:
A ? B: 4,5
(A ? B) ? B: 4,5,6,7
我如何在Objective-C中实现这一目标?
我正在为离散数学设计一个类库,我想不出一种实现无限集的方法.
到目前为止我所拥有的是:我有一个抽象基类Set,它实现了接口ISet.对于有限集,我派生出一个有限集类,它实现了每个集合方法.我可以这样使用它:
FiniteSet<int> set1 = new FiniteSet<int>(1, 2, 3);
FiniteSet<int> set2 = new FiniteSet<int>(3, 4, 5);
Console.WriteLine(set1); //{1, 2, 3}
Console.WriteLine(set2); //{3, 4, 5}
set1.UnionWith(set2);
Console.WriteLine(set1); //{1, 2, 3, 4, 5}
现在我想代表一个无限集.我有从set,InfiniteSet派生另一个抽象类的想法,然后使用该库的开发人员必须从InfiniteSet派生来实现他们自己的类.我会提供常用的集合,例如N,Z,Q和R.
但我不知道我如何实现像Subset和GetEnumerator这样的方法 - 我甚至开始认为这是不可能的.如何以实际方式枚举无限集,以便可以将它与另一个无限集相交/联合?如何在代码中检查N是R的子集?至于基数问题..嗯,这可能是一个单独的问题.
所有这些使我得出结论,我实现无限集的想法可能是错误的方法.我非常感谢你的意见:).
编辑:为了清楚起见,我也想代表无数的无限集.
Edit2:我认为重要的是要记住最终目标是实现ISet,这意味着任何解决方案都必须提供(应该)实现所有ISet方法的方法,其中最有问题的是枚举方法和IsSubsetOf方法.
我正在画一个空白,或者正如一些人所说,有一个高级时刻.我知道这个概念的正式定义和名称,如果重复运行,在数据库中运行的db操作(存储过程)将产生相同的结果.
它是数学家反身,对称,传递等类型的东西.
我正在尝试在prolog中实现列表差异例程.由于某种原因,以下失败:
difference(Xs,Ys,D) :- difference(Xs,Ys,[],D).
difference([],_,A,D) :- D is A, !.
difference([X|Xs],Ys,A,D) :-
  not(member(X,Ys)),
  A1 is [X|A],
  difference(Xs,Ys,A1,D).
尝试时:
?- difference([1,2],[],D).
我收到此错误:
ERROR: '.'/2: Type error: `[]' expected, found `1' ("x" must hold one character)
^  Exception: (10) _L161 is [2|1] ? 
我对 Typescript 中的“交叉类型”这个名称有点困惑。
在集合论中,交集意味着只有两种类型共有的属性在两者的交集中才可用。
事实上,如果我在基元之间创建交集,这就是 Typescript 的行为方式。
type A = string | number
type B = number | boolean
type C = A & B
type D = string
type E = number
type F = D & B
在这种情况下,TS 推断C为number和。Fnever
然而,当涉及到对象时,创建交集会创建一个新的类型/接口,它结合了所使用类型的属性 -
从文档中
TypeScript 提供了另一种称为交集类型的构造,主要用于组合现有的对象类型
当您以这种方式看待时,对象的行为就非常有意义了。而且使用&也有意义。
所以,我的问题是:
也许它与联合类型的解释有某种关系?
set-theory ×10
algorithm ×2
c# ×2
arrays ×1
combinations ×1
database ×1
ienumerable ×1
java ×1
javascript ×1
linq ×1
list ×1
math ×1
mysqli ×1
nsarray ×1
null ×1
objective-c ×1
powerset ×1
prolog ×1
set ×1
sql ×1
type-theory ×1
typescript ×1
union ×1