MySql 各种 join

MySql 定义了很多join的方式,接下来我们用一个例子来讲解。

用到的表

  本文用到了两个表s1,s2

  

内外连接

测试

1 1 1.select * from s1 inner join s2 on(s1.id = s2.id);

+----+----+
| id | id |
+----+----+
|  3 |  3 |
|  4 |  4 |
+----+----+

2 2 2.select * from s1 join s2 on(s1.id = s2.id);

+----+----+
| id | id |
+----+----+
|  3 |  3 |
|  4 |  4 |
+----+----+

3 3 3.select * from s1 left outer join s2 on(s1.id = s2.id);

+----+------+
| id | id   |
+----+------+
|  1 | NULL |
|  2 | NULL |
|  3 |    3 |
|  4 |    4 |
+----+------+

4 4 4.select * from s1 right outer join s2 on(s1.id = s2.id);

+------+----+
| id   | id |
+------+----+
|    3 |  3 |
|    4 |  4 |
| NULL |  5 |
| NULL |  6 |
+------+----+

5 5 5.select * from s1 outer join s2 on(s1.id = s2.id);

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'outer join s2 on(s1.id = s2.id)' at line 1

  说明 MySql 不支持全外连接。

小结

  joininner join都指的是内连接outer join外连接必须搭配left或者right变成左/右外连接,没有单独的outer join

自然连接和笛卡尔积

  有时候我们也可以不用on(s1.id = s2.id),看看会发生什么。

笛卡尔积

1 1 1.select * from s1 inner join s2;select * from s1 join s2;

+----+----+
| id | id |
+----+----+
|  4 |  3 |
|  3 |  3 |
|  2 |  3 |
|  1 |  3 |
|  4 |  4 |
|  3 |  4 |
|  2 |  4 |
|  1 |  4 |
|  4 |  5 |
|  3 |  5 |
|  2 |  5 |
|  1 |  5 |
|  4 |  6 |
|  3 |  6 |
|  2 |  6 |
|  1 |  6 |
+----+----+

  这两种加上了on(s1.id = s2.id)内连接,不加上的话是笛卡尔积
2 2 2.select * from s1 left outer join s2;select * from s1 right outer join s2;select * from s1 outer join s2;
  这三种情况会报错

自然连接

  MySql 提供了自然连接的join语句,它和内连接的区别就是去除了重复属性列
1 1 1.select * from s1 natural join s2;

+----+
| id |
+----+
|  3 |
|  4 |
+----+

  注意:这里natural一旦拼错,就相当于没写,从而变成上面的笛卡尔积。
2 2 2.select * from s1 [innner] join s2 using(id);
  中括号里的inner可省可不省。using(id)表示根据两张表共有的属性列id进行连接。

+----+
| id |
+----+
|  3 |
|  4 |
+----+

外连接也能用using(id),其中,具体结果有兴趣的可以自行研究。

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

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

相关文章

MySQL数据库进阶笔记

第一章 存储引擎 1.1 MySQL体系结构 连接层 最上层是一些客户端和链接服务,主要完成一些类似连接处理、授权认证、及相关的安全方案。服务器也为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查…

靠这套车载测试面试题系列成功哪些20k!

HFP测试内容与测试方法 2.3 接听来电:测试手机来电时,能否从车载蓝牙设备和手机侧正常接听】拒接、通话是否正常。 1、预置条件:待测手机与车载车载设备处于连接状态 2、测试步骤: 1)用辅助测试机拨打待测手机&…

电商还存在错位竞争空间吗?

“上链接试了,十几分钟,成本5块的东西卖1块5了。”今年618前期,某个电商平台上线了自动跟价功能,有一个卖家尝试了一会儿之后赶紧关了。 又一个618,平台、商家、消费者们又迎来了一次狂欢。只是与往年不同的是&#x…

2024年,收付通申请开通流程

大家好,今天咱们来聊聊关于APP场景中开通微信收付通的一些实用小窍门。在如今的移动互联网时代,很多商家都选择通过APP来提供服务和产品,因此如何在APP中顺利集成微信收付通功能,让用户能够轻松完成支付,就显得尤为重要…

高考志愿选专业,文科生如何分析选择专业?

每到高考时节,学生们最关注的就是专业选择,以及未来职业发展问题,对于文科生来说,面对文科专业的众多选择,很多人都有些不知所措,如何选择适合自己兴趣爱好,又有良好就业前景的工作。从哪些方面…

每天写java到期末考试(6.20)--集合2--练习--6.20

