返回顶部
首页 > 资讯 > 精选 >SQL之各种join的示例分析
  • 740
分享到

SQL之各种join的示例分析

2023-06-20 19:06:06 740人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关sql之各种join的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL Left Join, Right Join, Inner Join, and Natural

这篇文章将为大家详细讲解有关sql之各种join的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结

在SQL语言中,存在着各种Join,有Left Join, Right Join, Inner Join, and Natural Join等,对于初学者来说肯定一头雾水,都是神马跟神马啊,它们之间到底有着怎样的区别和联系呢,我们先用一张图片来说明:

SQL之各种join的示例分析

上面这张图很好的阐释了Left Join, Right Join, Inner Join,和Full Outer Join的区别,下面用我们用一个简单的例子来帮助我们理解和区分,现在有两个表Person和Address:

-- Table Person
+----------+-----------+----------+
| PersonId | FirstName | LastName |
+----------+-----------+----------+
|        1 | Zhang     | San      |
|        2 | Li        | Si       |
|        3 | Wang      | Wu       |
|        4 | Yang      | Liu      |
+----------+-----------+----------+


-- Table Address
+-----------+----------+---------------+-------+
| AddressId | PersonId | City          | State |
+-----------+----------+---------------+-------+
|         1 |        2 | San Francisco | CA    |
|         2 |        3 | Los Angeles   | CA    |
|         3 |        1 | San DieGo     | CA    |
+-----------+----------+---------------+-------+

我们下面一个一个的来看:

Left Join: returns all rows from the left table (table1), with the matching rows in the right table (table2). The result is NULL in the right side when there is no match.

左交:返回左表的所有行和匹配的右表的行,如果没有匹配上的用NULL.

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId; 
+----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City   | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        4 | Yang      | Liu      |      NULL |     NULL | NULL          | NULL  |
+----------+-----------+----------+-----------+----------+---------------+-------+

Right Join: returns all rows from the right table (table2), with the matching rows in the left table (table1). The result is NULL in the left side when there is no match.

右交:返回右表的所有行和匹配的左表的行,如果没有匹配上的用NULL.

SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId; 
+----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|     NULL | NULL      | NULL     |         4 |        5 | Memphis       | TN    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Inner Join: selects all rows from both tables as long as there is a match between the columns in both tables.

内交: 选择左右表中关键字匹配上的行。

SELECT * FROM Person INNER JOIN Address ON Person.PersonId = Address.PersonId;  +----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Full Join: returns all rows from the left table (table1) and from the right table (table2), and it combines the result of both LEFT and RIGHT joins.

全交: 返回左表的所有行和右表的所有行,是左交和右交的联合。

注意,由于MySql中没有Full Join命令,所以我们通过把Left Join和Right Join的结果UNIOn起来也是可以的:

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId UNioN
SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId;  +----------+-----------+----------+-----------+----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | PersonId | City          | State |
+----------+-----------+----------+-----------+----------+---------------+-------+
|        2 | Li        | Si       |         1 |        2 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 |        3 | Los Angeles   | CA    |
|        1 | Zhang     | San      |         3 |        1 | San Diego     | CA    |
|        4 | Yang      | Liu      |      NULL |     NULL | NULL          | NULL  |
|     NULL | NULL      | NULL     |         4 |        5 | Memphis       | TN    |
+----------+-----------+----------+-----------+----------+---------------+-------+

Natural Join: creates an implicit join clause for you based on the common columns in the two tables being joined. Common columns are columns that have the same name in both tables. A NATURAL JOIN can be an INNER join, a LEFT OUTER join, or a RIGHT OUTER join. The default is INNER join.

自然交: 根据左右两表的相同列创建一个隐含的join操作,相同列就是两表中列名相同的两列。自然交可以是内交,左交或者是右交。默认是内交。

SELECT * FROM Person NATURAL JOIN Address; 

+----------+-----------+----------+-----------+---------------+-------+
| PersonId | FirstName | LastName | AddressId | City          | State |
+----------+-----------+----------+-----------+---------------+-------+
|        1 | Zhang     | San      |         3 | San Diego     | CA    |
|        2 | Li        | Si       |         1 | San Francisco | CA    |
|        3 | Wang      | Wu       |         2 | Los Angeles   | CA    |
+----------+-----------+----------+-----------+---------------+-------+

