MySQL多表查询时有哪些连接方式?

大家好,我是锋哥。今天分享关于【MySQL多表查询时有哪些连接方式?】面试题。希望对大家有帮助;

MySQL多表查询时有哪些连接方式?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

在 MySQL 中进行多表查询时,常见的连接方式有以下几种:

1. INNER JOIN(内连接)

INNER JOIN 是最常用的连接方式,它会返回两个表中符合条件的记录。如果某个表中没有与另一个表匹配的记录,则该记录不会出现在查询结果中。

语法

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

示例

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

2. LEFT JOIN(左外连接)

LEFT JOIN 或者 LEFT OUTER JOIN 会返回左表(第一个表)中的所有记录,以及右表(第二个表)中符合连接条件的记录。如果右表没有匹配记录,结果中右表的列将返回 NULL

语法

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

示例

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

在这个例子中,即使某些员工没有分配到部门,查询结果仍然会包含所有员工的信息,部门名称则会显示为 NULL

3. RIGHT JOIN(右外连接)

RIGHT JOIN 或者 RIGHT OUTER JOINLEFT JOIN 的反向操作,它会返回右表中的所有记录,以及左表中符合连接条件的记录。如果左表没有匹配记录,结果中左表的列将返回 NULL

语法

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例

SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

在这个例子中,即使某些部门没有员工,查询结果仍然会包含所有部门的信息,员工名称会显示为 NULL

4. FULL OUTER JOIN(全外连接)

MySQL 并不直接支持 FULL OUTER JOIN,但可以通过联合 LEFT JOINRIGHT JOIN 来模拟其效果。FULL OUTER JOIN 返回左表和右表中所有的记录,包括匹配和不匹配的部分。如果某一方没有匹配,另一方的值为 NULL

模拟 FULL OUTER JOIN

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

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

CROSS JOIN 会返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。如果左表有 n 行,右表有 m 行,那么查询结果将包含 n * m 行。

语法

SELECT columns
FROM table1
CROSS JOIN table2;

示例

SELECT employees.name, departments.name
FROM employees
CROSS JOIN departments;

此查询会将每个员工与每个部门进行组合,生成所有可能的组合。

6. SELF JOIN(自连接)

SELF JOIN 是指一个表与其自身进行连接。通常通过为表的不同实例起别名来区分连接的两个“表”。

语法

SELECT columns
FROM table1 AS t1
INNER JOIN table1 AS t2 ON t1.column = t2.column;

示例

SELECT e1.name AS Employee, e2.name AS Manager
FROM employees AS e1
INNER JOIN employees AS e2 ON e1.manager_id = e2.id;

在这个示例中,我们查询了每个员工和他们的经理,这实际上是通过将 employees 表与自身进行连接来实现的。

7. NATURAL JOIN(自然连接)

NATURAL JOIN 是一种基于列名相同的自动连接方式。它会自动查找两个表中同名的列并进行连接,不需要显式指定连接条件。需要注意的是,NATURAL JOIN 会忽略列名不同的列,且不适用于所有场景。

语法

SELECT columns
FROM table1
NATURAL JOIN table2;

示例

SELECT employees.name, departments.name
FROM employees
NATURAL JOIN departments;

在这个例子中,NATURAL JOIN 会根据两个表中具有相同列名(例如 department_id)的列来进行自动连接。

总结

  • INNER JOIN:返回两表中匹配的记录。
  • LEFT JOIN:返回左表的所有记录,以及右表中匹配的记录(没有匹配时右表为 NULL)。
  • RIGHT JOIN:返回右表的所有记录,以及左表中匹配的记录(没有匹配时左表为 NULL)。
  • FULL OUTER JOIN:返回左表和右表的所有记录,匹配的记录为实际数据,不匹配的为 NULL。(MySQL 通过 LEFT JOIN 和 RIGHT JOIN 模拟)
  • CROSS JOIN:返回两个表的笛卡尔积,行数是两个表行数的乘积。
  • SELF JOIN:一个表与自身连接,通常使用别名来区分。
  • NATURAL JOIN:根据两个表中相同列名的列进行自动连接。

这些连接方式可以根据实际业务需求灵活使用,帮助实现多表查询的各种功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | 虚拟环境01 - 什么是虚拟环境、它的由来

