首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL连接差异

SQL连接差异
EN

Stack Overflow用户
提问于 2009-01-07 06:18:27
回答 5查看 29.5K关注 0票数 44

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

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-07 06:29:16

查看这篇文章:

A Visual Explanation of SQL Joins

内部联接:

左外部联接:

右外部联接:

票数 80
EN

Stack Overflow用户

发布于 2009-01-07 14:25:00

连接类型之间的性能比较是不相关的,因为它们给出了不同的结果集。即使内部连接更快,如果您需要左连接的结果(甚至包括与连接中的第二个表不匹配的记录),也不会使用它。

票数 4
EN

Stack Overflow用户

发布于 2009-01-07 07:33:21

LEFT JOIN BB RIGHT JOIN A相同。一些RDBMS没有RIGHT JOIN,因此您必须将RIGHT JOIN逻辑重写为LEFT JOIN逻辑

代码语言:javascript
复制
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为:

代码语言:javascript
复制
        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"  ));
        }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/419375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档