SQL JOIN 子句合并多个表中相关行全面指南

 更新时间:2023年11月27日 08:49:31   作者:小万哥  
这篇文章主要为大家介绍了SQL JOIN 子句合并多个表中相关行全面指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

SQL JOIN

JOIN子句用于基于它们之间的相关列合并来自两个或更多表的行。

让我们看一下“Orders”表的一部分选择:

OrderIDCustomerIDOrderDate
1030821996-09-18
10309371996-09-19
10310771996-09-20

然后,看一下“Customers”表的一部分选择:

CustomerIDCustomerNameContactNameCountry
1Alfreds FutterkisteMaria AndersGermany
2Ana Trujillo Emparedados y heladosAna TrujilloMexico
3Antonio Moreno TaqueríaAntonio MorenoMexico

注意,“Orders”表中的“CustomerID”列是指“Customers”表中的“CustomerID”。上述两个表之间的关系是“CustomerID”列。

然后,我们可以创建以下SQL语句(包含INNER JOIN),选择在两个表中具有匹配值的记录:

示例

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

它将产生类似于以下的结果:

OrderIDCustomerNameOrderDate
10308Ana Trujillo Emparedados y helados9/18/1996
10365Antonio Moreno Taquería11/27/1996
10383Around the Horn12/16/1996
10355Around the Horn11/15/1996
10278Berglunds snabbköp8/12/1996

不同类型的SQL JOIN

以下是SQL中不同类型的JOIN:

  • (INNER) JOIN:返回在两个表中具有匹配值的记录
  • LEFT (OUTER) JOIN:返回左表中的所有记录以及右表中匹配的记录
  • RIGHT (OUTER) JOIN:返回右表中的所有记录以及左表中匹配的记录
  • FULL (OUTER) JOIN:在左表或右表中有匹配时返回所有记录

这些JOIN类型可以根据您的需求选择,以确保检索到所需的数据。希望这能帮助你理解SQL中JOIN的概念。如果有其他问题,请随时告诉我。

SQL INNER JOIN

INNER JOIN关键字选择在两个表中具有匹配值的记录。

让我们看一下Products表的一部分选择:

ProductIDProductNameCategoryIDPrice
1Chais118
2Chang119
3Aniseed Syrup210

以及Categories表的一部分选择:

CategoryIDCategoryNameDescription
1BeveragesSoft drinks, coffees, teas, beers, and ales
2CondimentsSweet and savory sauces, relishes, spreads, and seasonings
3ConfectionsDesserts, candies, and sweet breads

我们将使用两个表的CategoryID字段连接Products表和Categories表:

使用INNER JOIN关键字连接ProductsCategories

SELECT ProductID, ProductName, CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;

SQL INNER JOIN

注意:INNER JOIN关键字仅返回两个表中具有匹配值的行。这意味着如果您有一个没有CategoryID的产品,或者CategoryIDCategories表中不存在的记录,该记录将不会在结果中返回。

语法

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

指定列名

在SQL语句中指定列时,最好在列名前包含表名。

指定表名:

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;

上面的示例在不指定表名的情况下也可以工作,因为指定的列名在两个表中都不存在。如果尝试在SELECT语句中包含CategoryID,则如果不指定表名,将会出现错误(因为CategoryID在两个表中都存在)。

JOIN或INNER JOIN

JOIN和INNER JOIN将返回相同的结果。

INNER是JOIN的默认连接类型,因此当您写JOIN时,解析器实际上会写INNER JOIN。

示例

JOIN与INNER JOIN相同:

SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
JOIN Categories ON Products.CategoryID = Categories.CategoryID;

连接三个表

以下SQL语句选择具有客户和承运商信息的所有订单:

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

INNER JOIN用于将多个表中的数据连接在一起,以便根据关联列的匹配情况检索相应的数据。希望这帮助你理解INNER JOIN的使用方式。如果有其他问题,请随时提出。

SQL LEFT JOIN关键字

