当前位置: 首页 > news >正文

MySQL入门篇-MySQL表连接小结

备注:测试数据库版本为MySQL 8.0

这个blog我们来聊聊常见的表连接的方法

测试数据:

create table t1(id int);
create table t2(id int);insert into t1 values(1);
insert into t1 values(2);insert into t2 values(2);
insert into t2 values(3);
commit;

内连接 --求交集

image.png

select t1.id,t2.id id2
from t1
inner join t2on t1.id = t2.id;
--或者
select t1.id,t2.id id2
from t1,t2
where t1.id = t2.id;

 

mysql> select t1.id,t2.id id2-> from t1-> inner join t2->      on t1.id = t2.id;
+------+------+
| id   | id2  |
+------+------+
|    2 |    2 |
+------+------+
1 row in set (0.01 sec)mysql> select t1.id,t2.id id2-> from t1,t2-> where t1.id = t2.id;
+------+------+
| id   | id2  |
+------+------+
|    2 |    2 |
+------+------+
1 row in set (0.00 sec)

左连接 --求A的全部

image.png

select t1.id,t2.id id2
from t1
left join t2on t1.id = t2.id;
mysql> select t1.id,t2.id id2-> from t1-> left join t2->   on t1.id = t2.id;
+------+------+
| id   | id2  |
+------+------+
|    2 |    2 |
|    1 | NULL |
+------+------+
2 rows in set (0.00 sec)

左连接 --实现A-B的差集

image.png

select t1.id,t2.id id2
from t1
left join t2on t1.id = t2.id
where t2.id is null;
mysql> select t1.id,t2.id id2-> from t1-> left join t2->   on t1.id = t2.id-> where t2.id is null;
+------+------+
| id   | id2  |
+------+------+
|    1 | NULL |
+------+------+
1 row in set (0.00 sec)

全连接 – A union B 求合集

image.png 

oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。

select t1.id id1,t2.id id2
from t1
left join t2
on t1.id = t2.id
union
select t1.id id1,t2.id id2
from t1
right join t2
on t1.id = t2.id
mysql> select t1.id id1,t2.id id2-> from t1-> left join t2-> on t1.id = t2.id-> union-> select t1.id id1,t2.id id2-> from t1-> right join t2-> on t1.id = t2.id;
+------+------+
| id1  | id2  |
+------+------+
|    2 |    2 |
|    1 | NULL |
| NULL |    3 |
+------+------+
3 rows in set (0.00 sec)

全连接实现-去交集 

image.png

select t1.id id1,t2.id id2
from t1
left join t2
on t1.id = t2.id
where t2.id is null
union
select t1.id id1,t2.id id2
from t1
right join t2
on t1.id = t2.id
where t1.id is null;
mysql> select t1.id id1,t2.id id2-> from t1-> left join t2-> on t1.id = t2.id-> where t2.id is null-> union-> select t1.id id1,t2.id id2-> from t1-> right join t2-> on t1.id = t2.id-> where t1.id is null;
+------+------+
| id1  | id2  |
+------+------+
|    1 | NULL |
| NULL |    3 |
+------+------+
2 rows in set (0.00 sec)

右连接实现-B-A 求差集 

image.png 

select t1.id,t2.id id2
from t1
right join t2on t1.id = t2.id
where t1.id is null;
mysql> select t1.id,t2.id id2-> from t1-> right join t2->   on t1.id = t2.id-> where t1.id is null;
+------+------+
| id   | id2  |
+------+------+
| NULL |    3 |
+------+------+
1 row in set (0.00 sec)

右连接 --求B的全部 

image.png

select t1.id,t2.id id2
from t1
right join t2on t1.id = t2.id;
mysql> select t1.id,t2.id id2-> from t1-> right join t2->  on t1.id = t2.id;
+------+------+
| id   | id2  |
+------+------+
|    2 |    2 |
| NULL |    3 |
+------+------+
2 rows in set (0.00 sec)

表的笛卡尔积

如果表连接没有带条件,则会产生笛卡尔积
假设A表和B表都是10条记录,且一一对应,这个时候A、B两个表无关联条件下的查询,会产生10*10 100条数据。
笛卡尔积在开发中,大多数时候都是不可取的,严重的影响性能,我就优化过不写表关联条件再来distinct去重的开发写的sql。

