`
seeallsea
  • 浏览: 41749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL中内连接,左连接,右连接个人的理解

SQL 
阅读更多

      很久没摸SQL语句了,最近在项目中用到了SQL,又捡起SQL中的内连接,左连接,右连接温习了一下,下面谈谈对它的理解。这个例子我是用SQL Server2008做的测试。

      先看看一个简单的例子,有两个表TableA和TableB,两个表通过TableA的b_id列和TableB的id列连接。两个的表的如图

为做例子这两个表我添加了一些数据,如下图:


 

 我们看到TableA和TableB有数据的交集,用红色的线条表示出了。下面我们就看看用内连接,左连接,右连接查询出的不同结果。

 

内连接:

select A.id, A.value, A.b_id, B.id,B.value
from sales.dbo.TableA A inner join sales.dbo.TableA B on A.b_id = B.id

 或者写成下面这样,是等价的。

SELECT A.id, A.value, A.b_id, B.id,B.value 
FROM sales.dbo.TableA A,sales.dbo.TableB B
where A.b_id = B.id

 这是查询的结果:


我们可以看到查询出的结果就是连个表的交集部分。

 

下面左连接:

Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A left outer join sales.dbo.TableB B on A.b_id = B.id

 查询的结果:



 我们看到查询维度是按照TableA进行的,结果集的行数和TableA的行数是一样的,每一行中,如果TableB有对应的值则显示,如果没有则为NULL。

 

再看看右连接:

Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A right outer join sales.dbo.TableB B on A.b_id = B.id

查询结果:


我们看到查询维度是按照TableB进行的,结果集的行数和TableB的行数是一样的,每一行中,如果TableA有对应的值则显示,如果没有则为NULL。

 

所以内连接,左连接,右连接查询的结果用图来表示如下:



内连接的结果是蓝色C区域的部分,是两个table的数据的交集部分。

左连接是红色A区域的部分,是以TableA为维度,然后连接TableB的数据。

右连接是绿色B区域的部分,是以TableB为维度,然后连接TableA的数据。

 

 

需要说明的是,左连接和右连接的方向是相对的,我们可以这样理解:

<维度表> left outer join <事实表> on <条件>

<事实表> right outer join <维度表> on <条件>

 

所以

TableA left outer join TableB

 和

TableB right outer join TableA
 

的含义是一样的,查询出的结果也是一样的。

 

以上是我SQL连接的个人理解,如果有不妥的地方或者大家有什么心得欢迎讨论!

  • 大小: 6.9 KB
  • 大小: 3.3 KB
  • 大小: 5.2 KB
  • 大小: 4.4 KB
  • 大小: 14.7 KB
分享到:
评论

相关推荐

    SQL关于内连接,外连接(左右连接)等的总结

    当我们需要从多个表中获取数据并合并它们时,SQL提供了不同类型的连接操作,包括内连接、外连接(左连接和右连接)。以下是这些连接方式的详细说明。 **内连接(Inner Join)** 内连接返回两个表中存在匹配的记录。...

    SQL内左右自连接.doc

    在这个文档中,主要介绍了四种类型的SQL连接:内连接、左连接、右连接和自连接。这些连接类型都是在查询时将数据从一个表与另一个表关联起来的关键方法。 首先,内连接(INNER JOIN)只返回两个表中匹配的行。这...

    SQL_左外连接_右外连接_全连接_内连接

    以下是关于SQL连接的不同类型及其详细解释: 1. **内连接(Inner Join)**: 内连接返回两个表中存在匹配的行。这通常通过在`FROM`子句中指定`JOIN`或`INNER JOIN`来实现,比较两个表中的共同列,只返回那些列值...

    SQL 连接 JOIN 例解左连接,右连接,全连接,内连接,交叉连接,自连接

    本文将详细介绍六种主要类型的 JOIN:左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)、内连接(INNER JOIN)、交叉连接(CROSS JOIN)以及自连接(SELF JOIN)。通过实例讲解每种连接的特点和应用...

    SQL左外连接,右外连接,全连接,内连接四种连接的差异[参照].pdf

    SQL中的连接操作是数据库查询的...综上所述,SQL连接操作提供了灵活的数据集成方法,根据需要选择合适的连接类型对于数据查询至关重要。理解这些连接的差异可以帮助你编写更精确、高效的查询,以满足特定的业务需求。

    SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf

    以下是四种主要的连接类型:内连接、左外连接、右外连接和全连接。 1. **内连接(INNER JOIN)**: 内连接是基于两个表之间的匹配列的值进行的连接,它只返回两个表中存在匹配的行。例如,在`authors`和`...

    SQL 四种连接-左外连接、右外连接、内连接、全连接详解

    SQL中的四种连接方式是数据库操作中非常重要的概念,它们分别是内连接、左外连接、右外连接和全连接。理解这四种连接可以帮助我们更有效地从多个表中提取所需信息。 1. **内连接(Inner Join)** 内连接是最常见的...

    sql中各种连接详解

    本文将详细解析Oracle数据库中常用的几种连接类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN),并探讨它们与传统WHERE子句之间的转换关系。 #### 一、内连接(INNER JOIN) **定义:** ...

    sql查询左连接on与where的区别(2).pdf

    Left Join操作能够将左表(left table)的所有记录与右表(right table)中匹配的记录连接起来,并且在右表中没有匹配的情况下,会用NULL值填充。而on和where是用于指定连接条件和过滤结果集的关键字,在Left Join中...

    左连接和右连接

    在数据库管理与操作中,左连接(Left Join)和右连接(Right Join)是SQL查询语句中的两种重要连接类型,它们主要用于从两个或多个表中检索数据,特别是在处理复杂的数据关系时,这两种连接方式提供了灵活且强大的...

    由浅入深sql语句(外键,左关联,右关联,全关联)

    内连接、左连接、右连接和全连接各有其适用场景,理解它们的原理并灵活运用是提高SQL查询效率的关键。此外,正确设置外键有助于维护数据库的数据完整性和一致性。希望本文能帮助大家更好地掌握SQL中的连接技术,为...

    如何连接SQL数据库

    总之,连接SQL数据库或Access数据库是开发过程中的基础工作,理解其原理和操作方法对IT初学者至关重要。无论是SQL Server的JDBC连接,还是Access的VBA或ADODB连接,都需要根据项目需求和环境选择合适的方法。通过...

    SqlDbx连接oracle

    SqlDbx是一款轻量级的数据库管理工具,特别适合于SQL查询和数据库开发。它以其直观的用户界面和对多种数据库系统的支持而受到青睐,包括Oracle...通过理解和配置这些文件,你可以更流畅地在SqlDbx中操作Oracle数据库。

    Oracle左(外)、右(外)、全(外)、(内)连接语法与SQL标准的比较

    本文将深入探讨Oracle中的左(外)、右(外)、全(外)以及内连接的语法,并将其与SQL标准进行比较,以帮助读者更好地理解和应用这些关键概念。 ### 左(外)连接(Left Outer Join) #### SQL标准语法 左(外)连接返回左...

    SQL连接器 SQL连接器

    在本文中,我们将深入探讨SQL连接器的工作原理、常见类型以及如何使用它们。 一、SQL连接器的工作原理 SQL连接器(也称为数据库驱动或适配器)的主要任务是为应用程序提供一个标准的接口,以与不同类型的数据库...

    数据结构左右连接

    根据提供的文件信息,我们可以深入探讨数据结构中的左连接(Left Join)与右连接(Right Join),以及数据库中的授权操作。 ### 数据结构中的左连接与右连接 #### 左连接(Left Join) 左连接是一种数据库查询操作...

    Oracle 左连接、右连接

    在提供的`tmp.sql`文件中,可能包含了示例查询或者对左连接和右连接的实际应用。通常,这样的文件会包含SQL脚本,可以被导入到数据库中执行,以展示这些概念的实际效果。为了更好地理解和学习,可以导入这个文件并...

    SQL子查询、内连接和外连接查询

    **外连接(LEFT/RIGHT JOIN)** 返回左表或右表的所有行,即使在另一个表中没有匹配的行。在查询中,使用了右外连接找出还未被任何学生选修的课程: ```sql SELECT C.cno AS 课程号, cname AS 课程名称,class_...

    oracle数据库 左连接 右连接 自连接 。。

    左连接返回左表(也就是连接操作中指定的第一个表)的所有记录,以及与之匹配的右表记录。如果右表中没有匹配的记录,结果将显示左表记录和右表的NULL值。这种连接类型对于保留左表所有数据,即使在右表中没有对应...

Global site tag (gtag.js) - Google Analytics