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的使用方式。如果有其他问题,请随时提出。

最后

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机学习5——外部中断程序

#include<reg52.h>unsigned char a; sbit lcden P3^4;void main() {lcden0;EA1;EX01;IT00;a0xF0; //点亮4位小灯while(1){P1a;} }//中断服务程序 void ext0() interrupt 0 // 0 表示的是外部中断源0 {a0x0f; // 中断处理完&#xff0c;再返回主…

2018年10月4日 Go生态洞察:参与2018年Go公司问卷调查

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

系列十八、Spring bean线程安全问题

一、概述 我们知道Spring中的bean&#xff0c;默认情况下是单例的&#xff0c;那么Spring中的bean是线程安全的吗&#xff1f;这个需要分情况考虑&#xff0c;bean中是否存在成员变量&#xff1f;bean中的成员变量是怎么处理的&#xff1f;...&#xff0c;针对bean的状态会有不…

【C++】类和对象——拷贝构造和赋值运算符重载

上一篇我们讲了构造函数&#xff0c;就是对象实例化时会自动调用&#xff0c;那么&#xff0c;我们这里的拷贝构造在形式上是构造函数的一个重载&#xff0c;拷贝构造其实也是一种构造函数&#xff0c;那么我们就可以引出这里的规则 1.拷贝构造函数的函数名必须与类名相同。 2.…

数据结构——带头循环双向链表(List)

1、带头双向循环链表介绍 在上一篇博客中我们提到了链表有三个特性&#xff0c;可以组合成为8种不同类型的链表。单链表是其中比较重要的一种&#xff0c;那么这次我们选择和带头双向循环链表会会面&#xff0c;这样我们就见识过了所有三种特性的呈现。 带头双向循环链表&#…

安卓使用MediaRecorder录制音频的详细使用

安卓使用MediaRecorder录制音频的详细使用 文章目录 安卓使用MediaRecorder录制音频的详细使用引言使用 MediaRecorder 的步骤常见问题及解决思路无法访问存储卡目录录制的音频文件没有声音录制过程中出现异常MediaRecorder无法正常启动录制的音质或者画质很差录制的文件无法播…

Object.is和====和==的区别

Object.is() 方法和比较操作符 、 用于比较两个值的相等性&#xff0c;但它们在比较方式和行为上有一些区别。Object.is() 方法是严格相等比较&#xff0c;而 操作符也是严格相等比较&#xff0c;但 操作符是相等比较。 严格相等比较&#xff08; &#xff09; 要求比较的…

HONOR荣耀MagicBook 15 2021款 锐龙版R5(BMH-WFQ9HN)原厂Windows11预装OEM系统含F10智能还原

链接&#xff1a;https://pan.baidu.com/s/1faYtC5BIDC2lsV_JSMI96A?pwdj302 提取码&#xff1a;j302 原厂系统Windows11.22H2工厂模式安装包,含F10一键智能还原&#xff0c;自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、荣耀 电脑管家等预装程序 …

process control 化学工程 需要用到MATLAB的Simulink功能

process control 化学工程 需要用到MATLAB的Simulink功能 所有问题需要的matlab simulink 模型 WeChat: ye1-6688 The riser tube brings in contact the recirculating catalyst with the feed oil, which then vaporizes and splits to lighter components as it flows up th…

服务器下db(数据库)的执行

1、查看 select * from xxxx&#xff08;表名&#xff09; where xxx&#xff08;列表&#xff09;1 and.......正常写就行 2、插入 如果你想要在 SELECT INSERT INTO … SELECT 语句中将部分列保持不变,只改变一两列的值,可以在 语句中直接设置目标列的值,而其他列从源表中…

【代码随想录】算法训练计划31

贪心 1、455. 分发饼干 题目&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且…

【C++】类型转换 ③ ( 重新解释类型转换 reinterpret_cast | 指针类型数据转换 )

文章目录 一、重新解释类型转换 reinterpret_cast1、指针数据类型转换 - C 语言隐式类型转换报错 ( 转换失败 )2、指针数据类型转换 - C 语言显示类型强制转换 ( 转换成功 )3、指针数据类型转换 - C 静态类型转换 static_cast ( 转换失败 )4、指针数据类型转换 - C 重新解释类型…

Simulink 的代数环

代数环, 就是由于模型的输出反馈到模块或子系统先的某个输入端, 如果这个输入是直接馈入的, 那么二者在同一个采样点内需得到求解, 但又互相依赖, 哪一方都不能完成求解过程, 使得解算器无法解算导致错误产生, 这样的情况称为代数环。 一旦 Simulink 遇到代数环, 将根据 Confi…

Binlog vs. Redo Log:数据库日志的较劲【高级】

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Binlog vs. Redo Log&#xff1a;数据库日志的较劲【高级】 前言第一&#xff1a;事务的生命周期事务的生命周期Binlog和Redo Log记录事务的一致性和持久性Binlog的记录过程R…

二叉树--算法题总结

1、利用层序遍历的产生的字符串来创建二叉树 /*** 使用层序遍历的字符串创建二叉树* param treeInfo* return*/public static TreeNode generateTreeNodeSecond(String treeInfo) {LinkedList<TreeNode> treeNodeLinkedList new LinkedList<>();if(StringUtils.is…

Flask 使用Jinja2模板引擎

Jinja2&#xff0c;由Flask框架的创作者开发&#xff0c;是一款功能丰富的模板引擎&#xff0c;以其完整的Unicode支持、灵活性、高效性和安全性而备受推崇。最初受Django模板引擎启发&#xff0c;Jinja2为Flask提供了强大的模板支持&#xff0c;后来也成为其他项目的首选。在本…

@JsonSerialize注解的使用

使用场景 ** 在开发中&#xff0c;有时候某些字段需要特殊处理&#xff0c;比如我们有一个日期字段&#xff0c;当日期为NULL时给前端不返回NULL而返回为其他等信息&#xff0c;就需要自定义字段的序列化。这就是JsonSerialize的用处 ** 1&#xff1a;先写一个指定的处理类 pa…

python环境搭建-yolo代码跑通-呕心沥血制作(告别报错no module named torch)

安装软件 安装过的可以查看有没有添加环境变量 好的! 我们发车! 如果你想方便快捷的跑通大型项目,那么必须安装以下两个软件: 1.pycharm2.anaconda对应作用: pycharm:专门用来跑通python项目的软件,相当于一个编辑器,可以debug调试,可以接受远程链接调试!anaconda:专…

英伟达不同系列GPU介绍

英伟达有以下几个系列的产品线&#xff0c;并介绍它们的特点和主要应用领域&#xff1a; 1. GeForce系列&#xff08;G系列&#xff09;&#xff1a; - 特点&#xff1a;GeForce系列是英伟达主打的消费级GPU产品线&#xff0c;注重提供高性能的图形处理能力和游戏特性。它们…

2023年初中生古诗文大会复选最后6天备考策略和更新的在线模拟题

今天是2023年11月26日&#xff0c;星期日&#xff0c;距离2023年第八届上海市中学生古诗文大会复选&#xff08;复赛&#xff09;还有六天&#xff08;2023年12月2日上午举办&#xff09;&#xff0c;相信各位晋级的小学霸们正在繁忙的学业之余抓紧备考。 为了帮助孩子们更有效…