Mysql表关联简单介绍(inner join、left join、right join、full join不支持、笛卡尔积)

文章目录

  • 0. 交集、并集、差集含义说明
  • 1. 简单演示上图七种情况
    • 0. A、B表数据准备
    • 1. left outer join 简称 left join 左表所有数据,右表关联数据,没有的以null填充
    • 2. right outer join 简称 right join,右表所有数据,左表关联数据,没有的以null填充
    • 3. inner join 简称 join 交集
    • 4. A left join B where B.key is null,A、B的差集是 A-B = 1
    • 5. B right join where A.key is null,B、A的差集是 B-A = 4
    • 6、7. full outer join 简写为full join(mysql不支持,oracle可以)
  • 2. 笛卡尔积 A * B
    • 1. 不带连接条件的笛卡尔积
    • 2. 带连接条件的笛卡尔积变inner join

在这里插入图片描述

0. 交集、并集、差集含义说明

A 是1、2、3
B是2、3、4
A、B的交集是A∩B = 2、3
A、B的并集是 AUB = 1、2、3、4
A、B的差集是 A-B = 1
B、A的差集是 B-A = 4

1. 简单演示上图七种情况

0. A、B表数据准备

CREATE TABLE `xin_stu_t` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `relation_id` bigint DEFAULT NULL COMMENT '外键, 记录教师id',
  `student_name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `student_age` bigint DEFAULT NULL COMMENT '年龄',
  `school` varchar(300) DEFAULT NULL COMMENT '学校',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `xin_s_relation_id` (`relation_id`),
  KEY `xin_s_student_name` (`student_name`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生表';

CREATE TABLE `xin_teach_t` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `teacher_name` varchar(30) DEFAULT NULL COMMENT '教师姓名',
  `teacher_age` bigint DEFAULT NULL COMMENT '教师年龄',
  `school` varchar(300) DEFAULT NULL COMMENT '学校',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='教师表';

INSERT INTO lelele.xin_stu_t (relation_id,student_name,student_age,school) VALUES
	 (NULL,'尤仁义1',11,'徐州中学'),
	 (1,'尤仁义2',12,'徐州中学'),
	 (NULL,'朱有理1',11,'徐州中学'),
	 (2,'朱有理2',12,'徐州中学'),
	 (2,'朱有理3',13,'徐州中学'),
	 (3,'宋昆明1',11,'徐州中学'),
	 (3,'宋昆明2',12,'徐州中学'),
	 (9,'宋昆明3',13,'徐州中学');

INSERT INTO lelele.xin_teach_t (teacher_name,teacher_age,school) VALUES
	 ('王翠花1',31,'徐州中学'),
	 ('王翠花2',31,'徐州中学'),
	 ('王翠花3',33,'徐州中学'),
	 ('王翠花4',34,'徐州中学'),
	 ('王翠花5',35,'徐州中学');
	 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1. left outer join 简称 left join 左表所有数据,右表关联数据,没有的以null填充

select A.*,B.* from xin_stu_t A left join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

select A.*,B.* from xin_stu_t A left outer join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

2. right outer join 简称 right join,右表所有数据,左表关联数据,没有的以null填充

select A.*,B.* from xin_stu_t A right join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

select A.*,B.* from xin_stu_t A right outer join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

3. inner join 简称 join 交集

select A.*,B.* from xin_stu_t A inner join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

select A.*,B.* from xin_stu_t A join xin_teach_t B on A.relation_id = B.id

在这里插入图片描述

4. A left join B where B.key is null,A、B的差集是 A-B = 1

 select A.*,B.* from xin_stu_t A left join xin_teach_t B on A.relation_id = B.id where B.id is null

在这里插入图片描述

5. B right join where A.key is null,B、A的差集是 B-A = 4

select A.*,B.* from xin_stu_t A right join xin_teach_t B on A.relation_id = B.id where A.id is null

在这里插入图片描述

6、7. full outer join 简写为full join(mysql不支持,oracle可以)

在这里插入图片描述

2. 笛卡尔积 A * B

1. 不带连接条件的笛卡尔积

select A.*,B.* from xin_stu_t A, xin_teach_t B

在这里插入图片描述
在这里插入图片描述

2. 带连接条件的笛卡尔积变inner join

select A.*,B.* from xin_stu_t A, xin_teach_t B where A.relation_id = B.id

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试json入参,不同类型参数格式书写

接口json入参,不同类型参数格式 1、String 入参:A(String),B(String) 格式:{"A":"值a","B":"值b"} 示例: 接口测试入参这么…

UE 5 实现骨骼物理模拟 乳摇

打开角色的物理资产,如果是下载的或者官方的模型,都会内带物理资产 模拟 可以根据分块模拟当前物体的物理效果 点击右上角的模拟,可以模拟布娃娃系统 Ctrl鼠标右键可以实现对布娃娃施加力的效果。 模拟选中项 模拟选中项可以只模拟一部…

为什么聊天头像ChatGPT是橙色的?

目录 ChatGPT的不同版本及其颜色 了解绿色和橙色的ChatGPT徽标 颜色变化的重要性 橙色标志的原因 故障排除和常见问题解答 常见问题3:如何查看ChatGPT的服务器状态? 常见问题4:如果使用ChatGPT时遇到错误,我该怎么办&#…

linux刻录iso到u盘

需要的工具:Linux系统、U盘、ISO镜像文件。 首先在Linux系统中打开终端,使用dd命令,格式如下: sudo dd ifxxx.iso of/dev/sdb 命令中xxx.iso是你的ISO镜像文件的路径,of后面的你的U盘路径,一般就是/dev/sdb…

说说FLINK细粒度滑动窗口如何处理

分析&回答 Flink的窗口机制是其底层核心之一,也是高效流处理的关键。Flink窗口分配的基类是WindowAssigner抽象类,下面的类图示出了Flink能够提供的所有窗口类型。 Flink窗口分为滚动(tumbling)、滑动(sliding&am…

unity界面上Global 与Local xyz- right up forward

gloabal 如果要沿这个方向移动就比较困难 local下就不一样了

对于需要进行商品价格监控的企业来说,使用淘宝API是一种有效的途径

淘宝是一个广泛使用的在线购物平台,其API可以用于获取各种商品的价格数据。对于需要进行商品价格监控的企业来说,使用淘宝API是一种有效的途径。 以下是使用淘宝API进行商品价格监控的几个步骤: 获取API密钥 在使用淘宝API之前&#xff0c…

Springboot 接口方式硬通知实现 动态刷新配置值,@ConfigurationProperties 、@Value 都可以

前言 看到这个文章标题,也许有的看官就觉得很多余, 因为Nacos 可以设置 NacosValue(value "${XXX}",autoRefreshed true) 实现动态刷新; 又因为cloud config的RefreshScope 实现动态刷新; 还有阿波罗...等 这…

【C++】VS配置OpenCV/Libtorch环境

前言 本文是视频https://www.bilibili.com/video/BV1dp4y177L4的笔记。 OpenCV和Libtorch安装包:https://pan.baidu.com/s/1i3DqTcHFSC1rRDsIgYGCsQ?pwd8888 VS版本:2019 Opencv版本:3.4.1 Libtorch版本:2.0.1cu117 配置Open…

TCP之三次握手四次挥手

在前面的文章中我们了解到http是基于TCP/IP协议的,这篇文章我们来了解一下TCP/IP。 一、TCP与UDP 1、UDP 基于非连接。类似于写信,不能保证对方能不能接收到,接收到的内容是否完整,顺序是否正确。 优缺点:性能损耗小…

el-select实现懒加载

先看一个线上的演示示例:https://code.juejin.cn/pen/7273352811440504889 背景 我们在实际开发中经常遇到这样的需求: el-select实现懒加载,用通俗的话说,为了增加响应速度,就是初始下拉只展示50条数据&#xff0c…

excel 分组排序

excel中会遇到对不同分组数据进行排序,比如对于不同班级里的学生按照分数高低进行升序排序,可以采用如下公式 SUMPRODUCT((A$2:A$12A2)*(C$2:C$12>C2))1 如果需要 进行降序排序,将公式中的大于号替换为小于号即可

Unity UI与粒子 层级问题Camera depth Sorting Layer Order in Layer RenderQueue

Unity游戏开发中,模型、界面、特效等,需要规划好layer的概念,涉及到摄像机(Camera)、画布(Canvas)、Shader等相关内容。 在 Unity 中,渲染顺序是由多个因素共同决定的,大…

【暴力DP】2021 icpc上海 I

Problem - I - Codeforces 题意: 思路: 考虑暴力DP即可 设 dp[i][j][k]表示 前 i 个物品,已经翻倍了 j 次,A点数 - B点数为 k 的最大价值和 然后分为这6种决策分类讨论就好了 注意数组里不能有负数,要加个偏移量 P…

百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载

8月31日,文心一言率先向全社会全面开放。广大用户可以在应用商店下载“文心一言APP”或登陆“文心一言官网”(https://yiyan.baidu.com) 体验。同时,企业用户可以直接登录百度智能云千帆大模型平台官网,调用文心一言能…

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana,默认的话是https协议的,这里写一个使用http…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

面试官如何考察与CAP相关的理论?

在互联网技术面试中,考察分布式技术已经是面试的标配了。很多招聘信息中,你能发现,一线互联网公司在对候选人的要求中都有“分布式系统设计”这一关键词。无论你是程序员,还是架构师,都要掌握分布式系统设计。 案例背…

vue使用打印组件print-js

项目场景&#xff1a; 由于甲方要求&#xff0c;项目需要打印二维码标签&#xff0c;故开发此功能 开发流程 安装包&#xff1a;npm install print-js --saveprint-js的使用 <template><div id"print" ref"print" ><p>打印内容<p&…