MySQL中的交叉连接、自然连接和内连接查询详解

2025-04-12 05:50

本文主要是介绍MySQL中的交叉连接、自然连接和内连接查询详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教...

一、引入

实际开发中往往需要针对两张甚至更多张数据表进行操作,而这多张表之间需要使用主键和外键关联在一起然后使用连接查询来查询多张表中满足要求的数据记录

一条SQL语句查询多个表,得到一个结果,包含多个表的数据。效率高。

多种连接查询的类型:

  • cross
  • natural
  • using
  • on

二、交叉连接(cross join)

交叉连接(CROSS JOIN)是对两个或者多个表进行笛卡儿积操作,所谓笛卡儿积就是关系代数里的一个概念,表示两个表中的每一行数据任意组合的结果。

比如:有两个表,左表有m条数据记录,x个字段,右表有n条数据记录,y个字段,则执行交叉连接后将返回m*n条数据记录,x+y个字段。笛卡儿积示意图如图所示。

MySQL中的交叉连接、自然连接和内连接查询详解

我希望查找员工编号、员工姓名、部门编号和部门名称这4个字段的数据,在员工表emp中可python以查询到员工编号、员工姓名、部门编号的数据,在部门表dept中可以查询到字段部门名称的数据,如果想同时查找这些数据,需要使用多表查询语法,交叉连接cross join:

查询员工表emp:

select * from emp;

MySQL中的交叉连接、自然连接和内连接查询详解

查询部门表dept:

select * from dept;

MySQL中的交叉连接、自然连接和内连接查询详解

一条SQL查询两个表:

select * fromhttp://www.chinasem.cn emp cross join dept;

MySQL中的交叉连接、自然连接和内连接查询详解

表emp14条记录,表dept4条记录,交叉连接查询后,14*4=56条记录,交叉连接就是对这两个表进行笛卡尔乘积操作,笛卡尔乘积没有实际意义,但是有理论意义。

关于交叉连接的写法,mysql中可以省略cross,oracle中不可以省略不写,上条SQL等价于:

select * from emp join dept;

三、自然连接(natural join)

交叉连接会查询到许多冗余数据,比如在员工表emp和部门表dept中,让主键和外键关联起来的外键deptno,没有匹配到一起,造成数据冗余:

MySQL中的交叉连接、自然连接和内连接查询详解

使用自然连接,可以自动匹配所有的同名列,让同名列只在查询中展示一次,提高查询效率,

select * from emp natural join dept;

MySQL中的交叉连接、自然连接和内连接查询详解

可以指定查询的部分字段:

select empno,ename,deptno,dname from emp natural join dept;

MySQL中的交叉连接、自然连接和内连接查询详解

当查询一个字段时,系统会分别从两个关联的表中查找,因此效率较低,为解决这个问题,我们可以在查询目标字段时,指定表名,格式为表名.字段名

select emp.empno,emp.ename,emp.deptno,dept.dname from emp natural join dept;

查询结果和上述一致,但是查询效率得到了提升。

此时,如果表名过长,查询的SQL也会过长,在查询时,我们可以为表起别名:

select e.empno,e.ename,d.dname,d.deptno
from emp e
natural join dept d;

四、内连接

使用natural China编程join 的缺点:会自动匹配表中所有的同名列,但是有的时候我们希望只匹配部分同名列,那么我们可以使用using子句,这属于内连接(inner join)

select * 
from emp as e
inner join dept as d
using(deptno);

using子句的缺点:关联的字段,必须是同名的

解决方法:使用内连接中的on子句

select * 
from emp e
inner join dept d
on (e.deptno = d.deptno);

五、总结

多表查询的类型有:

  1. 交叉连接 cross join
  2. 自然连接 natural join
  3. 内连接 - using子句
  4. 内连接 - on子句

综合来看:内连接 - on子句的使用频率最高。

六、补充

select *
from emp e
inner join dept d
on (e.deptno = d.deptno)
where sal > 3500;

条件:

1、筛选条件 where having

2、连接条件 on/using/natural

在SQL99语法当中,筛选条件和连接条件是分开的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于MySQL中的交叉连接、自然连接和内连接查询详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154191

相关文章

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Nginx路由匹配规则及优先级详解

《Nginx路由匹配规则及优先级详解》Nginx作为一个高性能的Web服务器和反向代理服务器,广泛用于负载均衡、请求转发等场景,在配置Nginx时,路由匹配规则是非常重要的概念,本文将详细介绍Ngin... 目录引言一、 Nginx的路由匹配规则概述二、 Nginx的路由匹配规则类型2.1 精确匹配(=)2

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

SQL 外键Foreign Key全解析

《SQL外键ForeignKey全解析》外键是数据库表中的一列(或一组列),用于​​建立两个表之间的关联关系​​,外键的值必须匹配另一个表的主键(PrimaryKey)或唯一约束(UniqueCo... 目录1. 什么是外键?​​ ​​​​2. 外键的语法​​​​3. 外键的约束行为​​​​4. 多列外键​

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性