欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 数据库原理之多表查询——使用Mysql进行内连接和外连接

数据库原理之多表查询——使用Mysql进行内连接和外连接

2024/10/24 1:48:32 来源:https://blog.csdn.net/m0_75262255/article/details/140881722  浏览:    关键词:数据库原理之多表查询——使用Mysql进行内连接和外连接

作者:CSDN-PleaSure乐事

欢迎大家阅读我的博客 希望大家喜欢

使用环境:Idea

目录

1.内连接

1.1隐式内连接

1.1.1定义

1.1.2举例

1.1.3优缺点

1.2显式内连接

1.2.1定义

1.2.2举例

1.2.3优缺点

2.外连接

2.1左外连接

2.1.1定义

2.1.2举例

2.2右外连接

2.2.1定义

2.2.2举例


1.内连接

1.1隐式内连接

1.1.1定义

在多表查询当中,隐式内连接是指没有显式使用JOIN关键字来进行表连接的一种方式,隐式内连接可以通过在SELECT语句中列出多个表,并在 WHERE 子句中指定连接条件来实现。具体格式如下:

select 字段列表 from 表1,表2 where 条件 ...;

1.1.2举例

假设我们有两个表 employees 和 departments,并且想要获取每个员工及其所在部门的信息,可以使用以下查询:

SELECT employees.emp_id, employees.name, departments.dept_name
FROM employees, departments
WHERE employees.dept_id = departments.dept_id;

若其中有数据,我们可以得到如下结果:

1.1.3优缺点

对于非常简单的查询,隐式内连接可以让查询看起来更简洁。

但是代码可读性差,没有明确指出连接类型,使得查询更难理解。如果没有合适的WHERE子句,可能会导致笛卡尔积。

1.2显式内连接

1.2.1定义

在多表查询中,显式内连接是一种明确指定两个或多个表如何连接的方法。它使用JOIN关键字,使得连接条件和连接类型更加明显,从而提高了查询的可读性和可维护性。具体格式如下:

select 字段列表 from 表1 [inner] join 表2 on 连接条件 ...;

1.2.2举例

假设我们有两个表:employees 和 departments,其中 employees 表包含员工信息,departments 表包含部门信息。我们想获取每个员工及其所在的部门名称,代码如下:

SELECT employees.emp_id, employees.name, departments.dept_name
FROM employees
INNER JOIN departments
ON employees.dept_id = departments.dept_id;

其中的结果与上述的隐式内连接一致。

1.2.3优缺点

式内连接使连接逻辑更加明显,易于理解,且可以通过明确指定连接条件,可以避免因遗漏连接条件而导致的笛卡尔积问题。


2.外连接

2.1左外连接

2.1.1定义

左外连接返回所有左侧表中的记录,并且只返回右侧表中匹配的记录。如果右侧表中没有匹配的记录,则右侧表的列将显示为NULL。

格式如下:

select 字段列表 from 表1 left [ outer] join 表2 on 连接条件 ...;

2.1.2举例

假设我们有两个表:employees 和 departments,我们希望获取所有员工的信息以及他们所在的部门名称。如果某个员工没有分配到部门,我们仍然希望显示该员工的信息,并在部门列中显示 NULL。代码如下:

SELECT employees.emp_id, employees.name, departments.dept_name
FROM employees
LEFT JOIN departments
ON employees.dept_id = departments.dept_id;

2.2右外连接

2.2.1定义

右外连接与左外连接相反,它返回所有右侧表中的记录,并且只返回左侧表中匹配的记录。如果左侧表中没有匹配的记录,则左侧表的列将显示为 NULL。

2.2.2举例

如果要求如上,我们可以这样写:

SELECT employees.emp_id, employees.name, departments.dept_name
FROM employees
RIGHT JOIN departments
ON employees.dept_id = departments.dept_id;

作者:CSDN-PleaSure乐事

希望我的博客对您有帮助,也希望在对您有帮助时您可以为我留下点赞收藏与关注,这对我真的很重要,谢谢!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com