当前位置: 首页 > news >正文

数据库原理之多表查询——使用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乐事

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【学习方法】高效学习因素 ② ( 学习动机 | 内在学习动机 | 外在学习动机 | 外在学习动机的调整方向 | 保护学习兴趣 | 高考竞争分析 )
  • 使用MailKit在.NET Core中收发邮件的完整示例
  • 『 Linux 』线程池与 POSIX 线程的封装编码实现
  • 无人机PX4飞控 | 电源系统详解与相关代码
  • Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现
  • 高级java每日一道面试题-2024年8月06日-web篇-cookie,session,token有什么区别?
  • 【Material-UI】Autocomplete中的禁用选项:Disabled options
  • 基于Python的脑电图(EEG)信号分析(5)
  • Golang | Leetcode Golang题解之第312题戳气球
  • python 实现粒子群算法
  • 日志和守护进程
  • 人大金仓(Kingbase)数据库高阶函数详解
  • Java中的网络协议实现:HTTP/2与gRPC
  • 计算机的错误计算(五十四)
  • SpringBoot依赖之Quartz Scheduler定时调度器
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • JavaWeb(学习笔记二)
  • Java超时控制的实现
  • k个最大的数及变种小结
  • leetcode-27. Remove Element
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Redux 中间件分析
  • RxJS: 简单入门
  • 创建一个Struts2项目maven 方式
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 动态规划入门(以爬楼梯为例)
  • - 概述 - 《设计模式(极简c++版)》
  • ------- 计算机网络基础
  • 技术发展面试
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 聊聊directory traversal attack
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 目录与文件属性:编写ls
  • 我从编程教室毕业
  • 延迟脚本的方式
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 转载:[译] 内容加速黑科技趣谈
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #前后端分离# 头条发布系统
  • $.ajax中的eval及dataType
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (转)C#调用WebService 基础
  • (转)Unity3DUnity3D在android下调试
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .NET Core 成都线下面基会拉开序幕
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net6+aspose.words导出word并转pdf
  • .NET与 java通用的3DES加密解密方法
  • .Net中间语言BeforeFieldInit