今天我们来讲讲一个笛卡尔积的例子。

测试数据:
 

create table test1(c  varchar(200));
insert into test1 values('中国');
insert into test1 values('美国');
insert into test1 values('日本');
insert into test1 values('韩国');
commit;

现在有4个国家要进行比赛,每个国家都要和除了自己之外的另外3个国家进行比赛,这个sql如何写?

--通过表连接构造一个笛卡尔积
select t1.c c1,t2.c c2
from test1 t1,test1 t2
where 1 = 1
order by t1.c,t2.c;
--去掉自己和自己的
select t1.c c1,t2.c c2
from test1 t1,test1 t2
where t1.c != t2.c
order by t1.c,t2.c;
mysql> select t1.c c1,t2.c c2-> from test1 t1,test1 t2-> where 1 = 1-> order by t1.c,t2.c;
+--------+--------+
| c1     | c2     |
+--------+--------+
| 中国   | 中国   |
| 中国   | 日本   |
| 中国   | 美国   |
| 中国   | 韩国   |
| 日本   | 中国   |
| 日本   | 日本   |
| 日本   | 美国   |
| 日本   | 韩国   |
| 美国   | 中国   |
| 美国   | 日本   |
| 美国   | 美国   |
| 美国   | 韩国   |
| 韩国   | 中国   |
| 韩国   | 日本   |
| 韩国   | 美国   |
| 韩国   | 韩国   |
+--------+--------+
16 rows in set (0.00 sec)mysql> select t1.c c1,t2.c c2-> from test1 t1,test1 t2-> where t1.c != t2.c-> order by t1.c,t2.c;
+--------+--------+
| c1     | c2     |
+--------+--------+
| 中国   | 日本   |
| 中国   | 美国   |
| 中国   | 韩国   |
| 日本   | 中国   |
| 日本   | 美国   |
| 日本   | 韩国   |
| 美国   | 中国   |
| 美国   | 日本   |
| 美国   | 韩国   |
| 韩国   | 中国   |
| 韩国   | 日本   |
| 韩国   | 美国   |
+--------+--------+
12 rows in set (0.00 sec)

 

相关文章:

MySQL入门篇-MySQL表连接小结

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊常见的表连接的方法 测试数据: create table t1(id int); create table t2(id int);insert into t1 values(1); insert into t1 values(2);insert into t2 values(2); insert into t2 values(3); commit;内连接 --求交集 …...

使用纹理(Textures)

当物体表面并非是纯色的时候,比如带波点,斑纹或者表面有刮痕或被裂纹等,这些效果该如何实现呢? 这里我们需要提到一个概念是贴图(Maps)。Maps是覆盖在游戏物体上的2D图片,用来设置表面的颜色、s…...

android 11 添加开机铃声

需求:在11.0在定制化系统中,默认是没有开机铃声的,有客户提出需要要添加开机铃声,所以为了完成需求,就来实现这一个功能关于开机铃声 都是在bootanimation_main.cpp 这里面负责管理。添加添加开机铃声的核心类framewor…...

操作系统考试突击复习笔记

0 基础概念补充特权命令:有特殊权限的指令,比如清内存、置时钟、分配系统资源、修改虚拟内存的段表和页表,修改用户的访问权限。系统调用:操作系统为应用程序提供的使用接口,可以理解为一种可供应用程序调用的特殊函数…...

java8函数式接口分布式事务简单实现方式

import java.util.List; import java.util.function.Function;/*** @ClassName TransactionFunctionDTO* @Description* @Author SD.LIU* @Date 2023/2/13 22:41* @Version 1.0**/ public class TransactionFunctionDTO...

最后一个单词的长度-力扣58-java

一、题目描述给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s "Hello World"输出&#x…...

Java开发学习(四十九)----MyBatisPlus更新语句之乐观锁

1、概念 在讲解乐观锁之前,我们还是先来分析下问题: 业务并发现象带来的问题:秒杀 假如有100个商品或者票在出售,为了能保证每个商品或者票只能被一个人购买,如何保证不会出现超买或者重复卖 对于这一类问题,其实有很多的解决方…...

