我想知道如何区分所有这些不同的连接...


#1楼

内连接 :仅显示行,何时从两个表中获取数据。

外连接 (左/右):显示从与配对行(S)左/右表中的所有结果,如果它存在与否。


#2楼

只有4种:

  1. 内连接 :最常见的类型。 为连接条件匹配的每对输入行生成输出行。
  2. 左外连接 :与内连接相同,只是如果有任何行可以找到右边表中没有匹配的行,则输出一行包含左边表中的值,其中包含NULL右边表格中的每个值。 这意味着左侧表格中的每一行在输出中至少出现一次。
  3. 右外连接 :与左外连接相同,除了表的角色颠倒。
  4. 全外连接 :左外连接和右外连接的组合。 两个表中的每一行都将至少出现一次输出。

“交叉连接”或“笛卡尔连接”只是一个内部连接,没有指定连接条件,导致输出所有行对。

感谢RusselH指出FULL join,我省略了。


#3楼

LEFT JOINRIGHT JOINOUTER JOIN的类型。

INNER JOIN是默认值 - 两个表中的行必须与连接条件匹配。


#4楼

在Wikipedia上查看Join(SQL)

  • 内连接 - 给定两个表,内连接返回两个表中存在的所有行
  • left / right(outer)join - 给定两个表返回连接的左表或右表中存在的所有行,当join子句匹配时将返回另一侧的行,否则将返回null那些专栏

  • Full Outer - 给定两个表返回所有行,并且当左列或右列不存在时将返回空值

  • 交叉连接 - 笛卡尔连接,如果不小心使用可能会很危险


#5楼

简单示例 :假设您有一个Students表和一个Lockers表。 在SQL中,你的加盟,指定的第一个表Students ,在表,第二个, Lockers ,是表。

每个学生都可以分配到一个储物柜,因此Student表中有一个LockerNumber列。 不止一个学生可能会在一个储物柜中,但特别是在学年开始时,你可能有一些没有储物柜的入学学生和一些没有学生分配的储物柜。

为了这个例子,假设您有100名学生 ,其中70名有储物柜。 您共有50个储物柜 ,其中40个至少有1个学生,10个储物柜没有学生。

INNER JOIN相当于“ 给我所有带储物柜的学生 ”。
没有储物柜的学生或没有学生的任何储物柜都不见了。
返回70行

LEFT OUTER JOIN将“ 向我展示所有学生,如果他们有一个相应的储物柜 ”。
这可能是一般学生列表,或者可用于识别没有储物柜的学生。
返回100行

RIGHT OUTER JOIN将“ 向我展示所有储物柜,如果有任何储物柜,则分配给他们 ”。
这可用于识别没有学生分配的储物柜,或者有太多学生的储物柜。
返回80行 (40个储物柜中的70名学生名单,以及没有学生的10个储物柜)

FULL OUTER JOIN会很傻,可能用处不大。
像“ 向我展示所有学生和所有储物柜,并在可能的地方匹配他们 ”之类的东西
返回110行 (所有100名学生,包括那些没有储物柜的学生。加上没有学生的10个储物柜)

在这种情况下, CROSS JOIN也相当愚蠢。
它不使用学生表中的链接lockernumber字段,因此您基本上会得到一个巨大的列表,其中包含每个可能的学生到锁定器配对,无论它是否确实存在。
返回5000行 (100名学生x 50个储物柜)。 可能有用(带过滤)作为一个起点,以匹配新学生与空储物柜。


#6楼

让它更明显可能会有所帮助。 一个例子:

表格1:

ID_STUDENT STUDENT_NAME

1               Raony
2               Diogo
3               Eduardo
4               Luiz

表2:

ID_STUDENT LOCKER

3               l1
4               l2
5               l3

我做的是:

