`

left join, right join, inner join

 
阅读更多

写在前面:不总结就会忘记!

先给个通俗的解释吧.

例表a

aid

adate

1

a1

2

a2

3

a3

b

bid

bdate

1

b1

2

b2

4

b4

问题:两个表a,b相连接,要取出id相同的字段。

select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据。

此时的取出的是:

1 a1 b1

2 a2 b2

那么left join:

select * from a left join b on a.aid = b.bid

首先取出a表中所有数据,然后再加上与a,b匹配的的数据

此时的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字符

同样的也有right join

指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据

此时的取出的是:

1 a1 b1

2 a2 b2

4 空字符 b4

================我是分割线=====================

下面是来自官方的解答

SQL LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

LEFT JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN

原始的表 (用在例子中的)

"Persons" 表:

Id_P

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

"Orders" 表:

Id_O

OrderNo

Id_P

1

77895

3

2

44678

3

3

22456

1

4

24562

1

5

34764

65

左连接(LEFT JOIN)实例

现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

FROM Persons

LEFT JOIN Orders

ON Persons.Id_P=Orders.Id_P

ORDER BY Persons.LastName

结果集:

LastName

FirstName

OrderNo

Adams

John

22456

Adams

John

24562

Carter

Thomas

77895

Carter

Thomas

44678

Bush

George

  

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

 

=====================下面还是通俗的说法========================================

A    left    join    B    表示:连接的记录数与A表的记录数同,即A表是主表
A    right    join    B    表示:连接的记录数与B表的记录数同,即B表是主表
A    left    join    B    等价B    right    join    A

 

 

table    A:  
   Field_K,    Field_A  

 

   1                        a  

 

   3                        b  

 

   4                        c  

 

   table    B:  
   Field_K,    Field_B  

 

   1                        x  

 

   2                        y  

 

   4                        z  
左连接:
   select    a.Field_K,    a.Field_A,    b.Field_K,    b.Field_B  
   from    a    left    join    b    on    a.Field_K=b.Field_K  
结果为:
   Field_K          Field_A        Field_K          Field_B          
   ----------            ----------        ----------        ----------    

 

   1                      a                      1                   x                         

 

   3                      b                      NULL             NULL  

 

   4                      c                      4                   z                    

 

右连接:
   select    a.Field_K,    a.Field_A,    b.Field_K,    b.Field_B  
   from    a    right    join    b    on    a.Field_K=b.Field_K  
结果为:
   Field_K          Field_A          Field_K          Field_B          
   ----------        ----------           ----------            ----------    

 

   1                      a                      1               x                    

 

   NULL             NULL              2                y

 

   4                      c                      4                 z

 

举个例子:
假设a表和b表的数据是这样的。
   a                          b    
   id      name         id      stock   

 

   1        a              1          15  

 

   2        b              2          50  
   3        c                   

 

   select    *    from    a    inner    join    b    on    a.id=b.id  

 

这个语法是连接查询中的内连接,它产生的结果是两个表相匹配的记录出现在结果列表中
根据上面的表,出现的结果是这样的
   a.id      name      b.id      stock  
   1        a              1          15  
   2        b              2          50  
   ----------------------------  
   select    *    from    a,b    where    a.id=b.id  
这个语法是内连接的另外一种写法,其执行结果与inner    join    一样
   --------------------------------    
   select    *    from    a    left/right    join    b    on    a.id=b.id  
这个是外连接语法中的左外连接或右外连接
如果是左外连接的话,它将显示a表的所有记录,
   select    a.*,b.*    from    a    left    join    b    on    a.id=b.id  
查询的结果是这样的:
   a.id      name      b.id      stock  
   1          a          1               15  
   2          b          2               50  
   3          c        null            null   
   --------------------------------------------  

 

如果是右外连接的话,它将显示b表的所有记录,
   select    a.*,b.*    from    a    right    join    b    on    a.id=b.id  
查询的结果是这样的:
   a.id      name      b.id      stock  
   1          a          1              15  
   2          b          2              50   
select    a.*,b.*    from    a    left    join    b    on    a.k    =    b.k    
   select    a.*,b.*    from    a    left    outer    join    b    on    a.k    =b.k  
   ----------上面两种一样left    joinleft    outer    join的简写
   select    a.*,b.*    from    a    left    inner    join    b    on    a.k    =    b.k    
没有这种写法,错误的语句.

整理了一张图

分享到:
评论

相关推荐

    left join right join inner join 区别和联系

    左连接(LEFT JOIN)、右连接(RIGHT JOIN)和内连接(INNER JOIN)是三种最基本的连接类型。在本节中,我们将详细介绍左连接、右连接和内连接的区别和联系。 左连接(LEFT JOIN) 左连接返回左表中的所有行,右表...

    SQL语句left join/right join/inner join 的用法比较

    本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN(左连接) LEFT JOIN返回所有左表(在本例中为A表)的记录,即使在右表(B表)中没有...

    SQL中的left outer join,inner join,right outer join用法详解

    * FULL OUTER JOIN:LEFT OUTER 和 RIGHT OUTER 中所有行的超集。 内连接(Inner Join) 内连接是最常见的一种连接,它也被称为普通连接,而 E.FCodd 最早称之为自然连接。例如: SELECT * FROM t_institution i ...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    Mysql 之 inner join、left join、right join 详解 Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner ...

    (Left join , Right Join, Inner Join)用法详解

    ### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...

    SQL 外链接操作小结 inner join left join right join

    SQL 外链接操作小结 inner join left join right join SQL 外链接操作是关系型数据库管理系统中的一种基本操作,用于从多个表中检索数据。外链接操作可以分为三种:inner join、left join 和 right join。 inner ...

    SQL语句inner join,left join ,right join连接的不同之处

    根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)。本文将详细探讨这三种连接方式的区别,并通过具体的例子来解释它们的应用场景。 ### 内连接...

    关于sql的left join,right join,inner join,outerjoin

    本篇文章将深入探讨四种基本的JOIN类型:LEFT JOIN(左连接)、RIGHT JOIN(右连接)、INNER JOIN(内连接)以及OUTER JOIN(外连接)。我们将详细解释这些概念,它们的工作原理以及在实际数据库操作中的应用。 1. ...

    DataTable实现leftJoin和rightJoi以及innerJoin

    比较实用的方法,已经用到项目里,很好用的一个方法

    hive sql + left join 数据缺失

    INNER JOIN ( SELECT database_name, MAX(dt) AS dt FROM dw.dwm_exhibition_base WHERE database_name = 'fair' GROUP BY database_name ) m ON n.database_name = m.database_name AND n.dt = m.dt WHERE n...

    SQL left join

    在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...

    Left join优化规则的研究

    - 其次,由于 t2 已经与 t3 关联,所以 `t1 LEFT JOIN t2` 可以保持不变,但 t2 与 t3 的 Inner Join 结果可以与 t1 再次进行 Inner Join。 通过这样的优化,查询可以变得更加高效,减少对无效数据的处理。 3. ...

    SQL表连接查询(inner join、full join、left join、right join)1

    在SQL中,主要有四种类型的连接查询:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面将详细解释这四种连接方式。 1. 内连接(INNER JOIN): 内连接返回两个表中...

    数据库关联查询(left,right,inner join)

    ### 数据库关联查询(Left, Right, Inner Join) 在数据库管理与操作中,关联查询是一项极为重要的技术,它能够帮助我们高效地从多个表中提取数据,并根据特定条件进行匹配和整合。本文将通过通俗易懂的方式,详细...

    超详细mysql left join,right join,inner join用法分析

    在这个超详细的分析中,我们将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法。 1. LEFT JOIN(左连接) LEFT JOIN返回所有左表(在本例中为表A)的记录,即使在右表(表B)中没有匹配的记录。如果右表中没有...

    join on 语句及扩展

    3. RIGHT JOIN (或 RIGHT OUTER JOIN): 右JOIN与LEFT JOIN相反,返回右表的所有记录,即使左表中没有匹配的记录。左表中未找到匹配项的记录将用NULL填充。语法: ```sql SELECT columns FROM table1 RIGHT JOIN ...

    SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    1. 选择正确的JOIN类型:LEFT JOIN、RIGHT JOIN和INNER JOIN各有适用场景,根据需求选择最合适的。 2. 避免全表扫描:通过索引优化,减少JOIN过程中的全表扫描。 3. 使用索引:为JOIN条件创建索引,可以大大提高JOIN...

    MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx

    本文档详细介绍了 MySQL 中的 JOIN 语法,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 等,并提供了实际的实例来说明 JOIN 的用法。 首先,MySQL 的 JOIN 语法用于根据两个或多个表中的字段之间的关系,从...

Global site tag (gtag.js) - Google Analytics