SQLjoin差异

内连接和外连接有什么区别(左连接,右连接),哪个具有最好的性能?

谢谢!

检查这篇文章:

SQLjoin的可视化解释

内部联接:

左外连接:

正确的外部join:

性能比较types的联接是不相关的,因为它们给出不同的结果集。 即使内连接速度更快,如果您需要左连接的结果(甚至包括与连接中的第二个表不匹配的logging),也是如此。

A LEFT JOIN BB RIGHT JOIN A相同。 有些RDBMS没有RIGHT JOIN ,所以你必须重写你的RIGHT JOIN逻辑到LEFT JOIN逻辑

 A 1 2 3 B 2 3 4 3 SELECT AI FROM INNER JOIN B ON BI = AI; output: 2 3, 3 SELECT AI AS X, BI AS Y FROM A LEFT JOIN B ON BI = AI; read above code as A on LEFT, JOINs B output: XY 1 NULL 2 2 3 3 3 3 SELECT AI AS X, BI AS Y FROM B RIGHT JOIN A ON AI = BI; 

阅读上面的代码作为B on RIGHT, JOINs A 这和左边的A是一样的

无论是在左边,总是被评估,总是有一个输出。 你可以想象一个左joinB,右joinA:

  var result = new Dictionary<int, int?>(); var A = new int[] { 1, 2, 3 }; var B = new int[] { 2, 3, 4, 3 }; foreach (int aElem in A) { bool hasMatch = false; foreach (int bElem in B) { if (bElem == aElem) { result.Add(aElem, bElem); hasMatch = true; } } if (!hasMatch) result.Add(aElem, null); } foreach(int X in result.Keys) { MessageBox.Show(string.Format("X {0} Y {1}", X, result[X].HasValue ? result[X].Value.ToString() : "NULL" )); } 

左,右,内外都不影响性能,已经在这里很好的解释了。

不过有一些提示可以添加到可以提高性能的连接中:散列,循环和合并。

通常情况下,查询计划员决定执行哪些操作,但偶尔可以通过重写操作来提高性能。

loop join遍历第一个表中每一行的第二个表中的每一行。 如果你有一个非常大的桌子和一个非常小的桌子,这很好。

merge join依次通过两个表。 如果两个表已经按照您join的字段sorting,那么可以非常快速。

hash join使用大量的临时表对输出进行分组,以便在连接的数据中进行sorting。

一些专家数据库也支持其他types,比如位图联接。

希望你能理解图片。 性能方面,它们是相同的 – 没有区别。

编辑:哎呀。 猜猜你并不在乎答案的那一部分。