当前位置: 首页 > article >正文

MySQL9个连接:left join、inner join等

在数据库管理系统中,尤其是在使用MySQL这类关系型数据库时,表之间的连接(Joins)是一种非常基础且强大的数据操作方式,它允许我们将来自不同表的数据基于某些共同的属性(通常是主键和外键关系)合并起来。MySQL提供了多种类型的连接操作,每种连接都有其特定的用途和结果集特点。下面,我将详细介绍MySQL中最常用的九种连接类型中的几种核心类型:INNER JOINLEFT JOIN(或LEFT OUTER JOIN)、RIGHT JOIN(或RIGHT OUTER JOIN)、FULL OUTER JOIN(虽然MySQL直接不支持,但可以通过其他方式实现)、CROSS JOIN(或CARTESIAN JOIN),以及简要提及SELF JOINNATURAL JOINUSING JOIN 和 ON JOIN(后三者更多是连接条件的指定方式,而非独立的连接类型)。

1. INNER JOIN(内连接)

INNER JOIN 返回两个或多个表中匹配连接条件的记录。如果表中有至少一个匹配,则返回行。如果“表A”中的行与“表B”中的行相匹配,则这些行会出现在结果集中。如果某行在“表A”中有匹配项,但在“表B”中没有,或者相反,那么这些行就不会出现在结果集中。

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

2. LEFT JOIN(左连接或左外连接)

LEFT JOIN 或 LEFT OUTER JOIN 返回左表(FROM子句中的表)的所有记录,以及右表中匹配连接条件的记录。如果左表的某行在右表中没有匹配,则结果中这些行在右表的部分将包含NULL。

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

3. RIGHT JOIN(右连接或右外连接)

RIGHT JOIN 或 RIGHT OUTER JOIN 与LEFT JOIN相反,它返回右表(JOIN子句中指定的第二个表)的所有记录,以及左表中匹配连接条件的记录。如果右表的某行在左表中没有匹配,则结果中这些行在左表的部分将包含NULL。

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

4. FULL OUTER JOIN(全外连接,MySQL通过UNION模拟)

MySQL本身不直接支持FULL OUTER JOIN,但可以通过结合LEFT JOINRIGHT JOIN,并使用UNION(去除重复行)或UNION ALL(包括所有重复行)来模拟。FULL OUTER JOIN返回左表和右表中所有的记录。当某行在另一个表中没有匹配时,则对应的部分将包含NULL。

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

5. CROSS JOIN(交叉连接或笛卡尔积)

CROSS JOIN 或 CARTESIAN JOIN 返回第一个表中的每一行与第二个表中的每一行的笛卡尔积。如果第一个表有X行,第二个表有Y行,那么结果集将有X*Y行。通常,这种连接会配合条件(WHERE子句)使用来限制结果集的大小。

SELECT Orders.OrderID, Customers.CustomerName  
FROM Orders  
CROSS JOIN Customers;

其他提及的连接方式

  • SELF JOIN:自连接是指表与其自身进行连接,通常用于比较表内的行。
  • NATURAL JOIN:基于两个表共有的列名自动进行连接,但不推荐使用,因为可能会引入歧义。
  • USING JOIN 和 ON JOIN:这两种方式用于明确指定连接条件,USING基于共有的列名,而ON则允许使用更复杂的连接条件。

通过合理使用这些连接类型,可以灵活地查询和合并来自不同表的数据,满足复杂的业务需求。


http://www.kler.cn/a/325874.html

相关文章:

  • 图解Git——分支开发工作流《Pro Git》
  • Open FPV VTX开源之嵌入式OSD配置
  • 认识机器学习中的经验风险最小化准则
  • 2 XDMA IP中断
  • 案例研究:UML用例图中的结账系统
  • Idea-离线安装SonarLint插件地址
  • RabbitMQ常用管理命令及管理后台
  • 深度学习推理的技术实现与优化策略
  • 达梦数据库导入导出统计信息
  • 【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)
  • C#中实现压缩包(如ZIP)的解压功能
  • 源2.0全面适配百度PaddleNLP,大模型开发开箱即用
  • 弹射型蜂群巡飞无人机技术详解
  • 光电开关应用设计讨论
  • 0x09 瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 - 复现
  • 【学习笔记】手写 Tomcat 七
  • MySQL 8 临时关闭缓存
  • 安卓主板_MTK4G/5G音视频记录仪整机及方案定制
  • Python酷库之旅-第三方库Pandas(127)
  • ASPICE的商业价值:提升汽车软件开发竞争力与质量保障
  • Qt——如何创建一个项目
  • vulhub weblogic 靶场攻略
  • ElementPlus---Timeline 时间线组件使用示例
  • 分布式选举 - Paxos、Zab 和 Raft 选举协议的逐步优化与对比分析
  • 数据库 - python操作MySQL
  • Swagger配置且添加小锁(asp.net)(笔记)