导言 python3真的不是安装了就完事,必须理解虚拟环境是什么才算是初步掌握python环境。 学习python3虚拟环境,建议参考B站教程。这位博主用了6个视频,每一个视频仅仅几分钟。居然把python3的虚拟环境讲明白了。 虚拟环境(Virtual…

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“,将应用与Microsoft Store关联时,一直提示网络错误。 查了一下论坛,发现之前也经常出现,但我是第一次遇到。 不能就这样一直被卡着呀,研究了一下,还…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

MySQL 深入理解隔离性

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 MySQL 深入理解隔离性 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 由于之前在 MySQL 事务特…

Nacos 3.0 考虑升级到 Spring Boot 3 + JDK 17 了!

Nacos 由阿里开源&#xff0c;是 Spring Cloud Alibaba 中的一个重要组件&#xff0c;主要用于发现、配置和管理微服务。 由于 Spring Boot 2 的维护已于近期停止&#xff0c;Nacos 团队考虑升级到 Spring Boot 3 JDK 17&#xff0c;目前正在征求意见和建议。 这其实是一件好…

【硬件接口】I2C总线接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 I2C总线是一种非常常用的总线&#xff0c;其多用于一个主机&#xff08;或多个&#xff09;与单个或多个从设备通讯…

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…

GEE+本地XGboot分类

GEE本地XGboot分类 我想做提取耕地提取&#xff0c;想到了一篇董金玮老师的一篇论文&#xff0c;这个论文是先提取的耕地&#xff0c;再做作物分类&#xff0c;耕地的提取代码是开源的。 但这个代码直接在云端上进行分类&#xff0c;GEE会爆内存&#xff0c;因此我准备把数据下…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架&#xff0c;与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis&#xff0c;包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

【字符串匹配算法——BF算法】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 BF算法介绍及过程演示代码实现过程下节预告KMP算法利用next数组存储子串中j回退的位置&#xff08;…

单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。

论文介绍了一种从单幅图像合成 360 3D 场景的新方法。该方法以连贯的方式生成全景图及其相应的深度&#xff0c;解决了现有最先进方法&#xff08;如 LucidDreamer 和 WonderJourney 的局限性。这些方法按照生成轨迹依次添加细节&#xff0c;通常在循环回输入图像时导致可见的接…

【蓝桥杯】46195.水仙花数

水仙花数 问题描述 打印所有100至999之间的水仙花数。所谓水仙花数是指满足其各位数字立方和为该数字本身的整数&#xff0c;例如 153135333。 样例输入 无 样例输出 153 370 371 407解题思路 遍历100到999之间的所有整数。对每个整数&#xff0c;计算其各位数字的立方和…

#思科模拟器通过服务配置保障无线网络安全Radius

演示拓扑图&#xff1a; 搭建拓扑时要注意&#xff1a; 只能连接它的Ethernet接口&#xff0c;不然会不通 MAC地址绑定 要求 &#xff1a;通过配置MAC地址过滤禁止非内部员工连接WiFi 打开无线路由器GUI界面&#xff0c;点开下图页面&#xff0c;配置路由器无线网络MAC地址过…

cpolar使用步骤

功能&#xff1a;内网穿透 下载地址&#xff1a;cpolar - secure introspectable tunnels to localhost 1 找到安装目录 2 进入命令行 目录处输入 cmd 3 验证 authtoken 不同用户 验证码不同。 注册后可以使用 cpolar.exe authtoken MzBlNzMwODktZjA3Yi00ZjJlLWJiMzQtNWU…

【排序算法】——插入排序

目录 前言 简介 基本思想 1.直接插入排序 2.希尔排序 代码实现 1.直接插入排序 2.希尔排序 总结 1.时空复杂度 2.稳定性 尾声 前言 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素&#xff08;或记录&#xff09;的任意序列&…

MySQL学习之DDL操作

目录 数据库的操作 创建 查看 选择 删除 修改 数据类型 表的创建 表的修改 表的约束 主键 PRIMARY KEY 唯一性约束 UNIQUE 非空约束 NOT NULL 外键约束 约束小结 索引 索引分类 常规索引 主键索引 唯一索引 外键索引 优点 缺点 视图 创建 删除 修改…

四、网络层:数据平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

文章目录 零、导论0.1 网络层服务0.2 网络层的关键功能0.3 网络层&#xff1a;数据平面、控制平面0.4 传统方式&#xff1a;每一路由器&#xff08;Per-router&#xff09;控制平面0.5 传统方式&#xff1a;路由和转发的相互作用0.6 SDN方式&#xff1a;逻辑集中的控制平面0.7 …

Java每日一题(1)

给定n个数a1,a2,...an,求它们两两相乘再相加的和。 即&#xff1a;Sa1*a2a1*a3...a1*ana2*a3...an-2*an-1an-2*anan-1*an 第一行输入的包含一个整数n。 第二行输入包含n个整数a1,a2,...an。 样例输入 4 1 3 6 9 样例输出 117 答案 import java.util.Scanner; // 1:无…