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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始一步步学习VSOA开发】开发环境搭建

开发环境搭建 开发 VSOA 首先需要搭建开发环境,这里讲解 Windows 下 C/C 开发环境搭建方法。 下载 IDE 并申请授权码 SylixOS 的开发和部署需要 RealEvo-IDE 的支持,因此您需要先获取 RealEvo-IDE 的安装包和注册码。 RealEvo-IDE 分为体验版和商业版…

如何确保PLC系统安全的可靠性,这几个注意事项你需要牢记

PLC(可编程逻辑控制器)是现代工业自动化系统中的关键组成部分。在设计 PLC 系统时,安全性是至关重要的考虑因素。本文将介绍 PLC 系统设计中的一些安全注意事项,包括电源设计、接地设计、关键数字量输入输出设计和报警设计。 一.…

vue实现简易的全局加载动画效果

效果展示 思路 封装一个组件,放Img,伪类样式,固定在屏幕fixed 然后App应用这个组件,Z index拉最大,防止用户在加载动画时乱点, v-show绑定loading,该数据可以放vuex还是任一的公共状态管理变…

PDF文件点击打印无反应?是何原因造成能解决吗?

PDF无法打印怎么处理?在我们工作中,经常会遇见各种各样的文件问题,当我们想要将PDF文件打印出来纸质版使用,却不知什么原因,显示PDF无法打印,这时应该怎么处理呢? 一般情况下,PDF文件…

cesium canvas广告牌

在有些业务中,对场景中的广告牌样式要求比较高,需要动态显示一些数据,这个时候,我们可以通过将复杂背景样式制作成图片,通过canvas绘制图片和动态数据,从而达到比较好的显示效果。 1 CanvasMarker 类封装 …

学Python可少不了项目练手,这8个小项目有趣又实用,小白也能做出来_python练手项目,python教程

学习之路比较科学的学习方法是理解了之后把知识点进行运用,找一些开源的小项目做是最好的,站在岸上是学不会游泳的,光看健身视频是减不了肥的,不自己动手敲代码是学不会编程的。 我在找了8个比较有趣的小项目,技术水平…

E5092A可配置的多端口测试仪

E5092A 可配置的多端口测试仪 多达 10 个端口的全交叉测量,或者最多 22 个端口的测量功能。 概述 E5092A 多端口测试仪可以灵活配置,并可与4 端口ENA 网络分析仪(E5070B/E5071B/E5071C/E5080A)结合使用,组成频率范…

web3 solana

网址:HACKQUEST 学习初衷: 1.web3概念较为小众,相比于web2,机会较多 2.有机会remote work,带着笔记本到处浪,听着就不错 3.面对越来越卷的国内,有机会并有能力拥抱国外job,感觉是…

鸿蒙系统开发【应用接续】基本功能

应用接续 介绍 基于ArkTS扩展的声明式开发范式编程语言编写的一个分布式视频播放器,主要包括一个直播视频播放界面,实现视频播放时可以从一台设备迁移到另一台设备继续运行,来选择更合适的设备继续执行播放功能以及PAD视频播放时协同调用手…

《LeetCode热题100》---<5.②普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第三道:轮转数组(中等) 第四道:除自身以外数组的乘积(中等) 第三道:轮转数组(中等) 方法一:使用额外的数…

vscode+cmake+msys2工具链配置

1、msys2下载编译器和cmake工具 pacman -S mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-cmaketoolchain包中包含很多不必要的工具包,应该可以指定具体的工具g,gcc,mingw32-make的下载,详细命令请自行搜索。 2、将 m…

QT 应用程序输出中文乱码

一 ,选择文本编码 1. 点击编辑再点击Select Encoding选择编码 2 .在弹出的窗口,选择UTF-8再点击按编码保存即可 3. 重新编译,可以发现中文乱码问题解决

思维+dfs,CF 269C - Flawed Flow

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 269C - Flawed Flow 二、解题报告 1、思路分析 考虑源点相连的边的方向是确定的,因为流量是从源点往外流的 我们设cap[u] 为 和u相连边的容量和,显然入边容量要和出边容量相等&…

jvm调优参数

JVM调优是指调整JVM的参数,以优化Java程序的性能。以下是一些常用的JVM调优方法: 1.堆内存大小:通过-Xms和-Xmx参数设置JVM的初始堆内存和最大堆内存。堆内存太小会导致频繁GC,太大则可能导致内存利用率不高。 2.新生代与老年…

OS_操作系统的运行环境

2024.06.11:操作系统的运行环境学习笔记 第3节 操作系统的运行环境 3.1 操作系统引导3.2 操作系统内核3.2.1 内核资源管理3.2.2 内核基本功能 3.3 CPU的双重工作模式3.3.1 CPU处于用户态(目态)3.3.2 CPU处于内核态(管态) 3.4 特权…

鸿蒙Scroll布局,横向与纵向

注意,当横向scroll时,直接子元素的宽,不能100%, 当纵向scroll时,直接子元素的高,不能100%​​​​​​​ 1、纵向代码: 方法1:用数值计算,来设置中间的高度: …

nginx负载均衡、java、tomcat装包

一、nginx 七层负载均衡 1、七层负载均衡基础配置 2、负载均衡状态 [rootserver]# vim /usr/local/nginx/conf/nginx.confworker_processes 1;event {worker_connections 1024;}http { # 七层负载均衡支持http、ftp协议include mime.types;default_type app…

【云原生】数据库忘记密码怎么办?

相信很多人都会遇到在虚拟机中忘记数据库密码的情况,想必大家都很苦恼,所以今天给大家来讲讲数据库忘记密码了如何修改密码再登录数据库!!! 1、关闭数据库服务 systemctl stop mariadb 2、执行MySQL 服务器在启动时跳…

ModuleNotFoundError: No module named ‘tqdm‘

报错信息: tqdm是一个快速、可扩展的Python进度条库,用于展示迭代器的长循环执行进度。 解决:通过以下命令安装 使用conda命令安装 conda install tqdm使用pip安装: pip install tqdm

【JVM】垃圾回收机制、算法和垃圾回收器

什么是垃圾回收机制 为了让程序员更加专注于代码的实现,而不用过多的考虑内存释放的问题,所以在Java语言中,有了自动的垃圾回收机制,也是我们常常提及的GC(Garbage Collection) 有了这个垃圾回收机制之后,程序员只需…