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

news2024/12/14 15:12:04

大家好,我是锋哥。今天分享关于【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:根据两个表中相同列名的列进行自动连接。

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

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

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

相关文章

LBS 开发微课堂|通过openGL ES轻松实现建筑物渲染及动画

为了让广大开发者 更深入地了解 百度地图开放平台的 技术能力 轻松掌握满满的 技术干货 更加简单地接入 位置服务 我们特别推出了 “位置服务(LBS)开发微课堂” 系列技术案例 第五期的主题是 通过openGL ES轻松实现 建筑物渲染及动画 对于…

Java——IO流(下)

一 (字符流扩展) 1 字符输出流 (更方便的输出字符——>取代了缓冲字符输出流——>因为他自己的节点流) (PrintWriter——>节点流——>具有自动行刷新缓冲字符输出流——>可以按行写出字符串,并且可通过println();方法实现自动换行) 在Java的IO流中…

SQLServer到MySQL的数据高效迁移方案分享

SQL Server数据集成到MySQL的技术案例分享 在企业级数据管理中,跨平台的数据集成是一个常见且关键的任务。本次我们将探讨如何通过轻易云数据集成平台,将巨益OMS系统中的退款单明细表从SQL Server高效、安全地迁移到MySQL数据库中。具体方案名称为“7--…

每日计划-1213

1. 完成 SQL2 查询多列 https://www.nowcoder.com/exam/oj?page1tabSQL%E7%AF%87topicId199 2. 八股部分 1) C 中面向对象编程如何实现数据隐藏? 在c中,可以将数据成员声明为私有或受保护,并提供公有的成员函数来访问和修改这些数据成员&am…

ORACLE 导入导出数据库(包含表结构和数据)

导出 1、进入本地oracle 驱动安装目录下–> 进入CMD 2、输入命令 exp 用户名/密码10.xx.xx.xx:1521/orcl fileexport.dmp 3、查看导出的文件 导入 1、进入本地oracle 驱动安装目录下–> 进入CMD 2、输入命令 imp 用户名/密码10.xx.xx.xx:1521/orcl fully ignorey…

Qt之将源代码封装成库文件使用(五)

Qt开发 系列文章 - Code-To-Library(五) 目录 前言 一、库文件 二、直接封装方式 1.静态库封装 2.动态库封装 3.其它库类型 三、二次重写封装 四、库的使用 1.移植库及头文件 2.添加外部库 总结 前言 库文件是计算机上的一类文件&#xff0c…

视频监控汇聚平台方案设计:Liveweb视频智能监管系统方案技术特点与应用

随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…

跨平台开发技术的探索:从 JavaScript 到 Flutter

随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…

Dcoker安装nginx,完成反向代理和负载均衡

1. 简介 官网:nginx Nginx是一个高性能的 HTTP 和反向代理 Web 服务器。它的主要功能包括反向代理、负载均衡和动静分离等。正因为 Nginx的这些功能能够为系统带来性能和安全方面的诸多优势,我们在项目部署时需要引入 Nginx组件。接下来我们会逐一向大…

Allegro X PCB设计小诀窍--如何在Allegro X中进行PCB设计评审

背景介绍:在PCB设计过程中,企业为了提升PCB设计质量,确保PCB设计的可制造性,缩短产品的研发周期,通常需要组织对PCB进行设计评审。但是目前的PCB设计评审过程存在评审文档管理繁琐、意见反馈不及时、问题传递不准确、评…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

HCIA-Access V2.5_2_3_网络通信基础_以太网概述

什么是以太网 以太网是由IEEE定义的局域网技术,也是目前应用最普遍的技术,早期的令牌环网,FDDI等局域网技术都被它取代了,以太网主要分为两类,共享型以太网和交换型以太网。共享式以太网主要采用总线型的拓扑结构&…

Maven学习(Maven项目模块化。模块间“继承“机制。父(工程),子项目(模块)间聚合)

目录 一、Maven项目模块化? (1)基本介绍。 (2)汽车模块化生产再聚合组装。 (3)Maven项目模块化图解。 1、maven_parent。 2、maven_pojo。 3、maven_dao。 4、maven_service。 5、maven_web。 6…

Leecode刷题C语言之K次乘法运算后的最终数组①

执行结果:通过 执行用时和内存消耗如下: 代码如下: int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {int *ret (int *)malloc(sizeof(int) * numsSize);memcpy(ret, nums, sizeof(int) * numsSize);while (k…

Source Insight 4.0的安装

一、安装与破解 1、下载Source Insight 4.0安装包 https://pan.baidu.com/s/1t0u1RM19am0lyzhlNTqK9Q?pwdnvmk 2、下载程序破解补丁包 https://pan.baidu.com/s/1irvH-Kfwjf4zCCtWJByqJQ 其中包含文件si4.pediy.lic 和 sourceinsight4.exe。 3、安装下载的Source Insight …

UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案

UNIX系统常见故障表现: 1、存储结构出错; 2、数据删除; 3、文件系统格式化; 4、其他原因数据丢失。 UNIX系统常见故障解决方案: 1、检测UNIX系统故障涉及的设备是否存在硬件故障,如果存在硬件故障&#xf…

重生之我在异世界学编程之C语言:深入文件操作篇(上)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 函数递归与迭代 引言正文一、为什么要用文件二、文…

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的? 在上一篇中,我们用任意一个内网的终端都能访问到百度的服务器,但是这是我们在互联网设备上面做了回程路由才实现的,在实际中,之前也说过运营商是不会写任何路由过来的,那对于…

VSCode 报错:rust-analyzer requires glibc >= 2.28 in latest build

报错信息 /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.953/server/rust-analyzer: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.29 not found (required by /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.9…

软考:工作后再考的性价比分析

引言 在当今的就业市场中,软考(软件设计师、系统分析师等资格考试)是否值得在校学生花费时间和精力去准备?本文将从多个角度深入分析软考在不同阶段的性价比,帮助大家做出明智的选择。 一、软考的价值与局限性 1.1 …