MYSQL 几种 join

2023-11-15

注意】:Oracle数据库支持full join,mysql是不支持full join的,但仍然可以同过左外连接+ union+右外连接实现

初始化SQL语句:

 
  1. /*join 建表语句*/

  2. drop database if exists test;

  3. create database test;

  4. use test;

  5.  
  6. /* 左表t1*/

  7. drop table if exists t1;

  8. create table t1 (id int not null,name varchar(20));

  9. insert into t1 values (1,'t1a');

  10. insert into t1 values (2,'t1b');

  11. insert into t1 values (3,'t1c');

  12. insert into t1 values (4,'t1d');

  13. insert into t1 values (5,'t1f');

  14.  
  15. /* 右表 t2*/

  16. drop table if exists t1;

  17. create table t2 (id int not null,name varchar(20));

  18. insert into t2 values (2,'t2b');

  19. insert into t2 values (3,'t2c');

  20. insert into t2 values (4,'t2d');

  21. insert into t2 values (5,'t2f');

  22. insert into t2 values (6,'t2a');

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

1、笛卡尔积

两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。

mysql> select * from t1 join t2;
  • 1

这里写图片描述

2、左连接

两表关联,左表全部保留,右表关联不上用null表示。

这里写图片描述

mysql> select * from t1 left join t2 on t1.id = t2.id;
  • 1

这里写图片描述

3、右连接

右表全部保留,左表关联不上的用null表示。

这里写图片描述

mysql> select * from t1 right join t2 on t1.id =t2.id;
  • 1

这里写图片描述

4、内连接

两表关联,保留两表中交集的记录。

这里写图片描述

mysql> select * from t1 inner join t2 on t1.id = t2.id;
  • 1

这里写图片描述

5、左表独有

两表关联,查询左表独有的数据。

这里写图片描述

mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null;
  • 1

这里写图片描述

6、右表独有

两表关联,查询右表独有的数据。

这里写图片描述

mysql> select * from t1 right join t2 on t1.id = t2.id where t1.id is  null;
  • 1

这里写图片描述

7、全连接

两表关联,查询它们的所有记录。

这里写图片描述

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

 
  1. mysql> select * from t1 left join t2 on t1.id = t2.id

  2. -> union

  3. -> select * from t1 right join t2 on t1.id = t2.id;

  • 1
  • 2
  • 3
  • 这里写图片描述

8、并集去交集

两表关联,取并集然后去交集。

这里写图片描述

 
  1. mysql> select * from t1 left join t2 on t1.id = t2.id where t2.id is null

  2. -> union

  3. -> select * from t1 right join t2 on t1.id = t2.id where t1.id is null;

  • 1
  • 2
  • 3

这里写图片描述

SQL的join链接之inner joinfull join - yowukowu的博客

一.定义 Ⅰ.内链接 在表中存在至少一个匹配时,INNER JOIN 关键字返回行。 必须链接字段的值相等,才能返回字段对应的结果。 inner join就是普通的join也等于不使用jo...

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

MYSQL 几种 join 的相关文章

  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • 显示标准化数据

    跟进问题 添加 2 个不同表的总和 https stackoverflow com questions 39717541 adding sum from 2 different tables 我创建了3个表 members videos v
  • MySql - 复制监控工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个主 从 MySql 复制 我正在寻找一个允许我监视复制的工具 查看它没有错误 检查滞后等 我更喜
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • 如何在 MySQL 中求和时间?

    正如您在图片中看到的 我有一份停机报告 显示了所选工厂在选定日期的停机时间 现在我想添加所有的值 Time Duration 列并将其显示在附近的单独显示中 TOTAL TIME DURATION 例如 在图像中 所选日期为 2015 年
  • MySQL“LIKE”搜索不起作用

    我通过 LOAD DATA INFILE 在 MySQL 中导入了一个 txt 数据库 一切似乎都正常 唯一的问题是 如果我使用以下查询在数据库上搜索记录 SELECT FROM hobby WHERE name LIKE Beading
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • mysql 中的二进制、十六进制和八进制值

    我对在 mysql 数据库中使用二进制 十六进制和八进制系统非常感兴趣 首先 请给我一个建议 为什么我们在存储信息时需要它们 因为信息太多 或者为什么 另外 哪种类型的值必须存储在标记系统中 另外这里还有像 这是例子 gt SELECT 5
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何从批量数据中的mysql列中删除所有非数字字符

    我想从列中删除所有非数字字符 我的数据库中有大量数据 目前我正在使用以下链接中描述的方法 http venerableagents wordpress com 2011 01 29 mysql numeric functions http
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主

