博客
关于我
mysql之连接查询,多表连接
阅读量:790 次
发布时间:2023-02-11

本文共 1300 字,大约阅读时间需要 4 分钟。

连接查询与笛卡尔乘积

在数据库查询中,连接查询是处理多个表数据的重要技术之一。它允许我们从不同的表中提取相关数据,并通过特定的连接条件将这些数据关联起来。

1. 笛卡尔乘积

笛卡尔乘积(Cartesian product)是数学中两个集合X和Y的所有可能的有序对的集合。例如,若X有n个元素,Y有m个元素,笛卡尔乘积的结果将有n×m个元素。

在MySQL中,两个表A和B的笛卡尔乘积会产生一个结果集,包含A和B所有行的组合。这种操作虽然有时有用,但大多数情况下会产生大量冗余数据。


2. 连接查询

连接查询是将多个表的数据合并到一个结果集中。常见的连接类型包括内连接、外连接和交叉连接。

2.1 内连接(INNER JOIN)

内连接用于将两个表中的所有记录都匹配。如果表A和表B中没有匹配的记录,结果中将不会出现这些记录。

示例:

查询员工的姓名及其部门名称:

select e.last_name, d.department_namefrom employees einner join departments don e.department_id = d.department_id;

非等值连接:

当连接条件不基于等值时,例如范围查询,可以使用BETWEEN关键字。

自连接:

当一个表需要与自身连接时,可以使用内连接。

示例:

查询包含字符"k"的员工姓名及其上级姓名:

select e.last_name employeeName, m.last_name managerNamefrom employees einner join employees mon e.manager_id = m.employee_idwhere e.last_name like '%k%';

2.2 外连接(OUTER JOIN)

外连接用于处理一个表中存在而另一个表中不存在的记录。外连接的结果包括主表中的所有记录,外表中的匹配记录或NULL值。

左外连接(LEFT JOIN):

左外连接的主表是左边的表,右表的记录如果没有匹配则显示为NULL

右外连接(RIGHT JOIN):

右外连接的主表是右边的表,左表的记录如果没有匹配则显示为NULL

示例:

查询部门中没有员工的部门名称:

select d.*from departments dleft join employees eon d.department_id = e.department_idwhere e.employee_id is null;

2.3 交叉连接(CROSS JOIN)

交叉连接(也称为笛卡尔乘积)是将两个表的所有行与所有行组合,结果为两个表行数的乘积。

示例:

查询表A和表B的所有组合:

select a.*, b.*from table_a across join table_b b;

3. 查询优化

在进行连接查询时,建议合理选择连接类型,避免不必要的笛卡尔乘积。内连接和外连接的选择取决于业务需求,而交叉连接通常仅用于特定场景。

通过合理使用连接查询,可以有效地管理多表数据,提升查询效率。

转载地址:http://qxbfk.baihongyu.com/

你可能感兴趣的文章
MYSQL之union和order by分析([Err] 1221 - Incorrect usage of UNION and ORDER BY)
查看>>
Mysql之主从复制
查看>>
MySQL之函数
查看>>
mysql之分组查询GROUP BY,HAVING
查看>>
mysql之分页查询
查看>>
Mysql之备份与恢复
查看>>
mysql之子查询
查看>>
MySQL之字符串函数
查看>>
mysql之常见函数
查看>>
Mysql之性能优化--索引的使用
查看>>
mysql之旅【第一篇】
查看>>
Mysql之索引选择及优化
查看>>
mysql之联合查询UNION
查看>>
mysql之连接查询,多表连接
查看>>
mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
查看>>
mysql也能注册到eureka_SpringCloud如何向Eureka中进行注册微服务-百度经验
查看>>
mysql乱码
查看>>
Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
查看>>
MySQL事务与锁详解
查看>>
MySQL事务原理以及MVCC详解
查看>>