MySQL 的等值连接、交叉连接、左外连接 、右外连接、全外连接实例

article/2025/10/6 11:54:02

1. 测试数据

测试数据如下所示,数据库脚本(含数据)在文章最后的附录中给出。

测试工具:MySQL8.0 , Navicat Premium。

首先是一个班级表:class,class表中的数据如下所示。

学生表: student,student表中的数据如下所示。

2. 等值连接

class表 和 student表 进行 基于classID 属性的等值连接,SQL 语句如下。

SELECT student.stuID, class.className
FROM student INNER JOIN class ON student.classID = class.classID;

等值连接结果如下所示:

3. 交叉连接

两个表的交叉连接就是这两个表的笛卡尔积,SQL 语句如下。

SELECT student.stuID, class.className
FROM student JOIN class;

结果如下所示:

                  

4. 左外连接

结果表中包含“左表”的全部记录,右表中不存在的数据用NULL来代替,student是“左表”,SQL 语句如下。

SELECT student.stuID, class.className
FROM student LEFT JOIN class ON student.classID = class.classID;

结果如下所示:

5. 右外连接

结果表中包含“右表”的全部记录,左表中不存在的数据用NULL来代替,class是“右表”,SQL 语句如下。

SELECT student.stuID, class.className
FROM student RIGHT JOIN class ON student.classID = class.classID;

结果如下所示:

 6. 全外连接

MySQL中不支持全外连接,测试SQL语句如下。

SELECT *
FROM student FULL JOIN class;

结果如图所示,这显然不是全外连接,是全连接。

 

可以通过 UNION 左外连接 和 右外连接来实现 全外连接,SQL语句如下。

SELECT *
FROM student LEFT JOIN class ON student.classID = class.classID
UNION
SELECT *
FROM student RIGHT JOIN class ON student.classID = class.classID;

                   

附录:

