美文网首页
SQL JOIN含义、应用场景、事例演示

SQL JOIN含义、应用场景、事例演示

作者: CoderZb | 来源:发表于2022-01-08 16:14 被阅读0次

含义:将两个或多个表的行结合起来展示。

有以下四种常用类型:

JOIN: 等同INNER JOIN(内连接、等值连接)。只会把筛选条件等值的内容查询出来。

LEFT JOIN:左连接。 会匹配左边数据表的所有行,即使右边表无对应的数据。
数据生成的默认规则是: 先展示交集,再展示左边表的剩余数据。
交集数据产生的规则是,右边的每行数据执行一次,左边的所有数据就会遍历一次。(类似固定变量法:右边某行固定一次,左边所有数据遍历一次)

RIGHT JOIN:右连接。会匹配右边数据表的所有行,即使左边表无对应的数据。
数据生成的默认规则是: 先展示交集,再展示右边表的剩余数据。
交集数据产生的规则是是,左边的每行数据执行一次,右边的所有数据遍历一次。(类似固定变量法:左边某行固定一次,右边所有数据遍历一次)

FULL JOIN:全连接。 会把左连接+右连接的数据筛选出来。

应用场景:

有时候我们需要通过关联关系,来从两个或多个表中获取数据,为了展示更完整的数据数据,这时候就需要用JOIN来查询数据。
因为数据库中创建的每个表都有其主要的功能,在保证其主要功能的情况下,可能只会在表中存储另一个表的id,这个id在另一个表中极有可能为主键,我们就可以通过这个id来进行关联查询等。

事例演示:language表+person表

language表数据如下:11条数据
image.png
person表数据如下:11条数据
image.png

JOIN 等同:INNER JOIN

例1:根据用户id进行筛选。
共筛选出10条数据
因为左表的invention_userId =100001没有能和右表userId对应的数据,同理,右表的userId = 20001没有能和左表invention_userId对应的数据。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot,
    d.invention_name,
    d.country,
    d.userId
FROM
    LANGUAGE c
    INNER JOIN person d ON c.invention_userId = d.userId;
  • 筛选后数据如下:


    image.png

例2:根据语言的发明时间进行筛选。
共筛选出23条数据
根据筛选出的数据,可以得知匹配的规则是:先从右表的invention_time=1994开始,然后从左表中遍历找到invention_time=1994的数据,找到就筛选出一条并记录展示。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot
FROM
    LANGUAGE c
    INNER JOIN person d ON c. invention_time = d. invention_time;
  • 筛选后数据如下:


    image.png

LEFT JOIN

例2:根据用户id进行筛选。
可以测试无对应数据的情况,因为左表某行的invention_userId为100001,右表没有能对应的数据
共筛选出11条数据
匹配的规则是:文章最上面有介绍。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot,
    c.invention_userId,
    d.userId 
FROM
    LANGUAGE c
    LEFT JOIN person d ON c.invention_userId = d.userId;
  • 筛选后数据如下:


    image.png

例2:根据语言的发明时间进行筛选。
共筛选出23条数据
匹配的规则是:文章最上面有介绍。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot
FROM
    LANGUAGE c
    LEFT JOIN person d ON c.invention_time = d.invention_time;
  • 筛选后数据如下:


    image.png

RIGHT JOIN

例1: 根据用户id进行筛选。
可以测试无对应数据的情况,因为右表某行的userId为20001,左表没有能对应的数据
共筛选出11条数据
匹配的规则是:文章最上面有介绍。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot,
    c.invention_userId,
    d.userId 
FROM
    LANGUAGE c
    RIGHT JOIN person d ON c.invention_userId = d.userId;
  • 筛选后数据如下:


    image.png

例2:根据语言的发明时间进行筛选。
共筛选出23条数据
匹配的规则是:文章最上面有介绍。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot
FROM
    LANGUAGE c
    RIGHT JOIN person d ON c.invention_time = d.invention_time;
  • 筛选后数据如下:


    image.png

FULL JOIN 由于MySQL不支持FULL JOIN,可改为UNION ALL进行测试,是等价的。

例1: 根据用户id进行筛选。
共筛选出22条数据。其实就是11条左连接的数据+11条右连接的数据。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot,
    c.invention_userId,
    d.userId 
FROM
    LANGUAGE c
    LEFT JOIN person d ON c.invention_userId = d.userId UNION ALL
SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot,
    c.invention_userId,
    d.userId 
FROM
    LANGUAGE c
    RIGHT JOIN person d ON c.invention_userId = d.userId;
  • 筛选后数据如下:


    image.png

例2:根据语言的发明时间进行筛选。
共筛选出46条数据。其实就是23条左连接的数据+23条右连接的数据。

SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot 
FROM
    LANGUAGE c
    LEFT JOIN person d ON c.invention_time = d.invention_time UNION ALL
SELECT
    c.id,
    c.language_name,
    c.invention_time,
    c.hot 
FROM
    LANGUAGE c
    RIGHT JOIN person d ON c.invention_time = d.invention_time
  • 筛选后数据如下:


    union all.jpg

相关文章

  • SQL JOIN含义、应用场景、事例演示

    含义:将两个或多个表的行结合起来展示。 有以下四种常用类型: JOIN: 等同INNER JOIN(内连接、等值连...

  • Flink SQL 实战:双流 join 场景应用

    作者:余敖 本文主要介绍在流式场景中 join 的实战。大家都知道在使用 SQL 进行数据分析的过程中,join ...

  • 五,MyBatis动态SQL

    一,含义:动态SQL是指根据参数数据动态组织SQL的技术 二,动态SQL的应用场景:比如淘宝搜索的时候,可以动态的...

  • Spark SQL 之 Join 实现

    Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(...

  • LEFT JOIN & RIGHT JOIN

    参考资料 SQL JOIN SQL INNER JOIN 关键字 SQL LEFT JOIN 关键字 SQL RI...

  • 不用SQL,统计5000万笔订单总金额——fork join

    效果演示 使用SQL 结果 大概耗时: 使用Java fork join 由于使用Java需要对数据做进程间读取,...

  • 图说SQL Join

    原文:图说SQL Join 如果你也曾经被SQL语言中各种Join操作:Left Join, Right Join...

  • joomla SQL Injection 漏洞防御 环境搭建 之前在演示SQL注入攻击的时候,使用了xampp应用...

  • SQL表连接(INNER JOIN, LEFT JOIN, RI

    SQL表连接(INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN...

  • mysql join

    sql的left join 、right join 、inner join之间的区别left join(左联接) ...

网友评论

      本文标题:SQL JOIN含义、应用场景、事例演示

      本文链接:https://www.haomeiwen.com/subject/redrcrtx.html