【Mysql】图解左、右、内与全连接

2023-11-15

一、前言

使用学生表与成绩表来演示Mysql中的各种连接查找

学生表的建表语句如下:

CREATE TABLE student(
  id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增序号',
  st_id int(11) DEFAULT NULL COMMENT '学生id',
  st_name varchar(255) DEFAULT NULL COMMENT '学生姓名',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB;

成绩表的建表语句如下:

CREATE TABLE score(
  id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  st_id int(11) DEFAULT NULL COMMENT '学生id',
  subject varchar(255) DEFAULT NULL COMMENT '学科名称',
  grade int(11) DEFAULT NULL COMMENT '学科成绩',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ;

初始数据如下:


二、内连接

按照关联字段取出两个表中的记录,保留的是两个表的交集。

例如:

SELECT
	student.st_id,
	student.st_name,
	score.subject,
	score.grade 
FROM
	student
	INNER JOIN score ON student.st_id = score.st_id;

执行结果:

对于关联字段st_id,左表与右表都有1001与1002。


三、左连接

按照关联字段取出两个表中的记录,保留左表所有的记录,以及满足连接条件的右表记录,右表中不满足连接条件的会被置为null。

例如:

SELECT
	student.st_id,
	student.st_name,
	score.subject,
	score.grade 
FROM
	student
	LEFT JOIN score ON student.st_id = score.st_id;

执行结果:

对于关联字段st_id,展示左表所有的记录。由于右表缺少1003,则1003这行的subject与grade的值被置为null。


四、右连接

按照关联字段取出两个表中的记录,保留右表所有的记录,以及满足连接条件的左表记录,左表中不满足连接条件的会被置为null。正好与左连接相反。

例如:

SELECT
	student.st_id,
	student.st_name,
	score.subject,
	score.grade 
FROM
	student
	RIGHT JOIN score ON student.st_id = score.st_id;

执行结果:

对于关联字段st_id,展示右表所有的记录。由于左表缺少1005,即执行结果的最后一行的st_id与st_name的值被置为null。


五、全连接

按照关联字段取出两个表中的记录,保留左右两表中所有的记录,不满足连接条件的均被置为null。

当然,oracle可以直接使用full join来完成全连接,而mysql则需要借助union。

例如:

select student.st_id,student.st_name,score.subject,score.grade 
from student left join score on student.st_id=score.st_id
union
select student.st_id,student.st_name,score.subject,score.grade 
from student right join score on student.st_id=score.st_id;

执行结果:

可以看到,已经取出了两个表中的所有数据。


六、获取交集以外的部分

按照关联字段取出两个表中的记录,保留交集以外的数据。去除交集相当于全连接-内连接。

例如:

select student.st_id,student.st_name,score.subject,score.grade 
from student left join score on student.st_id=score.st_id 
where score.st_id is null
union
select student.st_id,student.st_name,score.subject,score.grade 
from student right join score on student.st_id=score.st_id 
where student.st_id is null;

执行结果:

第一条数据属于student表,第二条数据属于score表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Mysql】图解左、右、内与全连接 的相关文章

  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • MySQL小写自动转换

    我有多个在数据库表中写入数据的 Web 服务 我想针对特定字段自动将大写字符串转换为小写字符串 mysql 有没有执行此任务的函数 假设这是表 id name language 有时 在语言字段内 Web 服务会写入大写字符串 IT 我想直
  • 如何使用php在mysql数据库中添加照片? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对 PH
  • 如何检查一个值是否已经存在以避免重复?

    我有一个 URL 表 但我不想要任何重复的 URL 如何使用 PHP MySQL 检查给定 URL 是否已在表中 如果您不想重复 可以执行以下操作 添加唯一性约束 use REPLACE http dev mysql com doc ref
  • PHP:如何检查总数。 URL 中的参数?

    我正在使用 REQUEST 检索参数 有没有办法找到总数 URL 中的参数 而不是检索每个参数然后进行计数 这将为您提供总数 分隔的 URL 查询参数 count explode SERVER QUERY STRING 如果您只想要唯一的参
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 如何在 Laravel 5 中使用 Orchestral/Tenanti 构建具有多个数据库的多租户应用程序?

    我正在尝试使用 Laravel 5 构建和应用程序 它应该是使用多个数据库的多租户数据库架构 我的雇主出于安全目的要求这样做 我尝试手动管理主数据库迁移和租户迁移 但失败了 所以我决定借助 Laravel 特定包的帮助 这应该是我所需要的
  • 使用 try {} catch {} 与 if {} else {} 相比有何优势

    我正在从 php 中的普通 mysql 切换到 PDO 并且我注意到测试错误的常见方法是使用 try catch 组合而不是 if else 组合 该方法的优点是什么 我可以使用一个 try catch 块而不是多个嵌套的 if else
  • 从 CSV 到 MySQL 的换行问题

    我正在将 csv 文件导入 MySQL 除了文件中的换行符之外 一切正常 我的 csv 行之一如下所示 42 E A R Classic Earplugs ear images ear classic jpg 5 Proven size s
  • 连接两个表而不返回不需要的行

    我的表结构如下所示 tbl users tbl issues userid real name issueid assignedid creatorid 1 test 1 1 1 1 2 test 2 2 1
  • MySQL InnoDB引擎是否对只读事务运行任何性能优化

    根据参考文档 只读事务标志可能会提示存储引擎运行一些优化 设置会话事务只读 如果事务访问模式设置为 READ ONLY 则对表进行更改 被禁止 这可能使存储引擎能够提高性能 不允许写入时可能进行的改进 InnoDB引擎是否对只读事务运行这样
  • MySQL - 查找接近的匹配项

    MySQL 有没有办法在文本字段中找到紧密匹配的内容 说找到 email protected cdn cgi l email protection当搜索时 email protected cdn cgi l email protection
  • “create_date”时间戳字段的默认值无效

    我有以下 sql 创建语句 mysql gt CREATE TABLE IF NOT EXISTS erp je menus gt id INT 11 NOT NULL AUTO INCREMENT gt name VARCHAR 100
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • 蟒蛇 | MySQL | AttributeError:模块“mysql.connector”没有属性“connect”

    我正在学习 python 中的一个新库 mysql 我尝试执行以下命令 import mysql connector mydb mysql connector connect host localhost user root passwd
  • 如何修复“未知变量'sql-mode = ANSI'”?

    使用 MySQL 5 5 27 在 my cnf 中我有 mysql sql mode ANSI 启动 mysql 控制台后我得到 unknown variable sql mode TRADITIONAL MySQL 文档服务器 SQL
  • 批处理文件并与数据库比较

    目前我正在开发一个 Spring Boot 应用程序 该应用程序定期尝试处理包含用户数据的文件 其中每行都包含userId and departamentId隔开 例如123534 13 该文件将包含数百万条记录 我的要求是以这样的方式将此
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • games101 Lecture 9 线性插值(对三角形内部的线性插值)

    重心坐标 当 alpha beta gamma
  • SonarQube白盒静态代码专家解决方案

    中国区官网 http www safetesting cn 西安青穗 http www safetesting cn 是瑞士SonarSource公司正式授权的中国渠道商和技术服务提供商 技术服务团队有多年行业经验的业界专家 咨询顾问组成
  • bi工程师面试题_【BI 大数据分析】职业规划 之横纵拓展

    这章有以下内容展示 技术需求与更新方面 挖深后需要了解的方面有那些 关于Linux系统 它在BI大数据分析框架是用来干什么 扮演什么角色 关于SQL编写 Q1 它在BI大数据分析框架是用来干什么 扮演什么角色 Q2 什么时候要用到SQL Q
  • YOLOv5-6.x源码分析(四)---- 模型搭建之yolo.py

    文章目录 前引 YOLOv5 6 x源码分析 四 yolo py 1 导入需要的包 2 parse model 2 1 获取对应参数 2 2 搭建网络的准备 2 3 更新args 计算c2 2 4 使用当前层的参数搭建当前层 2 5 打印并
  • Java在pdf文件中加入文字或图片

    pom 导入itextpdf 依赖
  • Python 印章代码(附有解析)

    1 题目 2 代码 共有n种图案的印章 每种图案的出现概率相同 小A买了m张印章 求小A集齐n种印章的概率 n m map int input split dp 0 for i in range n 1 for j in range m 1
  • 如何用计算机测试交易系统,一种自动售票机交易功能的测试系统和方法与流程...

    本发明涉及一种自动售票机检测领域 尤其是涉及一种自动售票机交易功能的测试系统和方法 背景技术 轨道交通的自动售票机 TVM 在接入线网投用之前 必须进行功能测试 以确保功能完备 交易完整 正常使用 目前的测试方法是通过人工购买车票的方法来测
  • Spring MVC如何进行数据校验呢?

    转自 Spring MVC如何进行数据校验呢 在web开发中 我们需要保证用户输入的合法性 那么SpringMVC中如何保证web 应用的合法性呢 下文将一一道来 如下所示 下文只讲述SpringMVC后端的验证方法 前端验证 由用户自身采
  • 独立按键(多个按键)控制LED移位

    这个代码设置的是两个按键对LED移位 分别是P3 1向右移 P3 0向左移 include
  • pycharm错Error updating package list: connect timed out误:解决(更换镜像源)

    问题 可能是网络问题 导致无法加载 报错 Error updating package list connect timed out 解决 File setting project interpreter 加号 manage reposit
  • vmware+CentOS5.0上安装oracle 10g数据库

    一 针对 Oracle 配置 Linux Linux 软件现已安装完毕 您需要针对 Oracle 对其进行配置 本部分将逐步讲解针对 Oracle 数据库 10g 配置 Linux 的过程 验证系统要求 要验证系统是否满足 Oracle 1
  • Docker简介以及安装使用(一)

    疫情下的上海 按下了暂停键 期待早日重回繁华 上海加油 文章目录 Docker简介 Docker的出现 Docker的优点 Docker的局限性 Docker架构 Docker的安装 Docker简介 Docker 是一个开源的应用容器引擎
  • 反馈判断方法

    负反馈放大器可组合成四种类型 即 电流串联 电流并联 电压串联 电压并联四种负反馈类型 正负反馈的判断 正负反馈的判断使用瞬时极性法 瞬时极性是一种假设的状态 它假设在放大电路的输入端引入一瞬时增加的信号 这个信号通过放大电路和反馈回路回到
  • 设计模式--Template模式 VS Strategy模式

    Template 模式和Strategy模式所要解决的问题类似 而且通常可以互换使用 Template模式使用继承来解决问题 Strategy模式使用委托来解决问题 如图1 template 模式 基类 BubbleSorter实现了通用算
  • 钉钉小程序头像剪切并压缩上传

    引入方式 json文件 usingComponents dd cropper components dd cropper dd cropper axml
  • 个人支付接口

    分享个人可以用的支付接口 用来实现收款实时回调 不用企业资质 不用签约 很方便 1 接口地址 请求地址 https www gogozhifu com shop api createOrder 2 注意事项 数据编码统一为utf 8 Req
  • 仿滴滴打车百度地图定位查找附近出租车或门店信息

    随着技术的发展 开发的复杂度也越来越高 传统开发方式将一个系统做成了整块应用 经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改 造成牵一发而动全身 通过组件化开发 可以有效实现单独开发 单独维护 而且他们之间可以
  • 前置++与后置++区别 以及效率

    之前在杭州实习面试中科视拓时候面试官问道 前置 与后置 区别 以及效率 打破对C 的认识 后来 寒假回来看书后才恍然大悟 前置 和后置 的区别 C专家编程 中有如下描述 P276 人民邮电出版社 a表示取a的地址 增加它的内容 然后把值放在
  • 2021-Linux系统与管理 - (二)Linux系统命令【超详细】

    自说 Linux命令 Linux命令行的格式 Linux系统的基本命令 自说 学习Linux必定要学习的就是命令了 凡事都是一步一个脚印 这样才踏实 呢么在学习Linux这条道上 我们更加要循序渐进 先学会走再勇往直前 以下便是Linux命
  • 【Mysql】图解左、右、内与全连接

    一 前言 使用学生表与成绩表来演示Mysql中的各种连接查找 学生表的建表语句如下 CREATE TABLE student id int 11 NOT NULL AUTO INCREMENT COMMENT 自增序号 st id int