-Inner join of Table 1 and Table 2: - Inner join returns both tables merged only when the key (ID_STUDENT) exists in both tablesID_STUDENT       STUDENT_NAME      LOCKER   3               Eduardo          l14               Luiz             l2-Left join of Table 1 and Table 2:- Left join merges both tables with all records form table 1, in other words, there might be non-populated fields from table 2ID_ESTUDANTE    NOME_ESTUDANTE     LOCKER   1               Raony            -2               Diogo            -3               Eduardo          l14               Luiz             l2-Right join of table 1 and table 2:- Right join merges both tables with all records from table 2, in other words, there might be non-populated fields from table 1ID_STUDENT        STUDENT_NAME     LOCKER   3               Eduardo          l14               Luiz             l25               -                l3-Outter join of table 1 and table 2:- Returns all records from both tables, in other words, theremight be non-populated fields either from table 1 or 2.ID_STUDENT        STUDENT_NAME     LOCKER   1               Raony            -2               Diogo            -3               Eduardo          l14               Luiz             l25               -                l3

#7楼

有三种基本类型的连接:

  • INNER连接比较两个表,仅返回匹配存在的结果。 第一个表中的记录在第二个表中匹配多个结果时会重复。 INNER连接倾向于使结果集更小,但由于记录可以重复,因此无法保证。
  • CROSS join比较两个表并返回两个表中每个可能的行组合。 您可以从这种可能甚至没有意义的联接中获得大量结果,因此请谨慎使用。
  • OUTER join比较两个表并在匹配可用时返回数据,否则返回NULL值。 与INNER join一样,当它匹配另一个表中的多个记录时,这将复制一个表中的行。 OUTER连接倾向于使结果集更大,因为它们本身不会从集合中删除任何记录。 您还必须限定OUTER连接以确定添加NULL值的时间和位置:
    • LEFT表示保留第1个表中的所有记录,无论如何,当第2个表不匹配时插入NULL值。
    • RIGHT意味着相反:无论如何都保留第二个表中的所有记录,并在第一个表不匹配时插入NULL值。
    • FULL表示保留两个表中的所有记录,如果没有匹配则在任一表中插入NULL值。

通常您会看到语法中省略了OUTER关键字。 相反,它只是“LEFT JOIN”,“RIGHT JOIN”或“FULL JOIN”。 这样做是因为INNER和CROSS连接对于LEFT,RIGHT或FULL没有任何意义,因此这些连接本身足以明确指示OUTER连接。

以下是您可能希望使用每种类型的示例:

  • INNER :您想要从“Invoice”表中返回所有记录,以及相应的“InvoiceLines”。 这假定每个有效的发票至少有一行。
  • OUTER :您希望返回特定发票的所有“InvoiceLines”记录及其对应的“InventoryItem”记录。 这是一个也销售服务的企业,因此并非所有InvoiceLines都有IventoryItem。
  • CROSS :你有一个包含10行的数字表,每行包含值'0'到'9'。 您希望创建要加入的日期范围表,以便最终在该范围内的每一天都有一条记录。 通过CROSS将该表与其自身重复连接,您可以根据需要创建任意数量的连续整数(假设从10到1次幂开始,每个连接将1加到指数中)。 然后使用DATEADD()函数将这些值添加到范围的基准日期。

#8楼

首先你必须了解加入做什么? 我们连接多个表并从连接表中获取特定结果。 最简单的方法是交叉连接

让我们说tableA有两列A和B.而tableB有三列C和D.如果我们应用交叉连接它会产生很多无意义的行。 然后我们必须使用主键匹配来获取实际数据。

左:它将返回左表中的所有记录和右表中的匹配记录。

右:它将返回与左连接相反的方向。 它将返回右表中的所有记录和左表中的匹配记录。

内心:这就像十字路口。 它只返回两个表中匹配的记录。

外面:这就像工会一样。 它将返回两个表中的所有可用记录。

有时我们不需要所有数据,而且我们只需要通用数据或记录。 我们可以使用这些连接方法轻松获取它。 记住左右连接也是外连接。

您只需使用交叉连接即可获取所有记录。 但是,涉及数百万条记录时,它可能会很昂贵。 因此,通过使用左,右,内或外连接使其变得简单。

谢谢


#9楼

SQL JOINS的区别:

很容易记住:

INNER JOIN仅显示两个表INNER JOIN记录。

OUTER JOIN将两个表的所有内容合并在一起,无论它们是否匹配。