随机推荐

  • put_user

    Linux设备驱动开发笔记 1 复制链接 0 0 skyily 白手起家 帖子 108 主题 105
  • 分组对列扁平化(列转换行 关系型转换NoSQL)

    前言 关系型数据库要符合第一范式即原子性 因此字段多值情况只能分行处理 如下表 假设keys是terms appl dt 则no predict pay dt actual pay dt 是多值 如果要转换成NoSQL或collection
  • 连续七天登录-在线人数最多

    连续七天登录 select id count from select date add dated rown as startdate from select row number over PARTITION by id order by
  • 随笔篇-多线程世界的来龙去脉

    文章目录 线程 多线程带来的问题 线程的挂起与唤醒 线程的管理 如果看官觉得有点用 点赞一下 鼓励一下我吧 感谢原创的整理 以下是原文作者连接 原文 https zhuanlan zhihu com p 122010626 以下为摘抄概要整
  • JSP数据交互(二)----》浏览器缓存cookie

    学会使用浏览器缓存cookie 生活中的cookie 系统会记录已经浏览过的搜索记录 cookie是Web服务器保存在客户端的一系列文本信息 cook的作用 对特定的对象追踪 实现各种个性化功能 简化登录 安全性能 容易泄露信息 在JSP中
  • Latex 操作(3) beamer(PPT)

    1 新建文件 documentclass 11pt beamer 11pt 是设置的字号大小 usetheme CambridgeUS 排版主题Madrid 在每个section前有一个current显示 放到引言区 在每个section前
  • QT 按键组 - QButtonGroup

    链接 https blog csdn net potato123232 article details 118788209 ops request misc 257B 2522request 255Fid 2522 253A 2522167
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • 过年宅家,学习wxPython,编了个数回(Slither Link)小游戏,踩了好多坑,特记一下

    今年过年真是前所未有的有时间 哪都去不了 于是难得得有时间想学习一下 好多年没编程 没写博客 因为总是编嵌入式的c程序 对界面开发基本没搞过 过去只会用Borland C 还是6 0 真是太过时了 好在还学过python 听说用python
  • gcc编译程序的四个阶段(预处理-编译-汇编-链接)

    相关博客http blog csdn net eastonwoo article details 8655243 相关博客http blog sina com cn s blog 5ff8e88e01015tga html gcc的编译流程
  • 【实战】基于GDAL库读取指定经纬度下的地表覆盖数据(数据源:清华大学FROM_GLC10(2017))

    目录 前言 数据源 清华大学宫鹏教授学科组10m土地覆盖数据 数据集类型 下载途径 GDAL库读取FROM GLC10数据集 下载一个GIS平台 数据集命名规则 GetGeoTransfrom方法介绍 实例代码 geoTransform参数
  • R读取csv格式文件;result <- read.table;及报错

    设置文件目录 读取数据csv csv的分隔符 注意表格中不能有逗号 一般仅要设施以下参数 result lt read table file header TRUE sep stringsAsFactors FALSE setwd C Us
  • dll文件保存到服务器,dll是什么文件?dll文件怎么打开?

    dll是Dynamic Link Library的简称 意为动态链接库 dll文件一般被储放在C WindowsSystem目录下 在Windows中 很多应用软件并并不是一个详细的可实行文件 他们被切分成一些相对性单独的动态链接库 即dl
  • SuperSocket使用 IRequestInfo 和 IReceiveFilter 等对象实现自定义协议

    本文章向大家介绍SuperSocket使用 IRequestInfo 和 IReceiveFilter 等对象实现自定义协议 主要包括SuperSocket使用 IRequestInfo 和 IReceiveFilter 等对象实现自定义协
  • 常见性能测试指标

    性能测试核心指标 吞吐量 响应时间 Rsponse Time 并发处理能力 资源占用能力 测试中的时间占比 40 性能测试分析 30 测试执行 30 测试结果分析 而全链路监控就是只要和系统相关的全部需要监控到 吞吐量 单位时间内 系统能够
  • 红黑树与AVL树的区别

    文章目录 红黑树与AVL树的区别 红黑树的一个案列 英文答案 红黑树的高度问题 红黑树的优点 与AVL树的比较 相同点 使用 红黑树为何能比AVL树高效的原因 分析 红黑树的应用领域 java 集合类和c STL Linux 选择RBTre
  • Microsoft Store无法打开解决方法

    Microsoft Store 无法启动 网络出错问题解决 Microsoft Store 无法启动 一直在转圈 最后显示网络出错的问题 解决方法 1 通过搜索打开 gt 控制面板 2 打开 gt 网络和Internet 3 打开 gt I
  • 有道云笔记登录失败,解决办法

    今天登录有道云笔记是 无论是app还是pc端 一直显示登陆失败 摸索了解决方法 先登录网页版官网 网页版肯定可以登录的 https note youdao com 进入账号安全 点击你要登陆的端注销 然后重新登陆 亲测 大功告成
  • VirtualBox 无法选择 64 位的虚拟机

    VirtualBox 无法选择 64 位的虚拟机 问题 解决方案 问题 在Win10 64位机器上安装VirtualBox只显示32bit 没有64bit选项 解决方案 一般是电脑没有把支持虚拟机的选项打开 虚拟化功能被占用 控制面板 程序
  • MYSQL 几种 join

    注意 Oracle数据库支持full join mysql是不支持full join的 但仍然可以同过左外连接 union 右外连接实现 初始化SQL语句 join 建表语句 drop database if exists test cre