SQL LEFT JOIN关键字返回左表(table1)中的所有记录以及右表(table2)中的匹配记录。如果没有匹配,则右侧的结果为0条记录。

LEFT JOIN语法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

注意:在某些数据库中,LEFT JOIN被称为LEFT OUTER JOIN。

SQL LEFT JOIN

演示数据库

在本教程中,我们将使用著名的Northwind示例数据库。

以下是“Customers”表的部分选择:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

以及“Orders”表的部分选择:

OrderIDCustomerIDEmployeeIDOrderDateShipperID
10308271996-09-183
103093731996-09-191
103107781996-09-202

示例

假设我们想要检索所有客户以及他们的订单(如果有的话)。我们可以使用LEFT JOIN将两个表连接在一起,以便即使某些客户没有订单,它们仍然会在结果中显示。

SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

在这个例子中,LEFT JOIN确保了所有的客户都会出现在结果中,而与之关联的订单信息(如果存在的话)也会被检索出来。如果某个客户没有订单,相应的OrderID和OrderDate列将显示为NULL。

希望这能帮助你理解SQL中LEFT JOIN的使用方式。

以上就是SQL JOIN 子句合并多个表中相关行全面指南的详细内容,更多关于SQL JOIN 子句多表合并的资料请关注脚本之家其它相关文章!

相关文章

  • mysql 5.7.10 winx64安装配置方法图文教程(win10)

    mysql 5.7.10 winx64安装配置方法图文教程(win10)

    这篇文章主要为大家分享了mysql 5.7.10 winx64安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • 关于mysql中的json解析函数JSON_EXTRACT

    关于mysql中的json解析函数JSON_EXTRACT

    这篇文章主要介绍了关于mysql中的json解析函数JSON_EXTRACT讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • ORM模型框架操作mysql数据库的方法

    ORM模型框架操作mysql数据库的方法

    ORM 全称是(Object Relational Mapping)表示对象关系映射; 通俗理解可以理解为编程语言的虚拟数据库;这篇文章主要介绍了ORM模型框架操作mysql数据库的方法,需要的朋友可以参考下
    2021-07-07
  • 细说MySQL死锁与日志二三事

    细说MySQL死锁与日志二三事

    这篇文章主要和大家一起聊一聊MySQL死锁与日志二三事,实际业务当中如何快速的定位线上MySQL问题,修复异常?本文根据两个实际case,分享下相关的经验与方法,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 深入分析Mysql中limit的用法

    深入分析Mysql中limit的用法

    很久没用mysql的limit,一时大意竟然用错了,自认为(limit 开始,结束),其实错了,正确的应该是(limit 偏移量,条数),为了记住这次错误,转载一篇limit用法详解。推荐给大家,希望对大家能够有所帮助。
    2015-03-03
  • SQL和NoSQL之间的区别总结

    SQL和NoSQL之间的区别总结

    在本篇内容里我们给大家精选了关于SQL和NoSQL之间的区别的总结内容,对此有需要的朋友们跟着学习下。
    2019-02-02
  • 关于Mysql如何设计高性能的数据库

    关于Mysql如何设计高性能的数据库

    这篇文章主要介绍了关于Mysql如何设计高性能的数据库,mysql支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文就来详细说明如何设计出高性能的数据库,需要的朋友可以参考下
    2023-07-07
  • MySQL处理重复数据的学习笔记

    MySQL处理重复数据的学习笔记

    在本篇文章里小编给大家分享的是一篇关于MySQL处理重复数据的学习笔记,需要的朋友们可以参考下。
    2020-03-03
  • MySQL关键字Distinct的详细介绍

    MySQL关键字Distinct的详细介绍

    这篇文章主要介绍了MySQL关键字Distinct的详细介绍的相关资料,需要的朋友可以参考下
    2017-07-07
  • MySQL 5.7常见数据类型

    MySQL 5.7常见数据类型

    这篇文章主要介绍了MySQL 5.7数据类型详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论