LEFT JOINLEFT OUTER JOIN相同 - (从第一个(最左侧)表中选择具有匹配的右表记录的记录。)

RIGHT JOINRIGHT OUTER JOIN相同 - (从第二个(最右侧)表中选择具有匹配左表记录的记录。)

Left,Right,Outer和Inner Joins有什么区别?相关推荐

  1. SQL中inner join、outer join和cross join的区别

    对于SQL中inner join.outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inne ...

  2. full outer join 与full join的区别_基础小白的SQL的JOIN语法解析

    总的来说,四种JOIN的使用/区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行. right outer join 右连 ...

  3. java中outer和inner_innerText 和outerText 的区别

    A test for innerText, outerText method Hello, Hellin Zhang 请您先下载运行并参考作者写的例子. Hello, Hellin Zhang out ...

  4. full outer join 与full join的区别_sleep、yield、join都是干啥的? sleep与wait有啥区别?中篇[十五]...

    点击上方 " 布衣码农 " ,免费订阅~选择" 设为星标 ",第一时间免费获得更新~ 「布衣码农」用不到却又不得不学习了解的底层方法+1.Object中的wai ...

  5. python的matmul_numpy中dot()、outer()、multiply()以及matmul()的区别

    Python中的几种乘法 在numpy的官方教程中,dot()是比较复杂的一个,因为参数的不同可以实现等同于np.matmul() 或者 np.multiply()的作用 numpy.dot(a,b, ...

  6. SQL Server中CROSS APPLY和OUTER APPLY的应用详解

    SQL Server数据库操作中,在2005以上的版本新增加了一个APPLY表运算符的功能.新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行.它不像JOIN那样先计算那个表表达式都可以, ...

  7. sql中join类型_SQL Join类型概述和教程

    sql中join类型 This article will provide an overview of the SQL Join and cover all of the SQL join types ...

  8. Impala 源码分析-FE

    By yhluo 2015年7月29日 Impala 3 Comments Impala 源代码目录结构 SQL 解析 Impala 的 SQL 解析与执行计划生成部分是由 impala-fronte ...

  9. Oracle-数据库所有查询命令

    1.简单查询 1. 消除重复的姓 select distinct e.last_name as 姓氏 from employees e 2. 计算员工的月收入(工资+佣金) select salary ...

最新文章

  1. 医学影像AI:全球市场展望
  2. CentOS 6.5+Nagios4.0.2+Msmtp+Mutt邮箱报警
  3. 一些常规形几何形状的绘制和效果填充(一)
  4. wxWidgets:网格控件 wxWidgets 示例
  5. mysql 存储过程调用权限消失的问题,恢复权限
  6. 裸眼 3D 是什么效果?
  7. 【Java学习笔记一】类和对象
  8. 50个Android开发人员必备UI效果源码
  9. Spring中实现自定义事件
  10. 【Android】【录音】Android录音--AudioRecord、MediaRecorder
  11. ASP.NET AJAX学习记要(1)-如何下手
  12. 用GHOST一键恢复之后,电脑只剩C盘了
  13. 确定有限自动机DFA
  14. delete 和 delete []的真正区别+析构函数
  15. 我自己的java软件开发职业规划
  16. linux查看固态硬盘寿命,CentOS下查看 ssd 寿命
  17. GitHub的高级搜索方式--找到最想要的源码
  18. 1月FOMC会议连连放鹰 现货金转空大跌35美元
  19. 奥塔在线:C#创建Winform项目时没有App.config文件的原因
  20. 企业信息化改革怎么做?

热门文章

  1. 使用Scroller实现弹性滑动
  2. 第十五周项目一-程序填空(范型程序设计)
  3. (0004) H5开发之导入JQuery库以及使用。
  4. 微信小程序与uniapp中 px与rpx 相互转换
  5. 7.13 T2 Shit 题(shit)
  6. Softmax 回归 vs. k 个二元分类器
  7. [转]REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
  8. 一个PHP的HTTP POST方法
  9. 半分钟内能看透问题本质的人是如何思考的?
  10. NuGet安装和使用