内部连接和外部连接(左连接,右连接)有什么区别,哪种连接的性能最好?
谢谢!
发布于 2009-01-07 06:29:16
查看这篇文章:
A Visual Explanation of SQL Joins
内部联接:

左外部联接:

右外部联接:

发布于 2009-01-07 14:25:00
连接类型之间的性能比较是不相关的,因为它们给出了不同的结果集。即使内部连接更快,如果您需要左连接的结果(甚至包括与连接中的第二个表不匹配的记录),也不会使用它。
发布于 2009-01-07 07:33:21
LEFT JOIN B与B RIGHT JOIN A相同。一些RDBMS没有RIGHT JOIN,因此您必须将RIGHT JOIN逻辑重写为LEFT JOIN逻辑
A 1 2 3
B 2 3 4 3
SELECT A.I FROM INNER JOIN B ON B.I = A.I;
output: 2 3, 3
SELECT A.I AS X, B.I AS Y FROM A LEFT JOIN B ON B.I = A.I;
read above code as A on LEFT, JOINs B
output:
X Y
1 NULL
2 2
3 3
3 3
SELECT A.I AS X, B.I AS Y FROM B RIGHT JOIN A ON A.I = B.I;将上面的代码作为B on RIGHT, JOINs A阅读。它和左边的A一样
无论左边是什么,总是被计算,总是有一个输出。你可以想象A向左加入B,B向右加入A为:
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" ));
}https://stackoverflow.com/questions/419375
复制相似问题