首页 > 数据库 >SQL JOIN 子句:合并多个表中相关行的完整指南

SQL JOIN 子句:合并多个表中相关行的完整指南

时间:2023-11-26 19:25:10浏览次数:29  
标签:JOIN SQL CustomerID Products INNER 子句 Orders

SQL JOIN

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

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

OrderID CustomerID OrderDate
10308 2 1996-09-18
10309 37 1996-09-19
10310 77 1996-09-20

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

CustomerID CustomerName ContactName Country
1 Alfreds Futterkiste Maria Anders Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico
3 Antonio Moreno Taquería Antonio Moreno Mexico

注意,“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;

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

OrderID CustomerName OrderDate
10308 Ana Trujillo Emparedados y helados 9/18/1996
10365 Antonio Moreno Taquería 11/27/1996
10383 Around the Horn 12/16/1996
10355 Around the Horn 11/15/1996
10278 Berglunds snabbköp 8/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表的一部分选择:

ProductID ProductName CategoryID Price
1 Chais 1 18
2 Chang 1 19
3 Aniseed Syrup 2 10

以及Categories表的一部分选择:

CategoryID CategoryName Description
1 Beverages Soft drinks, coffees, teas, beers, and ales
2 Condiments Sweet and savory sauces, relishes, spreads, and seasonings
3 Confections Desserts, 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”表的部分选择:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

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

OrderID CustomerID EmployeeID OrderDate ShipperID
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2

示例

假设我们想要检索所有客户以及他们的订单(如果有的话)。我们可以使用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的使用方式。如果有其他问题,请随时提出。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

image

标签:JOIN,SQL,CustomerID,Products,INNER,子句,Orders
From: https://www.cnblogs.com/xiaowange/p/17857728.html

相关文章

  • 当SQL中有关键字的一种处理
    1、比如说字段中用到了type作为列名,当时type是mysql的关键字如果直接这样写的话,肯定是会报错的,因为type是关键字select*fromgo_timewheretype='S' 解决方法:可以在type中,用``包含起来,就可以了。select*fromgo_timewhere`type`='S'    ......
  • Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决
    Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决背景最近想使用shell脚本给SQLServer数据库插入数据,但是发现了报错同时进行CLoudquery连接SQLServer数据库时也出现了异常.作为笔记记录一下问题和解决方法sqlcmd的问题现象sqlcmd的提示信息第一:安装sudo......
  • CentOS 7 安装Mysql环境
    Centos7下彻底删除Mysql,重新安装Mysql常用操作命令 启动mysql服务systemctlstartmysqld.service停止mysql服务systemctlstopmysqld.service重启mysql服务systemctlrestartmysqld.service查看mysql服务当前状态systemctlstatusmysqld.service 设置mysql服务开......
  • mysql中的索引
    mysql中索引的实现方式是什么?利用B+树实现索引的。数据库中的数据存储在磁盘上,使用的时候加载到存储引擎中的bufferpool(内存中的一个缓存池)中去;同理索引也是以文件的形式存储在磁盘上的,使用的时候加载到bufferpool中去。注意:数据和索引都是以“页”的形式一页一页的加载进内......
  • SQL Server使用Windows身份验证模式安装后,重新设置SA密码
    首次安装SQLServer使用Windows身份验证模式安装后,要重新设置自带用户SA的密码(1)右键数据库--》属性(2)安全性-->勾选“SQLserver和Windows身份认证模式(S)”(3)数据库下“安全性”-->“登录名”-->“sa”-->"属性"(4)直接输入需要设置的密码(5)给sa用户设置权限,在“服务器角色”设置为public......
  • CaltechCS122 笔记:Assignment 2: SQL Translation and Joins
    Assignment2:SQLTranslationandJoinsTranslationandjoinPlanNode及其子类,如图所示:......
  • mysql+php+apache的docker坏境搭建
    1:安装dockersudoaptinstalldocker.io2:安装mysqlsudodockerrun--privileged=true-di--restart=always--nameMySqlForPhp01-p55506:3306-eMYSQL_ROOT_PASSWORD=1234qwer-e--character-set-server=utf8mb4-e--collation-server=utf8mb4_unicode_cimysql:8.0......
  • MySQL_事务
    事务的特性ACIDA原子性:一个事务中的所有操作,要么全部完成,要么全部不完成。undolog保证C一致性:事务操作前和操作后,数据满足完整性约束,数据库保持一致性状态。原子性、隔离性、持久性保证I隔离性:多个并发事务交叉执行,使用相同的数据时,互不干扰,每个事务都有一个完整的数据空间......
  • C++ 通过SQLite实现命令行工具
    本文介绍了一个基于C++、SQLite和Boost库的简单交互式数据库操作Shell。该Shell允许用户通过命令行输入执行各种数据库操作,包括添加、删除主机信息,设置主机到特定主机组,以及显示主机和主机组列表。通过调用SQLite3库实现数据库连接和操作,以及使用Boost库进行字符串解析......
  • Windows环境下修改my.ini导致MySQL启动失败
    问题:修改my.ini导致MySQL启动失败在Windows环境中,使用默认编辑器编辑my.ini配置文件可能导致MySQL启动失败,是因为默认编辑器使用的是UTF-8编码。解决方法:更改编码为ANSI使用文本编辑器打开my.ini,选择“另存为”并将编码更改为ANSI。重新启动MySQL服务,确保配置文件与MySQL默认......