news 2026/3/13 3:03:33

4.5.4.数据查询连接

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4.5.4.数据查询连接

在关系型数据库中,连接(Join)是 SQL 查询中最常用的操作之一,它用于在两个或多个表之间建立逻辑关系,将相关数据组合成一个结果集。

理解连接机制对于优化查询性能、设计高效数据库结构非常重要。

1.SQL连接的基本概念

连接(Join是指根据表之间的某种关联条件(通常是主键-外键关系或其他匹配条件),把多张表的数据组合成一个综合的结果集。

目的:将多个表的数据关联查询,避免数据冗余,提高数据结构的规范化。

条件:通常使用 ON 或 USING 指定匹配字段。

返回结果:每一行通常是多表匹配字段的笛卡尔积过滤结果。

2.SQL连接的类型

SQL连接主要分为以下几种类型:

2.1.内连接(INNER JOIN)

概念:只返回在两张表中匹配的行。

SQL 语法:

SELECTA.id, A.name, B.salary

FROMEmployee A

INNER JOINSalary B

ONA.id = B.emp_id;

机制:

1)对两个表进行匹配(通常根据索引或全表扫描)。

2)仅保留满足 ON 条件的记录。

应用场景:

只需要匹配的数据,不关心缺失值。

2.2.左连接(LEFT JOIN / LEFT OUTER JOIN)

概念:返回左表的所有行,即使右表没有匹配的行,右表字段显示为NULL

SQL 语法:

SELECT A.id, A.name, B.salary

FROM Employee A

LEFT JOINSalary B

ONA.id = B.emp_id;

机制:

遍历左表每一行。

查找右表中满足条件的行,如果没有匹配,右表字段填充 NULL。

应用场景:

左表数据完整性重要,需要显示未匹配右表的记录。

2.3.右连接(RIGHT JOIN / RIGHT OUTER JOIN)

概念:返回右表的所有行,即使左表没有匹配,左表字段显示为 NULL。

SQL 语法:

SELECT A.id, A.name, B.salary

FROM Employee A

RIGHT JOINSalary B

ON A.id = B.emp_id;

应用场景:右表数据完整性重要,需要显示未匹配左表的记录。

注意:左连接和右连接可以互换,主要看哪个表为“主表”。

2.4.全连接(FULL OUTER JOIN

概念:返回左右表的所有行,匹配的显示值,不匹配的用 NULL 补充。

SQL 语法(部分数据库如 MySQL 需用 UNION 实现):

SELECT A.id, A.name, B.salary

FROM Employee A

LEFT JOIN Salary B ON A.id = B.emp_id

UNION

SELECT A.id, A.name, B.salary

FROM Employee A

RIGHT JOIN Salary B ON A.id = B.emp_id;

应用场景:需要完整显示两张表的数据,无论是否匹配。

2.5.自连接(SELF JOIN

概念:表与自身连接,通常用于层级关系或比较。

SQL 语法:

SELECT A.name AS Employee, B.name AS Manager

FROM Employee A

INNER JOIN Employee B

ON A.manager_id = B.id;

应用场景:处理树状、层级结构,如员工-经理关系、分类-子类关系。

2.6.交叉连接(CROSS JOIN

概念:返回两张表的笛卡尔积(所有行的组合),无连接条件。

SQL 语法:

desc yonghu;

select A.id,B.addtime

FROM yonghu A

CROSS JOINyonghuzu B;

应用场景:需要生成所有组合情况,例如测试、组合分析。

4.性能优化建议

1)使用合适的连接类型

避免不必要的全连接和笛卡尔积,尽量用INNER JOINLEFT JOIN

2)创建索引

对连接字段建立索引,提升查找速度。

3)减少数据量

连接前先筛选数据(使用 WHERE 或子查询)。

4)选择小表驱动大表

在嵌套循环中,把小表作为外层表,提高效率。

5)分析执行计划

使用EXPLAIN或数据库执行计划工具,查看连接策略和扫描方式,调整查询结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 2:10:06

3.2.15.1.常见注解

1.Web开发方面Controller:用于标注控制层组件。RestController:是Controller 和 ResponseBody 的结合体,返回 JSON 数据时使用。RequestMapping:用于映射请求 URL 到具体的方法上,还可以细分为:GetMapping&…

作者头像 李华
网站建设 2026/3/5 13:08:01

Java毕设选题推荐:基于Spring Boot+vue的学生信息管理系统基于javaweb的学生管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/5 12:26:05

小程序毕设选题推荐:基于springboot+微信小程序的应急救援小能手软件系统的设计与实现基于微信小程序的应急救援小能手软件系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/9 4:31:36

Ubuntu切换wayland和x11

Ubuntu 25.10系统之后就不支持x11了,Ubuntu25.04仍然支持wayland 查看一下当前显示是什么显示协议: echo $XDG_SESSION_TYPE打开以下文件,并且将对应行进行注释,即删除对应行的# sudo vim /etc/gdm3/custom.conf# WaylandEnablefa…

作者头像 李华
网站建设 2026/3/7 10:52:34

Vue2如何通过插件实现100万文件上传的进度监控?

大文件上传方案设计与实现(政府信创环境兼容) 方案背景 作为北京某软件公司的开发人员,我负责为政府客户实现一个兼容主流浏览器和信创国产化环境的大文件上传系统。当前需求是支持4GB左右文件的上传,后端使用PHP,前…

作者头像 李华
网站建设 2026/3/11 7:56:48

强化学习系统性学习笔记(一):从理论基础到策略优化

1.1 理论溯源:从生物学习到数学框架强化学习的思想源头可以追溯到生物行为心理学中的"试错学习"原理。在自然界中,生物个体通过反复尝试不同行为并观察环境反馈,逐步学会选择能够带来更好结果的行动策略。这一朴素而普适的学习模式…

作者头像 李华