精华内容
下载资源
问答
  • 一张图告诉你SQL使用inner join,left join

    万次阅读 多人点赞 2018-12-17 09:42:13
    sql之left join、right join、inner join的区别 union、union all的区别跳转https://www.cnblogs.com/logon/p/3748020.html SQL JOINS: Please refer the link :...

    sql之left join、right join、inner join的区别

    union、union all的区别跳转https://www.cnblogs.com/logon/p/3748020.html

    SQL JOINS:

     

    Please refer the link : https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 

     

    如图:

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
    inner join(等值连接) 只返回两个表中联结字段相等的行

    举例如下: 
    --------------------------------------------
    表A记录如下:
    aID     aNum
    1     a20050111
    2     a20050112
    3     a20050113
    4     a20050114
    5     a20050115

    表B记录如下:
    bID     bName
    1     2006032401
    2     2006032402
    3     2006032403
    4     2006032404
    8     2006032408

    --------------------------------------------
    1.left join
    sql语句如下: 
    select * from A
    left join B 
    on A.aID = B.bID

    结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404
    5     a20050115    NULL     NULL

    (所影响的行数为 5 行)
    结果说明:
    left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
    换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
    B表记录不足的地方均为NULL.
    --------------------------------------------
    2.right join
    sql语句如下: 
    select * from A
    right join B 
    on A.aID = B.bID

    结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404
    NULL     NULL     8     2006032408

    (所影响的行数为 5 行)
    结果说明:
    仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
    --------------------------------------------
    3.inner join
    sql语句如下: 
    select * from A
    innerjoin B 
    on A.aID = B.bID

    结果如下:
    aID     aNum     bID     bName
    1     a20050111    1     2006032401
    2     a20050112    2     2006032402
    3     a20050113    3     2006032403
    4     a20050114    4     2006032404

    结果说明:
    很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
    --------------------------------------------
    注: 
    LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

    原文:http://www.cnblogs.com/pcjim/articles/799302.html

    展开全文
  • 内连接(inner join)与外连接(outer join)小结

    万次阅读 多人点赞 2017-10-14 15:42:05
    mySQL包含两种联接,分别是内连接(inner join)和外连接(out join),但我们又同时听说过左连接,交叉连接等术语,本文旨在总结这些术语之间的关系。1. 内连接首先说明内连接的一个重要性质:内连接查询结果与表的顺序...

    mySQL包含两种联接,分别是内连接(inner join)和外连接(out join),但我们又同时听说过左连接,交叉连接等术语,本文旨在总结这些术语之间的关系。

    1. 内连接

    首先说明内连接的一个重要性质:内连接查询结果与表的顺序无关
    (当然顺序可能会发生变化,但是对应关系绝对不会错乱!!!)

    1.1 交叉连接(cross join)

    当然,他还有其他的名字,比如:笛卡尔积,交叉积,还有最奇怪的名字“没有连接”(no join)
    这里写图片描述 这里写图片描述
    使用下列命令同时查询玩具表的toy列和男孩表的boy列,得到的结果就是交叉连接

    SELECT t.toy,b.boy
    FROM toys AS t
    	CROSS JOIN
    	boys AS b;
    

    其中,CROSS JOIN可以省略,简写为

    SELECT t.toy,b.boy
    FROM toys AS t,	boys AS b;
    

    交叉连接回把第一张表的每个值与第二张表的每个值进行匹配,结果如下
    这里写图片描述
    交叉连接是内连接的一种,你又可以把内连接看作是通过查询中的条件过滤掉某些结果数据行之后的交叉连接。

    1.2 相等连接

    我们假设每个男孩子都又一个玩具,表之间是一对一的关系,toy_id是外键,数据库表如下图
    这里写图片描述 这里写图片描述
    我们想找到每个男孩儿拥有什么玩具,只需要将boys表中的toy_id和toys中的主键进行比对,就会得到结果

    SELECT boys.boy,toys.toy
    FROM boys
    	INNER JOIN
    	toys
    ON boys.toy_id=toys.toy_id;
    

    这里写图片描述

    1.3 不等连接

    我们继续沿用1.2中的表结构,如果我们想找到每个男孩儿没有的玩具,这时候我们可以使用不等连接(说白了就是=换成<>,其他没有什么区别)

    SELECT boys.boy,toys.toy
    FROM boys
    	INNER JOIN
    	toys
    ON boys.toy_id<>toys.toy_id
    ORDER BY boys.boy;
    

    这里写图片描述

    1.4 自然连接

    继续沿用1.2的表结构。。。。。
    注意:自然连接只有在连接的列在两张表中的名称都相同时才会有用
    其实,自然连接就是自动识别相同列的相等连接

    SELECT boys.boy,toys.toy
    FROM boys
    	NATURAL JOIN
    	toys
    ORDER BY boys.boy;
    

    得到的结果和1.2中的结果完全一样(顺序可能不同)
    这里写图片描述

    2. 外连接

    首先说明外连接不同于内连接的一个性质:外连接查询与表的顺序有关

    2.1 左外连接

    LEFT OUTER JOIN(左外连接)接收左表的所有行,并用这些行与右表进行匹配
    当左表与右表具有一对多的关系时,左外连接特别有用。我们仍然使用之前的表结构

    这里写图片描述 这里写图片描述

    现在我们利用左外连接找出每个男孩拥有的玩具

    SELECT b.boy,t.toy
    FROM boys b
    LEFT OUTER JOIN toys t
    ON b.toy_id=t.toy_id;
    

    LEFT OUTER JOIN左边的表boys我们称为左表,右边的toys称为右表,所以LEFT OUTER JOIN会取得左表boys的所有行和右表的toys的行进行匹配,结果如下
    这里写图片描述

    我们的查询结果和使用内连接时一样,难道说内连接和外连接没区别吗?怎么可能!!!接下来我们改变一下左表boys的表结构
    这里写图片描述 这里写图片描述
    我们向boys中新添加了一个Andy,把他的toy_id设置为6,注意,6在toys表中没有对应的玩具,接下来再次运行上述程序
    这里写图片描述

    我们发现居然出现了一个NULL,NULL的出现是要告诉我们右表toys中没有与左表boys中的Andy相匹配的行,也就是说

    外连接一定会提供数据行,无论还行能否在另一个表中找出相匹配的行

    接着做个实验,我们调换左表和右表的顺序

    SELECT b.boy,t.toy
    FROM toys t
    LEFT OUTER JOIN boys b
    ON b.toy_id=t.toy_id;
    

    这里写图片描述

    结论:出现NULL的列总是右表中的列

    以下时左外连接的实际匹配过程

    toys中的玩具hula hoop与boys中的Davey的记录比对,toys.toys_is=1,boys.toy_is=3
    不匹配
    toys中的玩具hula hoop与boys中的Bobby的记录比对,toys.toys_is=1,boys.toy_is=5
    不匹配
    toys中的玩具hula hoop与boys中的Beaver的记录比对,toys.toys_is=1,boys.toy_is=2
    不匹配
    toys中的玩具hula hoop与boys中的Richie的记录比对,toys.toys_is=1,boys.toy_is=1
    成功匹配
    …省略toy_id=2,3的匹配过程
    toys中的玩具harmonica与boys中的Davey的记录比对,toys.toys_is=4,boys.toy_is=3
    不匹配
    toys中的玩具harmonica与boys中的Bobby的记录比对,toys.toys_is=4,boys.toy_is=5
    不匹配
    toys中的玩具harmonica与boys中的Beaver的记录比对,toys.toys_is=4,boys.toy_is=2
    不匹配
    toys中的玩具harmonica与boys中的Richie的记录比对,toys.toys_is=4,boys.toy_is=1
    不匹配
    右表查找完毕,没有匹配项,因此创建带有NULL值的行来对应harmonica
    …省略baseball cards的匹配过程

    2.2 右外连接

    与左外连接完全相同,只不过是用右表来评价左表
    此外:RIGHT OUTER JOIN左侧的表为右表!!!!!
    这里只简单举一个例子,具体内容参考左外连接

    SELECT b.boy,t.toy
    FROM toys t
    RIGHT OUTER JOIN boys b
    ON b.toy_id=t.toy_id;
    

    上述代码等同于

    SELECT b.boy,t.toy
    FROM boys b
    LEFT OUTER JOIN toys t
    ON b.toy_id=t.toy_id;
    

    这两种写法都是都把toys作为右表,把boys作为左表

    实验的表结构如下:
    这里写图片描述 这里写图片描述

    结果:
    这里写图片描述

    在实际运用过程中,我们一般倾向于只使用一种,另一种简单了解就好。

    展开全文
  • SQL中连接(JOIN)子句介绍

    万次阅读 多人点赞 2018-06-26 16:28:21
    本文主要介绍 SQL(Structured Query Language)中连接(JOIN)子句的相关知识,同时通过用法示例介绍连接的常见用法。 说明:本文的用法示例是面向 MySQL 数据库的。 1 概述 SQL 中 JOIN 子句用于把来自两个或多...

    本文主要介绍 SQL(Structured Query Language)中连接(JOIN)子句的相关知识,同时通过用法示例介绍连接的常见用法。

    说明:本文的用法示例是面向 MySQL 数据库的。

    1 概述

    SQL 中 JOIN 子句用于把来自两个或多个表的行结合起来。

    在实际的数据库应用中,经常需要从多个数据表中读取数据,这时就可以使用 SQL 语句中的连接(JOIN)子句,在两个或多个数据表中查询数据。

    JOIN 的用法按照功能划分,可分为如下三类:

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录;
    • LEFT JOIN(左连接):获取左表中的所有记录,即使在右表没有对应匹配的记录;
    • RIGHT JOIN(右连接):与 LEFT JOIN 相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。

    2 常见用法

    现提供两个表(表信息如下),本文后面的用法示例,均是对这两个表进行操作的。

    mysql> select * from roles;
    +---------+------------+----------+
    | role_id | occupation | camp     |
    +---------+------------+----------+
    |       1 | warrior    | alliance |
    |       2 | paladin    | alliance |
    |       3 | rogue      | Horde    |
    +---------+------------+----------+
    3 rows in set (0.01 sec)
    
    mysql> 
    mysql> select * from mount_info;
    +----------+------------+---------+
    | mount_id | mount_name | role_id |
    +----------+------------+---------+
    |        1 | horse      |       1 |
    |        2 | sheep      |       1 |
    |        3 | sheep      |       4 |
    +----------+------------+---------+
    3 rows in set (0.01 sec)
    
    mysql> 

    2.1 INNER JOIN

    下面通过一个示例,介绍 INNER JOIN 的用法。

    使用 INNER JOIN(也可以省略 INNER 、直接使用 JOIN)来连接上面两张表,匹配 mount_info 和 role_id 中字段 role_id 相同的内容,相关命令如下:

    mysql> SELECT a.role_id, a.occupation, a.camp, b.mount_name FROM roles a INNER JOIN mount_info b ON a.role_id = b.role_id;
    +---------+------------+----------+------------+
    | role_id | occupation | camp     | mount_name |
    +---------+------------+----------+------------+
    |       1 | warrior    | alliance | horse      |
    |       1 | warrior    | alliance | sheep      |
    +---------+------------+----------+------------+
    2 rows in set (0.01 sec)
    
    mysql> 

    上述 SQL 语句与下列语句等价:

    mysql> SELECT a.role_id, a.occupation, a.camp, b.mount_name FROM roles a, mount_info b WHERE a.role_id = b.role_id;
    +---------+------------+----------+------------+
    | role_id | occupation | camp     | mount_name |
    +---------+------------+----------+------------+
    |       1 | warrior    | alliance | horse      |
    |       1 | warrior    | alliance | sheep      |
    +---------+------------+----------+------------+
    2 rows in set (0.01 sec)
    
    mysql> 

    INNER JOIN 的表关联模型如下:

    说明:上图中的绿色部分,为两表的内关联结果。

    2.2 LEFT JOIN

    下面通过一个示例,介绍 LEFT JOIN 的用法。

    LEFT JOIN 与 INNER JOIN 有所不同,LEFT JOIN 会读取左侧数据表的全部数据,即使右侧表中无对应数据。

    使用 LEFT JOIN来连接上面两张表,以 roles 为左侧表、mount_info 为右侧表,相关命令如下:

    mysql> SELECT a.role_id, a.occupation, a.camp, b.mount_name FROM roles a LEFT JOIN mount_info b ON a.role_id = b.role_id;
    +---------+------------+----------+------------+
    | role_id | occupation | camp     | mount_name |
    +---------+------------+----------+------------+
    |       1 | warrior    | alliance | horse      |
    |       1 | warrior    | alliance | sheep      |
    |       2 | paladin    | alliance | NULL       |
    |       3 | rogue      | Horde    | NULL       |
    +---------+------------+----------+------------+
    4 rows in set (0.01 sec)
    
    mysql> 

    通过上述结果能够看到,上面执行的 SQL 语句读取左边的数据表 roles 的所有的(SELECT)字段数据,即使在右侧表 mount_info 中没有对应的 role_id 字段值。

    LEFT JOIN 的表关联模型如下:

    说明:上图中的绿色部分,为两表的左关联结果。

    2.3 RIGHT JOIN

    下面通过一个示例,介绍 RIGHT JOIN 的用法。

    RIGHT JOIN 会读取右侧数据表的全部数据,即便左侧表无对应数据。

    使用 LEFT JOIN 来连接上面两张表,以 roles 为左侧表、mount_info 为右侧表,相关命令如下:

    mysql> SELECT a.role_id, a.occupation, a.camp, b.mount_name FROM roles a RIGHT JOIN mount_info b ON a.role_id = b.role_id;
    +---------+------------+----------+------------+
    | role_id | occupation | camp     | mount_name |
    +---------+------------+----------+------------+
    |       1 | warrior    | alliance | horse      |
    |       1 | warrior    | alliance | sheep      |
    |    NULL | NULL       | NULL     | sheep      |
    +---------+------------+----------+------------+
    3 rows in set (0.01 sec)
    
    mysql> 
    

    通过上述结果能够看到,上面执行的 SQL 语句读取右侧的数据表 mount_info 的所有的(SELECT)字段数据,即使在左侧表 roles 中没有对应的 role_id 字段值。

    RIGHT JOIN 的表关联模型如下:

    说明:上图中的绿色部分,为两表的右关联结果。

    展开全文
  • 一分钟让你搞明白 left join、right joinjoin的区别

    万次阅读 多人点赞 2020-04-27 22:32:23
    left joinjoin、right join和inner join等等各种join的区别。网上搜,最常见的就是一张图解图,如下: 一张图道清所有join的区别 首先,我们先来建两张表,第一张表命名为kemu,第二张表命名为score: 一、left...

    left join、join、right join和inner join等等各种join的区别。网上搜,最常见的就是一张图解图,如下:
    在这里插入图片描述
    一张图道清所有join的区别

    第一步,我们先来建两张表,第一张表名字为kemu,第二张表名字为score:
    在这里插入图片描述
    在这里插入图片描述

    一、left join

    left是左边的意思,join是连接的意思,连起来就是“左连接”,表1左连接表2,以左为主,表示以表1为主,关联上表2的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。如下:

    select
       *
    from
       kemu
    left join score on kemu.id = score.id
    
    

    结果集:
    在这里插入图片描述
    在这里插入图片描述

    二、right join

    right是右边的意思,join是连接的意思,加起来就是“右连接”,表1右连接表2,以右为主,表示以表2为主,关联查询表1的数据,查出表2所有数据以及表1和表2有交集的数据,如下:

    select
       *
    from
       kemu
    right join score on kemu.id = score.id
    
    

    结果集:
    在这里插入图片描述
    在这里插入图片描述

    三、join

    join,其实就是“inner join”,为了简写才写成join,两个是表示一个的,内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来,这个用的情况也是挺多的,如下

    select
       *
    from
       kemu
    join score on kemu.id = score.id
    
    

    结果集:
    在这里插入图片描述
    在这里插入图片描述
    以上就是三种连接的区别。

    展开全文
  • 1、左连接left outer join 以左边表为准,逐条去右边表找相同字段,如果有多条会依次列出。 2、连接join 找出左右相同同的记录。 3、全连接full outer join 包括两个表的join结果,左边在右边中没找到的结果...
  • inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 ...
  • join()

    万次阅读 2021-03-10 21:37:53
    join函数的定义是指:等待线程终止。 我们在运行线程的时候可能会遇到,在主线程中运行子线程,主线程需要获取子线程最终执行结果的情况。 但是有很多时候子线程进行了很多耗时的操作,主线程往往先于子线程结束,这...
  • MySQL join left join right join 区别

    千次阅读 2017-10-19 16:58:39
    MySQL join left join right join 区别
  • SQL 三个 join 的含义 left join(左联接):返回左表中的所有记录以及和右表中的联接字段相等的记录。 right join(右联接):返回右表中的所有记录以及和左表中的联接字段相等的记录。 inner join(等值联接):...
  • SQL join,left join ,right join , inner join , outer join用法解析及HIVE join 优化
  • sql中常用的关联表查询有 left join(左连接)、right join(右连接)、inner join(内连接)、full join(全连接)等方式,其区别不大 例如现在有两张表 aa,数据如下 left join:以左表为主表右表为附表进行查询 ...
  • inner join、outer join、right join、left join 之间的区别 一、sql的left join 、right join 、inner join之间的区别  left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join...
  • JAVA多线程中join()方法的详细分析

    万次阅读 多人点赞 2018-05-06 12:47:53
    虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像是t.join()...
  • Mysql中Left Join、Right Join、Inner Join的区别

    千次阅读 多人点赞 2019-10-18 16:16:34
    left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接): 只返回两个表中联结字段相等的行 ...
  • left join、right joinjoin的区别

    千次阅读 2019-12-28 09:56:43
    left joinjoin、right join和inner join等等各种join的区别。网上搜,最常见的就是一张图解图,如下: 一张图道清所有join的区别 首先,我们先来建两张表,第一张表命名为kemu,第二张表命名为score: 一...
  • Hive是基于Hadoop的一个数据仓库...sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)left semi join(左半连接)五种方式,它们之间其实并没有太大区别,仅仅是...
  • left join、inner join、right join的区别

    万次阅读 多人点赞 2018-07-01 10:16:39
    sql的left join 、right join 、inner join之间的区别 -left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 -right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 -...
  • MySQL的连接查询:left join , right join , join

    万次阅读 多人点赞 2018-04-14 17:44:47
    JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。这里描述先甩出一张用烂了的图,然后插入测试数据。 View Code笛卡尔积:CROSS JOIN要理解各种JOIN首先要...
  • 一、Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表;table2:右表。 JOIN 按照功能大致分为如下三类: INNER JOIN(内...
  • 图解LEFT JOIN、RIGHT JOINJOIN的区别

    万次阅读 多人点赞 2018-11-01 21:47:54
    如图: T1表 ID NAME AGE 1 张三 11 2 李四 12 3 王五 13 T2表 ID NAME COURSE 3 张三 语文 ...1、ID关联(LEFT JOIN) SELECT *FROM T1 LEF...
  • mysql中的几种join 及 full join问题

    万次阅读 多人点赞 2018-06-04 16:19:08
    【注:本文转自 ... 【注意】:Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+ union+右外连接实现 初始化SQL语句: /*join 建表语句*/ drop database if exists test; ...
  • 话不多说,先上个对于各种join情况的总结图: 例如有如下关系的数据: 1、inner join select * from Table_a join Table_b on Table_a.id_a = Table_b.id_b 2.1、full outer join等于full join select * from ...
  • 1. Broadcast Join 在数据库的常见模型中(比如星型模型或者雪花模型),表一般分为两种:事实表和维度表。维度表一般指固定的、变动较少的表,例如联系人、物品种类等,一般数据有限。而事实表一般记录流水,比如...
  • mysql的left join和inner join的效率对比,以及如何优化

    万次阅读 多人点赞 2019-03-18 11:31:15
    select * from a left join b on a.x = b.x left join c on c.y = b.y left join d on d.z=c.z &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样的多个left join组合,一方面是心里有点不舒服,...
  • Mysql之LEFT JOIN,RIGHT JOIN,INNER JOIN

    千次阅读 2021-08-11 15:59:01
    现有a,b两表 a表数据 b表数据 a表数据 b表数据 sql: // 1 SELECT a.* FROM a a LEFT JOIN b b ON (b...
  • Hive中join, outer join, semi join区别

    千次阅读 2018-10-12 16:47:28
    Hive是基于Hadoop的一个数据仓库工具,...最常用的就是多表关联查询,主要讲解下join、outer join和semi join的具体使用。 join是最简单的关联操作,两边关联只取交集。 outer join分为left outer join、right ...
  • SQL中inner join、outer join和cross join的区别

    万次阅读 多人点赞 2016-07-11 15:34:34
    缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表,Table A 是左边的表。Table B 是右边的表。其各有四...
  • inner join 和 outer join

    千次阅读 2017-02-06 12:32:01
    经常使用的是 left join 和 right join ,对于其他的 ...join 分为两种 inner join 和 outer join ,其中 outer join 又包括 left (outer)join ,right (outer)join ,full join。我这里有两个表 test_1 a表 表
  • left join和right join

    万次阅读 2019-03-13 13:52:31
    SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 LEFT JOIN 关键字语法 SELECT column_name(s) FROM table_name1 LEFT JOIN table_...
  • Sqlserver_left join 、right join、 inner join 用法     left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,352,920
精华内容 541,168
关键字:

join()