力扣SQL刷题11

目录标题1194. 锦标赛优胜者--做出来了1225. 报告系统状态的连续日期-勉强1159. 市场分析 II1205. 每月交易II1194. 锦标赛优胜者–做出来了 题型:看题 解答:先处理matches表,整出分数列和players表连接 注意点: union all 时…...

Fluent Python 笔记 第 9 章 符合 Python 风格的对象

得益于 Python 数据模型,自定义类型的行为可以像内置类型那样自然。实现如此自然的行为,靠的不是继承,而是鸭子类型(duck typing):我们只需按照预定行为实现对象所需的方法即可。 9.1 对象表示形式 实现 __repr__ 和 __str__ 特…...

档案管理数字化,成功的领导者,往往只问这3个问题

随着数字经济时代的到来,信息技术的更迭演进,逐渐改变了企业的办公业务流程,传统的办公业务模式已不能满足当前的企业业务需求。数字化转型成为当下企业的必选项。随着公司部门架构的日益复杂,流程繁多,产生海量的企业…...

自学软件测试从哪里开始?给还在迷茫的人一条出路

这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。当然&a…...

配置MyBatis Plus 的分页查询功能

配置MyBatis Plus 的分页查询功能一. 回顾Mysql分页查询二. 配置MyBatis Plus 分页功能2.1 定义分页拦截器2.2 进行分页查询 selectPage()三. 开启MyBatis Plus的运行日志一. 回顾Mysql分页查询 limit 是MySQL当中特有的!其他数据库没有!不通用&#xf…...

Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)

插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。 1、特点说明 所…...

从react源码看hooks的原理

React暴露出来的部分Hooks //packages/react/src/React.js export {...useCallback,useContext,useEffect,useLayoutEffect,useMemo,useReducer,useRef,useState,... }功能描述 useState、useReducer: 状态值相关useEffect、useLayoutEffect: 生命周期相关useContext: 状态共…...

空间尺寸对迭代次数的影响

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) ( A, B )---4*30*2---( 1, 0 )( 0, 1 ) 做4个训练集尺寸分别为3行3列,3行4列,4行3列和2行4列的网络。简写为3*3,3*4,4*3,2*4. 保持这4个网络差值结构的形态一致,…...

mininet+flowvisor+floodlight实现网络切片功能

ininetflowvisorfloodlight实现网络切片功能 这个项目所使用的软件flowvisor 和floodlight 都已经过时了网上能找到的资料太少了,整个项目搭建过程中遇到的坑太多了。花了大量的的时间。 有什么问题可提出来,如果我会的话一定会耐心解答的 此项目主要采…...

【C++】十分钟带你入门C++

目录零 内容概括一 C关键字二 命名空间2.1 命名空间定义2.2 命名空间的使用三 C输入和输出四 缺省参数4.1 缺省参数的概念4.2 缺省参数分类五 函数重载5.1 函数重载的概念六 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 使用场景6.5 效率比较6.6 引用和指针的区别七 内联函数7.…...

kettle利用excel文件增量同步一个库的数据(多表一次增量同步)

利用excel文件增量同步一个库的数据 现在有sqlserver和mysql两个库上的表在进行同步,mysql上的是源表,sqlserver上是目标表。 mysql : sqlserver : 可以看到sqlserver上表的最近一次同步日期分别是 pep表: 2022-10-23 14:19:00.000 stu_…...

面试题:android中A Activity 打开B Activity,为什么A Activity的onStop()方法最后被调用

如下是一段典型的Activity间切换的日志,从A Activity切换到B Activity:10-17 20:54:42.247: I/com.example.servicetest.AActivity(5817): onCreate() 1166919192 taskID66 10-17 20:54:42.263: I/com.example.servicetest.AActivity(5817): onStart()…...

百度版本gactgpt即将来临,gpt人工智能机器横空出世

百度版本gactgpt即将来临,gpt人工智能机器横空出世,“一言”为定!百度版ChatGPT确认!李彦宏OKR曝光,率先应用于收索业务 gactCBT 大获,当下极有可能成为人工智能的 iPhone 时刻。为了在这场人工智能竞赛中…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...