练习1 package QM_Fx;import java.util.ArrayList;public class test{public static void main(String[] args) {//1.创建一个集合ArrayList<String> listnew ArrayList<>();//2.添加元素list.add("点赞了吗");list.add("投币了吗");list.add(…

项目六 OpenStack虚拟机实例管理

任务一 理解OpenStack计算服务 1.1 •什么是Nova • Nova是OpenStack中的计算服务项目 &#xff0c;计算虚拟机实例生命周期的所有活动都由 Nova 管理 。 • Nova 提供统一的计算资源 服务。 • Nova 需要下列 OpenStack 服务的 支持。 Keystone &#xff1a;为所有的 OpenSt…

企智汇:弱电智能化项目工程项目管理系统助力企业项目管理!

在当今数字化时代&#xff0c;弱电智能化项目的复杂性和挑战性日益增加&#xff0c;高效的项目管理变得尤为重要。企智汇弱电智能化项目工程项目管理系统凭借其业务流程化、流程数据化、数据可视化、业财一体化及成本精细化等特性&#xff0c;为项目全生命周期管理提供了全面而…

Mathtype插入word,以及mathtype在word上的卸载

1.Mathtype插入word 花了两个小时&#xff0c;最终得出的极品简单的安装方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; mathype下载地址&#xff1a;https://store.wiris.com/zh/products/mathtype/download/windows 下载完傻瓜式安装&#xff0c;不要…

车载测试系列:车载测试流程

车载测试流程是保证软件质量的重要支撑&#xff0c;优秀的团队都必须拥有规范的流程体系支撑&#xff0c;它能够约束测试人员的测试行为&#xff0c;约束测试环境的测试精度&#xff0c;提升测试的覆盖度&#xff0c;保证团队成员工作的协调性。 该测试流程建立的依据&#xf…

变长的时间戳设计

以前的时间戳有32位&#xff0c;以秒为单位&#xff0c;231秒≈68年&#xff0c;从1970年开始&#xff0c;到2038年会出问题。 后来出现的时间戳有64位&#xff0c;以纳秒为单位&#xff0c;263纳秒≈292年。 本次设计的变长时间戳&#xff0c;以32比特为单位&#xff0c;总共…

处理文本内容的命令和正则表达式

处理文本内容的命令 正则表达式匹配的是文本内容&#xff0c;linux的文本三剑客 都是针对文本内容 文本三剑客&#xff1a; grep 过滤文本内容 sed 针对文本内容进行增删改查 awk 按行取列 文本三剑客都是按行进行匹配。 grep grep的作用就是使用正则表达式来匹配文本内…

码蹄集 BD202401 补给

错误解法&#xff1a;简单将取半前后的综合排序后取最小值&#xff0c;这样没有考虑这样一种情况&#xff1a;取半的时机不对&#xff0c;也许取半某个大一点的P之后反而能进一步取一个补给点了呢&#xff1f;&#xff1f;对不对。这样简单排序只不过是“最省钱”的一种&#x…

C# 数据结构与算法:近邻算法的详解

文章目录 1、什么是K最近邻算法&#xff08;KNN&#xff09;&#xff1f;2、 KNN算法的原理3、实现近邻算法算法使用示例 4、应用&#xff1a;使用KNN算法进行简单的分类5、算法的优势与不足6、总结 近邻算法是一种基于实例的学习方法&#xff0c;它通过找到与给定测试点最接近…

镭速传输界面优化之静态文件加载

镭速一直是众多企业传输大文件和大数据的优选对象&#xff0c;速度快、稳定且安全是市场上传输软件脱颖而出的立杆标签&#xff0c;那么同样在界面优化和体验的强大也能够给企业用户带来许多直观的感受&#xff0c;那么今天我们就来谈谈镭速是如何做到这些的&#xff0c;在界面…

卷积篇 | YOLOv8改进之引入重新参数化再聚焦卷积RefConv | 即插即用

前言:Hello大家好,我是小哥谈。论文提出了重新参数化再聚焦卷积RefConv作为常规卷积层的替代品,它是一个即插即用模块,可以在没有任何推理成本的情况下提高性能。具体来说,在给定预训练模型的情况下,RefConv对从预训练模型继承的基核进行可训练的再聚焦变换,以建立参数之…

qt笔记之main.cpp加载qml文件的3种方法QQuickView 、QQmlApplicationEngine、QQuickWidget

qt笔记之main.cpp加载qml文件的3种方法QQuickView 、QQmlApplicationEngine、QQuickWidget —— 2024-06-16 下午 code review! 文章目录 qt笔记之main.cpp加载qml文件的3种方法QQuickView 、QQmlApplicationEngine、QQuickWidget1.使用qtcreator创建qml空项目&#xff0c;默…

【python】Sklearn—Cluster

参考学习来自 10种聚类算法的完整python操作示例 文章目录 聚类数据集亲和力传播——AffinityPropagation聚合聚类——AgglomerationClusteringBIRCH——Birch&#xff08;✔&#xff09;DBSCAN——DBSCANK均值——KMeansMini-Batch K-均值——MiniBatchKMeans均值漂移聚类——…

来都来了,8个JavaScript技巧奉上

吆喝一声&#xff0c;如果你计算机、软件工程、电子等相关专业本科及以上学历&#xff0c;欢迎来共事。前后端/测试可投&#xff0c;技术大厂。 JavaScript 作为最流行的语言之一&#xff0c;其语法灵活且每年都在不断吸纳新特性&#xff0c;即使是一个从业多年的老手&#xff…

Hydra常用爆破命令

常用破解命令 SSH 破解 hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip sshFTP 破解 hydra ftp://ip -l 用户名 -P 密码字典 -t 线程(默认16) -vV hydra ftp://ip -l 用户名 -P 密码字典 -e ns -vVWeb 登陆…