/*
Navicat MySQL Data TransferSource Server         : mybatis
Source Server Version : 80011
Source Host           : localhost:3306
Source Database       : schoolTarget Server Type    : MYSQL
Target Server Version : 80011
File Encoding         : 65001Date: 2019-04-09 21:48:15
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (`classID` varchar(25) NOT NULL,`className` varchar(25) NOT NULL,`classTeacher` varchar(25) DEFAULT NULL,PRIMARY KEY (`classID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('1', 'classname1', 'teacher1');
INSERT INTO `class` VALUES ('2', 'classname2', 'teacher2');
INSERT INTO `class` VALUES ('3', 'classname3', null);
INSERT INTO `class` VALUES ('5', 'classname5', null);-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`stuID` varchar(25) NOT NULL,`stuName` varchar(25) NOT NULL,`classID` varchar(25) NOT NULL,PRIMARY KEY (`stuID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '1', '1');
INSERT INTO `student` VALUES ('2', '2', '1');
INSERT INTO `student` VALUES ('3', '3', '2');
INSERT INTO `student` VALUES ('4', '4', '4');
INSERT INTO `student` VALUES ('5', '5', '3');

 


http://chatgpt.dhexx.cn/article/iMkMTgMl.shtml

相关文章

数据库学习之MySQL (十六)—— SQL99 外连接 左外连接 右外连接 全外连接 交叉连接

文章目录 外连接 之 左外连接 与 右外连接为啥要用外连接全外连接总结 内连接 外连接交叉连接 外连接 之 左外连接 与 右外连接 我们先来看个之前的 女神男朋友的案例 传送:数据库学习之MySQL (十三)——多表查询 SQL92 SQL99 连接种类划分 我们先考虑…

ORACLE的左右连接,全外连接

先上概念 oracle连接分为: 左外连接:左表不加限制,保留左表的数据,匹配右表,右表没有匹配到的行中的列显示为null。 右外连接:右表不加限制,保留右表的数据。匹配左表,左表没有匹配…

SQL的内连接、左连接、右连接、 交叉连接、全外连接

sql表连接分成 外连接 、 内连接 和 交叉连接。. 外连接包括三种,分别是左外连接、右外连接、全外连接。. 对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,通常我们都省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。. 在左、右外连接中都会以一种表为基表,基表的所有行、…

Mysql中实现全外连接

MySql中多表查询只提供了内连接,左外连接与右外连接: table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr 1】INNER JOIN ON内连接(只写join时默认为内连接) SELECT * FROM emp e…

mysql 全外连接报错的原因

mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left right union right 代替。 全外连接图(非原创图) 下面的是全外连接例子: select * from table a A(A为别名)LEFT JOIN table b B …

Oracle:左连接、右连接、全外连接、(+)号详解

目录 Oracle 左连接、右连接、全外连接、()号详解 1、左外连接(LEFT OUTER JOIN/ LEFT JOIN) 2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 3、全外连接(FULL OUTER JOIN/FULL JOIN&#xff0…

全外连接给你讲

你知道的越多,你不知道的就越多 先来看看标准SQL里面定义的外连接的三种类型: 左外连接右外连接全外连接 其中,左外连接和右外连接没有本质的区别,用作主表的表写在运算符左侧就是左外连接,卸载运算符右侧就是右外连接…

SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

前言 开始之前,我们先来看这样一个提问: python初学者,请教python学习路径 相信看完 X_AirDu 的回答我们已经对 Python 有了一个大概的了解。那接下来就让我们更深入的了解 Python 吧~ Python 入门 [零基础学Python]一些关于Python的事情 已经…

产品读书《金字塔原理》

PPT参考 1PPT参考2 其实我读这本书并不是把它当作一本读物来读,反倒觉得像是一本工具书,全书的内容可能干货不多,总结出来就是“金字塔”,倒没什么其他,再多也就是一些案例!但是这个思想已经能让人俯首称赞…

转载-代码的马斯洛金字塔

从科技爱好者周刊(第 156 期):显卡缺货与异业竞争看到的关于代码的马斯洛金字塔这种说法;搬运过来方便自己随时阅读; 原文是代码的马斯洛金字塔; 内容如下: As in Maslow’s pyramid, each laye…

需求挖掘:产品经理怎么基于项目做需求挖掘

零、需求分析的背景 日常工作中,我们常常面临别人提过来的需求要不要做,如何去挖掘新的需求、衡量需求的投入产出比等相应的场景,这些场景都涉及到我们对需求的分析和挖掘,也就意味着我们需要掌握足够多的认知和方法论去对指定的需…

如何思考总结,并如何写文档展示. 结构化思考, 金字塔思维

先看三张图: 术语: 交叉表, 是人分类能力提升的一个标志. (对问题思考可以分类到多个维度,并了解维度之间的层级关系,哪个更主要,哪个是次要) 该图的是最简单的整理表格. 进一步复杂的在数据分析上有专门的术语: 叫做交叉表 找不到了 1.上线前 道: 法(制度): 术…

程序员应了解:知识技能金字塔

这是我的开篇文章!! 如今计算机非常火热,尤其是程序员(软件开发)更是大众眼中高工资的代表。 而新的编程语言和技术框架等更新迭代速度可以说是360行中最快之一,一般来说程序员知识半衰期是五年&#xff0…

需求

什么是需求 定义 需求是满足某类用户的某种欲望或解决某些问题时所产生的现象。工具类App的出现就是为了解决用户的某些问题。比如印象笔记,解决了用户记录事物,并整理笔记的需求;番茄todo解决拖延症人群效率低下,办事无条理的问题…

经济学金字塔

2.9.3.1 经济学金字塔 此章节我们将根据广义动量定理与系统思考建立起经济学金字塔的模型。经济学金字塔包含4个层级的均衡。第一层级是两个单一市场的均衡,分别为商品市场的均衡和货币市场的均衡。第二层级是两市场的均衡,即商品市场和货币市场共同达到…

【博学谷学习记录】超强总结,用心分享|产品经理需求分析方法简析

为什么要进行需求分析? 作为产品经理,每天要接触到大大小小不同的需求,在面对需求时,需要进行有效的需求分析,才能更好地了解问题,从而制定相应的解决方案,就是通过用户的问题,找到…

29. 人类将如何变革--走出金字塔模型(上)

作者 | Harper 审核 | gongyouliu 编辑 | auroral-L 人工智能,将改变全世界各行各业的现有工作方式,商业模式以及相关的经济结构,那么人类应该如何应对呢?最最基本的一点,当人工智能开始大规模取代人类工作者的时候&am…

基于空间金字塔网络的光流估计

Optical Flow Estimation using a Spatial Pyramid Network 我们学习通过结合经典的空间金字塔公式和深度学习来计算光流。通过当前流量估计和计算流量更新,在每个金字塔级别扭曲一对图像,通过从粗到细的方法估计大型运动。我们不是在每个金字塔层上对目…

《金字塔原理》读书笔记

0 前言 《金字塔原理》基本是每一位职场人的必修书目,在实习期间也是leader和师兄的强力推荐,在工作的软能力上提升自己。”想清楚,说明白,知道说什么、怎么说“,是我们希望达到的境界。我们在与人沟通时,需…

《腾讯数字生活报告2019》发布,互联网时代新马斯洛需求金字塔预示什么?

来源:腾讯研究院 5月22日,腾讯研究院、腾讯应用宝、腾讯开放平台联合出品的《腾讯数字生活报告2019》在腾讯全球数字生态大会应用生态主题论坛上发布,报告从生存、关系、发展三个层级解读了大众数字生活版图中的新趋势及核心洞察。透过这份数…