最后注意一下,下面等号左右两边的关键字是等价的:

A LEFT JOIN B      =       A LEFT OUTER JOIN BA RIGHT JOIN B     =       A RIGHT OUTER JOIN BA FULL JOIN B      =       A FULL OUTER JOIN BA INNER JOIN B     =       A JOIN B

关于“SQL之各种join的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: SQL之各种join的示例分析

本文链接: https://lsjlt.com/news/299533.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL之各种join的示例分析
    这篇文章将为大家详细讲解有关SQL之各种join的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL Left Join, Right Join, Inner Join, and Natural...
    99+
    2023-06-20
  • SQL中各种连接Join的示例分析
    这篇文章给大家分享的是有关SQL中各种连接Join的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN...
    99+
    2024-04-02
  • sql中left join的示例分析
    这篇文章主要为大家展示了“sql中left join的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql中left join的示例分析”这篇文章吧。网...
    99+
    2024-04-02
  • SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的示例分析
    小编给大家分享一下SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在数据库的应用中,我们经常需要对数据库进...
    99+
    2024-04-02
  • SQL之各种join小结详细讲解
    SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结 在SQL语言中,存在着各种Join,有Left Jo...
    99+
    2024-04-02
  • MapReduce多种join实现的示例分析
    这篇文章将为大家详细讲解有关MapReduce多种join实现的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概述   对于RDBMS中的join操...
    99+
    2023-06-03
  • control加各种键的示例分析
    这篇文章主要介绍了control加各种键的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。control加各种键的功能是:1、“Ctrl+A”,全部选中;2、“Ctrl...
    99+
    2023-06-20
  • wget各种选项分类的示例分析
    小编给大家分享一下wget各种选项分类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!wget各种选项分类列表 "  &nb...
    99+
    2023-06-09
  • java之JVM各类机制的示例分析
    这篇文章将为大家详细讲解有关java之JVM各类机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户...
    99+
    2023-06-14
  • 简单学习SQL的各种连接Join
    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)、SQL LEFT JOIN、SQL RIGH...
    99+
    2024-04-02
  • CSS中各种居中方式的示例分析
    这篇文章给大家分享的是有关CSS中各种居中方式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注:本文所讲方法除了特别说明外,都是兼容IE6+、谷歌、火狐等主流浏览器的。...
    99+
    2024-04-02
  • JavaScript中数组各种操作的示例分析
    这篇文章主要介绍JavaScript中数组各种操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!声明一个数组原来是如下声明:var s = new Array();但是 现...
    99+
    2024-04-02
  • javascript开发之网页兼容各种浏览器的示例分析
    这篇文章主要为大家展示了“javascript开发之网页兼容各种浏览器的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript开发之网页兼容...
    99+
    2024-04-02
  • Mysql中join操作的示例分析
    小编给大家分享一下Mysql中join操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!join的类型1.  ...
    99+
    2024-04-02
  • Hive中Map端JOIN的示例分析
    小编给大家分享一下Hive中Map端JOIN的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Map端JOINmap端join适用于当一张表很小(可以存在内...
    99+
    2023-06-04
  • Java并发编程之Fork/Join框架的示例分析
    这篇文章主要介绍了Java并发编程之Fork/Join框架的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Fork/Join框架的理解ForkJoinTask类属...
    99+
    2023-06-15
  • wow.js中各种特效对应类名的示例分析
    这篇文章给大家分享的是有关wow.js中各种特效对应类名的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、(页面在向下滚动的时候,有些元素会产生细小的动画效果。虽然动画...
    99+
    2024-04-02
  • SQL中Join的使用示例
    这篇文章主要介绍了SQL中Join的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.基本概念关于sql语句中的连接(join)关键...
    99+
    2024-04-02
  • hash join构建位图的示例分析
    这篇文章主要介绍了hash join构建位图的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 hash ...
    99+
    2024-04-02
  • SQL Server三种锁定模式的示例分析
    这篇文章主要为大家展示了“SQL Server三种锁定模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL Server三种锁定模式的示例分析”这...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作