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

news2024/9/21 11:04:35

作者: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.coloradmin.cn/o/1972716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Creomagic 推出认知通信功能以应对电子战 (EW) 威胁

新时代的软件定义无线电 (SDR) 技术可以在电子战和竞争频谱环境中自主维护可靠的网络。 最近的全球冲突凸显了现代战场上战术通信面临的严峻挑战。随着自主部队的日益普及,战场感知变得比以往任何时候都更加先进,需要大量信息传输和同步。在战场上传输关…

【OpenCV C++20 学习笔记】腐蚀和膨胀

腐蚀和膨胀 形态学原理膨胀腐蚀 代码实现膨胀函数腐蚀函数运行结果 形态学原理 腐蚀和膨胀通常有以下用途: 去除噪音分离或合并图像中的元素找出图片上的强度的极大值区域和极小值区域 以下图作为原始图片: 膨胀 用核 B B B来扫描图像 A A A&#xff…

Python数值计算(12)——线性插值

1. 概述 插值是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计的方法。最简单直观的一种插值方式是线性插值,它是…

MuseTalk - 数字人唇部同步

文章目录 一、关于 MuseTalk概览新闻模型案例待办事项:第三方集成 二、安装构建环境mmlab 软件包下载 ffmpeg-static下载权重 三、快速入门推理使用 bbox_shift 以获得可调整的结果结合 MuseV 和 MuseTalk🆕实时推理实时推理注意事项 四、其它致谢限制引…

Taro学习记录

一、安装taro-cli 二、项目文件 三、项目搭建 1、Eslint配置 在项目生成的 .eslintrc 中进行配置 {"extends": ["taro/react"], //一个配置文件,可以被基础配置中的已启用的规则继承"parser": "babel/eslint-parser…

1688中国站获得工厂档案信息 API

公共参数 名称类型必须描述keyString是免费申请调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…

【动态规划-最大子段和】力扣1191. K 次串联后最大子数组之和

给定一个整数数组 arr 和一个整数 k ,通过重复 k 次来修改数组。 例如,如果 arr [1, 2] , k 3 ,那么修改后的数组将是 [1, 2, 1, 2, 1, 2] 。 返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0&…

Delphi5实现多窗体

效果图 新建窗体 窗体的显现 procedure TForm2.btn2Click(Sender: TObject); beginForm1.Show;Form2.Hide; end;第一个窗体完整代码 注意引用第二个窗体 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, Forms,Form…

《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端

引出 《中国数据库前世今生》观影——2000年代/数据库分型及国产数据库开端 第3集:2000年代/数据库分型及国产数据库开端 y2k问题 千年虫,又叫做“计算机2000年问题”“电脑千禧年千年虫问题”或“千年危机”。缩写为“Y2K]”。是指在某些使用了计算机…

ESP8266 完结日志 2024/8/2 23:50

呼!经历这么长 的时间终于完工了, 从零开始一步一步走过来,还是有一丢丢成就感的 功能: 上传文件 控制引脚 获取信息 重启设备 清空flash 期间接触:web开发 uni-app开发 c开发 python 开发 MQTT AI很棒,棒到我任何问题都想问AI, 甚至一丢丢逻辑下的操作都期盼AI解决. 抖音也…

yolov5的学习part1

还是基础的anoconda,在opencv的时候就已经安装过了 此视频疑似在2020年底录制,因为他安装anaconda使用如下代码 bash ~/Downloads/Anaconda3-2020.07-Linux-x86_64.sh 由于版本兼容问题,可能要mini conda PASCAL VOC PASCAL VOC挑战赛在…

Node.js(6)——npm软件包管理

npm npm是Node.js标准的软件包管理器。 使用: 初始化清单文件:npm init-y(得到package.json文件,有则略过此命令)下载软件包:npm i 软件包名称使用软件包 示例: 初始状态下npm文件夹下只有server.js,下载软件包前看…

揭秘最“硬”的物质,你听说过神秘的“0”号元素吗?

“尽管我们还没有找到它,但这并不意味着它不存在。”——斯蒂芬威廉霍金 亲爱的朋友们,今天我们来探讨一个引人入胜的话题——宇宙中最坚硬的物质是什么?别急,这不是去健身房的邀请,而是一次探索宇宙奥秘的旅程。听说过神秘的“0”号元素吗?让我们一探究竟! 在浩瀚的宇…

unity2D游戏开发12单例

单例 我们先了解一种被称为单例的软件设计模式。当应用程序需要在生命周期内创建特定类的单个实例时,可以使用单例。当一个类提供了游戏中其他几个类使用的功能时,单例会很有用,例如,在Game Manager 类中协调游戏逻辑,单例可以提供对该类及其功能的公共统一访问入口。单例…

C++客户端Qt开发——多线程编程(一)

多线程编程(一) ①QThread 在Qt中,多线程的处理一般是通过QThread类来实现。 QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。 QThread对象管理程序中的一个控制线程。 run() 线程的入口…

用Python插入表格到PowerPoint演示文稿

有效的信息传达是演示文稿中的重点,而PowerPoint演示文稿作为最广泛使用的演示工具之一,提供了丰富的功能来帮助演讲者实现这一目标。其中,在演示文稿中插入表格可以帮助观众更直观地理解数据和比较信息。通过使用Python这样的强大编程语言&a…

前端优化之图片的渐进式加载

起因&#xff1a; 在访问自己部署的前端项目的时候发现&#xff0c;背景图片加载太慢&#xff0c;并不是很美观。 这是因为&#xff0c;除了 JavaScript 和 CSS&#xff0c;网站通常还会包含大量的图片。当自己把<img> 元素添加到网站里面时&#xff0c;对应的所有图片…

计算机网络-基于PIM-DM+IGMP的组播实验配置

前面我们将IGMP协议和PIM-DM协议理论知识都学完了&#xff0c;现在开始进入实践&#xff0c;毕竟只有完成实践是最好的检验方式。IGMP是用于感知组播组成员&#xff0c;而PIM-DM是用于在域内构建组播分发树的的协议&#xff0c;本次实验使用这两项技术进行分析与实践。 一、拓扑…

操作系统与进程简单介绍

操作系统与进程 操作系统进程 操作系统 上一篇博客中介绍了操作系统到底层硬件它们之间的一个关系&#xff0c;那么还是这张图 操作系统到用户它们之间的关系又是如何的呢&#xff1f; 又回到了最根本的问题上&#xff1a;为什么要有操作系统呢&#xff1f; 1、向下管理好软…

jQuery入门(五)Ajax和json

一、Ajax 简介 AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。 本身不是一种新技术&#xff0c;而是多个技术综合。用于快速创建动态网页的技术。 一般的网页如果需要更新内容&#xff0c;必需重新加载个页面。 而 AJAX 通过浏览器与服务器进行…