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 不支持全外连接。
小结
join和inner 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),其中,具体结果有兴趣的可以自行研究。
相关文章:
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…...
【Android面试八股文】Android中操作多线程的方式有哪些?
文章目录 1. 使用 `Thread` 和 `Runnable`2. `AsyncTask`3. `Handler` 和 `Looper`4. `HandlerThread`5. `ThreadPoolExecutor`6. `IntentService`7. `RxJava`8. `Coroutine`(协程)9. `WorkManager`在Android开发中,有多种方式可以进行多线程操作。以下是主要的几种方式: 1…...
语义分割和目标检测的关系
目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 (1)物体的位置 (2)物体的分类 从数据格式来说 (1)语义分割的数据格式 (2)目标检测的数据格式 1.语义分…...
SpringBoot 大文件基于md5实现分片上传、断点续传、秒传
SpringBoot 大文件基于md5实现分片上传、断点续传、秒传 SpringBoot 大文件基于md5实现分片上传、断点续传、秒传前言1. 基本概念1.1 分片上传1.2 断点续传1.3 秒传1.4 分片上传的实现 2. 分片上传前端实现2.1 什么是WebUploader?功能特点接口说明事件APIHook 机制 …...
数据资产治理与数据质量提升:构建完善的数据治理体系,确保数据资产的高质量与准确性
一、引言 随着信息技术的迅猛发展,数据已经成为企业和社会发展的重要资产。然而,数据资产的有效治理与数据质量的提升,是企业实现数字化转型、提升竞争力的关键。本文旨在探讨数据资产治理与数据质量提升的重要性,并提出构建完善…...
SylixOS下UDP组播测试程序
SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …...
Web前端快速开发平台:革命性工具,提升开发效率的新篇章
Web前端快速开发平台:革命性工具,提升开发效率的新篇章 在数字化时代的浪潮中,Web前端技术的快速发展与变革正在重塑我们的数字世界。为了应对这种快速变化,Web前端快速开发平台应运而生,为开发者们提供了更加高效、便…...
内窥镜系统设计简介
内窥镜系统设计简介 1. 源由2. 系统组成2.1 光学系统2.2 机械结构2.3 电子系统2.4 软件系统2.5 安全性和合规性2.6 研发与测试2.7 用户培训与支持 3. 研发过程3.1 光学系统Step 1:镜头设计Step 2:光源Step 3:成像传感器 3.2 机械结构Step 1&a…...
使用Spring Boot实现Redis多数据库缓存
Redis多数据库存储实现用户行为缓存 在我的系统中,为了优化用户行为数据的存储与访问效率,我引入了Redis缓存,并将数据分布在不同的Redis数据库中。通过这种方式,可以减少单一数据库的负载,提高系统的整体性能。 主要…...
揭秘newSingleThreadExecutor:深度解析与源码探秘
1. 概述 newSingleThreadExecutor是Java线程池框架中Executors类的一个静态方法,它返回一个线程池实例,该线程池维护一个单一的工作线程来执行任务。这个线程池的特性在于它保证了所有提交的任务会按照它们在队列中的顺序依次执行,而不会并发执行。它适用于需要保证任务顺序…...
使用python绘制三维散点图
使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图(3D Scatter Plot)是一种用于展示三维数据的图表。与二维散点图类似,三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …...
Vue51-插件
一、插件的定义 vue里面的插件,类似于游戏的外挂。 vue中插件的本质:一个对象,里面必须包含install方法。 二、插件的使用 2-1、创建一个插件js文件(写在src中plugins.js) 2-2、应用插件:Vue.use(插件) …...
python将一个整数转为字符串列表
如果你想要将一个整数转换为字符串列表,其中每个数字(0-9)都是列表中的一个元素,你可以先将整数转换为字符串,然后遍历这个字符串,将每个字符添加到列表中。这里是一个简单的示例: # 假设你有一…...
PTA 6 - 20 汉诺塔问题(py 递归)
这道题是一道比较典型的递归问题,他跟斐波那契数列的本质是一样的,大家自己动手推理一下,非常好推 参考代码: def hanoi(n,a,b,c):global stepif n 1:print(a,"->",c)step 1else:hanoi(n-1,a,c,b)print(a,"…...
深度学习Day-20:DenseNet算法实战 乳腺癌识别
🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客 🍖 原作者:[K同学啊 | 接辅导、项目定制] 一、 基础配置 语言环境:Python3.8编译器选择:Pycharm深度学习环境: torch1.12.1c…...
给类设置serialVersionUID
第一步打开idea设置窗口(setting窗口默认快捷键CtrlAltS) 第二步搜索找到Inspections 第三步勾选主窗口中Java->Serializations issues->下的Serializable class without serialVersionUID’项 ,并点击“OK”确认 第四步鼠标选中要加…...
Android之实现两段颜色样式不同的文字拼接进行富文本方式的显示
一、使用SpannableString进行拼接 1、显示例子 前面文字显示红色,后面显示白色,显示在一个TextView中,可以自动换行 发送人姓名: 发送信息内容2、TextView <TextViewandroid:id"id/tv_msg"android:layout_width"wrap_c…...
GenICam标准(五)
系列文章目录 GenICam标准(一) GenICam标准(二) GenICam标准(三) GenICam标准(四) GenICam标准(五) GenICam标准(六) 文章目录 系列文…...
《人生海海》读后感
麦家是写谍战的高手,《暗算》《风声》等等作品被搬上荧屏后,掀起了一阵一阵的收视狂潮。麦家声名远扬我自然是知道的,然而我对谍战似乎总是提不起兴趣,因此从来没有拜读过他的作品。这几天无聊时在网上找找看看,发现了…...
SpringBoot自定义Starter及原理分析
目录 1.前言2.环境3.准备Starter项目4.准备AutoConfigure项目4.1 准备类HelloProperties4.2 准备类HelloService4.3 准备类HelloServiceAutoConfiguration4.4 创建spring.factories文件并引用配置类HelloServiceAutoConfiguration4.5 安装到maven仓库 5.在其他项目中引入自定义…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
