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

【MySQL】区分:等值连接/自连接/自然连接/外连接 以及ON和Where使用

区分:等值连接/自连接/自然连接/外连接 以及ON和Where使用

  • 一、等值连接
  • 二、自连接
  • 三、自然连接
  • 四、外连接
        • 1.左外连接
        • 2.右外连接
        • 3.全外连接
  • 五、using 和 on
  • 六、JOIN 关联表中 ON、WHERE 后面跟条件的区别

一、等值连接

等值连接:它是基于两个表之间的相等测试,展现出来的是共同的数据,因此又称内部连接。

select * from a , b where  a.id = b.id;
select * from a inner join b on a.id = b.id;
select * from a inner join b using (`id`); 

除了inner join,还有left join和right join。

二、自连接

自连接:给一张表取两个不同的别名就,使用两个别名将表与表本身进行连接查询,然后附上连接条件。

select * from a , b where  a.id = b.id;

三、自然连接

自然连接:自然连接是一种特殊的等值连接。它要求两个关系表中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。

# 自然连接-- 使用NATURAL JOIN 
SELECT *
FROM `a` NATURAL JOIN `b`

四、外连接

外连接包括左外连接、右外连接、全外连接。

1.左外连接

左外连接:两表进行连接时,将返回左表的所有行。如果左表的某行在右表中没有匹配行,则将为右表返回空值。

# 左外连接
-- 使用LEFT JOIN (left out join)
SELECT *
FROM `a` LEFT JOIN `b`
-- USING(`id`);
ON`a`.`id` = `b`.`id`;
2.右外连接

右外连接:两表进行连接时,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

# 左外连接
-- 使用LEFT JOIN (left out join)
SELECT *
FROM `a` RIGHT JOIN `b`
-- USING(`id`);
ON`a`.`id` = `b`.`id`;
3.全外连接

全外连接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。

# 全外连接-- 使用FULL JOIN,mysql 不支持,orcal支持
SELECT *
FROM `a` FULL JOIN `b`
-- USING(`id`);
ON`a`.`id` = `b`.`id`;-- mysql中使用UNION来实现FULL JOIN的功能
SELECT *
FROM `a` LEFT JOIN `b`
-- USING(`id`);
ON`a`.`id` = `b`.`id`
UNION
SELECT *
FROM `a` RIGHT JOIN `b`
-- USING(`id`);
ON`a`.`id` = `b`.`id`;

五、using 和 on

using 和 on 值可用于 left join 、right join 、full join ,不可用于 natural join ,因为 natural join 不需要显示的连接条件。

  • using:当连接条件中的两张表的两个连接属性相同时可以使用using。

  • on:连接条件中的两张表的两个连接属性不论是否相同,都可用 on, using 是 on 两个连接属性相同时的简写

六、JOIN 关联表中 ON、WHERE 后面跟条件的区别

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

join联结可以简单理解为以下过程:

  1. 首先两个表做一个笛卡尔积。
  2. 然后根据on后面的条件对这个笛卡尔积做一个过滤形成一张临时表。
  3. 如果有where就对上一步的临时表再进行过滤,进而得到最终的结果集。
  4. 也就是说如果inner join left join联查过滤条件放在on中就是在第二步进行的过滤;如果过滤条件放在where中就是在第三步进行的过滤。

inner join和cross join的区别:

  • cross join是笛卡尔积,理论上不应该支持on语法,inner join是内连接,支持on
  • SQLServer中cross join 后面加on 是错误的。mysql中使用inner join和cross join加不加on都不会报错。
  • 在 MySQL 中(仅限于 MySQL) CROSS JOIN 与 INNER JOIN 的表现是一样的,在不指定 ON 条件得到的结果都是笛卡尔积,反之取得两个表完全匹配的结果。INNER JOIN 与 CROSS JOIN 可以省略 INNER 或 CROSS 关键字

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

最后几点总结:

  • 当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接起来,对于不满足条件的记录,那右表字段全部是null
  • on后加了and就是 关联满足条件表2的数据,但是结果数据不做过滤,显示全部表1数据
  • on是在生成连接表的起作用的where是生成连接表之后对连接表再进行过滤,相当于where之前做了子查询,返回满足where条件的数据。

比如:

select * 
form tab1 
left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’);
这个查询返回结果还是会显示name为AAA的记录,因为on只作关联tab2的条件,并不会对tab1进行过滤作用。
select * 
form tab1 
left join tab2 on (tab1.size = tab2.size) 
where tab2.name=’AAA’这个结果就不显示name为AAA的记录。因为生成临时表后,where对行记录再次过滤。

相关文章:

【MySQL】区分:等值连接/自连接/自然连接/外连接 以及ON和Where使用

区分:等值连接/自连接/自然连接/外连接 以及ON和Where使用 一、等值连接二、自连接三、自然连接四、外连接1.左外连接2.右外连接3.全外连接 五、using 和 on六、JOIN 关联表中 ON、WHERE 后面跟条件的区别 一、等值连接 等值连接:它是基于两个表之间的相…...

Windows环境下Apache安装部署说明及常见问题解决

一、软件准备 1.1 Python的下载与安装 见博客 链接: Python下载安装 1.2 Pycharm的下载与安装 见博客 链接: pycharm安装 1.3 Mysql的下载与安装 见博客 链接: MySQL安装 1.4 Navicat的下载与安装 可参考软件安装管家。 解释说明:Pycharm是Python的集成编译环境,Nav…...

Linux-安装docker-compose

前言:本文建立在服务器中已经存在docker环境的基础上,总结了安装docker-compose过程,以及安装过程中遇到的问题和解决方案。 一、下载docker-compose 在网上找了两种,一种是github官方的,一种是国内的镜像 gitbub官…...

机器学习实验一:KNN算法,手写数字数据集(使用汉明距离)

KNN-手写数字数据集: 使用sklearn中的KNN算法工具包( KNeighborsClassifier)替换实现分类器的构建,注意使用的是汉明距离; 分段解释代码: import os import pandas as pd from Levenshtein import hamming导入所需的库,包括os用于文件操作,pandas用于数据处理,以及hamm…...

Java零基础入门-赋值运算符

前言 Java是一门广泛被应用的编程语言,它被用于开发各种类型的应用程序,从桌面应用程序到企业级后端系统。对于零基础的人来说,学习Java可能会感到有些困难。本文将帮助那些没有编程经验的人了解Java的赋值运算符。 摘要 本文将介绍Java中…...

xshell+xming显示jmeter的gui页面

1.下载和安装xming,下载地址:https://sourceforge.net/projects/xming/ 2.配置xming 记住这个端口,一会要用到 修改进入xming安装目录修改host文件 此处是远程服务器的ip 3.服务器执行vi /etc/ssh/sshd_config,修改成如图所示…...

el-tree业务

<el-form-item label"选择节点" prop"node_ids"><el-checkboxv-if"regionList.length"v-model"selectAll":disabled"selectDisabled":indeterminate"isIndeterminate":show-checkbox"!selectDisabl…...

警惕Mallox勒索病毒的最新变种malloxx,您需要知道的预防和恢复方法。

导言&#xff1a; 恶意软件的威胁不断进化&#xff0c;其中之一是.malloxx勒索病毒。这种病毒可以加密您的文件&#xff0c;并要求您支付赎金以解锁它们。本文91数据恢复将详细介绍.malloxx勒索病毒&#xff0c;包括如何恢复被加密的数据文件以及如何预防这种威胁。如果受感染…...

linux中断下文之tasklet(中断二)

在申请 GPIO 中断时使用 request_irq,但是request_irq绑定的中断服务程序指的是中断上文。在 Linux 内核中&#xff0c;tasklet 是一种特殊的软中断机制&#xff0c;被广泛用于处理中断下文相关的任务。它是一种常见且有效的方法&#xff0c;在多核处理系统上可以避免并发问题。…...

Mysql事务+redo日志+锁分类+隔离级别+mvcc

事务&#xff1a; 是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&#xff1b;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行&#xff1b;事务是一组不可再分割的操作集合&#xff08;工作逻辑单元&#xff09;&a…...

Kafka-Java四:Spring配置Kafka消费者提交Offset的策略

一、Kafka消费者提交Offset的策略 Kafka消费者提交Offset的策略有 自动提交Offset&#xff1a; 消费者将消息拉取下来以后未被消费者消费前&#xff0c;直接自动提交offset。自动提交可能丢失数据&#xff0c;比如消息在被消费者消费前已经提交了offset&#xff0c;有可能消息…...

Python 训练集、测试集以及验证集切分方法:sklearn及手动切分

目录 方法一 方法二 需求目的&#xff1a;针对模型训练输入&#xff0c;按照6:2:2的比例进行训练集、测试集和验证集的划分。当前数据量约10万条。如果针对的是记录条数达上百万的数据集&#xff0c;可按照98:1:1的比例进行切分。 方法一&#xff1a;切分训练集和测试集&…...

数据结构,及分类(存储分类、逻辑分类)介绍

一、数据结构&#xff1a; 数据是软件开发的核心。在软件开发过程中基本上就是对数据的新增、删除、修改、查看的操作。 如何合理存储数据&#xff0c;如何有效提升数据操作开发效率&#xff0c;都是软件开发中的重中之重。使用合理的数据结构是非常重要的。 1.1简介&#xff…...

Powershell脚本自动备份dhcp数据库

文章目录 为什么要备份DHCP数据库呢&#xff1f;在PowerShell中自动备份DHCP数据库1&#xff0c;创建备份目录2&#xff0c;判断备份路径是否存在3&#xff0c;备份DHCP数据库4&#xff0c;完整自动备份脚本5&#xff0c;安排定期备份 推荐阅读 为什么要备份DHCP数据库呢&#…...

第十六章总结:反射和注解

.1.1&#xff1a;访问构造方法 反射&#xff1a; 1.class类 2.获取构造方法 3.获取成员属性 4.获取成员方法 注解 1.内置注解 2.反射注解 3 创建Class对象的三种方式 1.使用getClass&#xff08;&#xff09;方法 object str new object&#xff08;&#xff09;…...

mysql 切割字符串函数

93、mysql 切割字符串函数 需求&#xff0c;使用in 匹配多个参数&#xff0c;name字段值类型&#xff1a;1234(小明) 结果&#xff1a; select * from user where SUBSTRING_INDEX(REPLACE(name, ), ), (, -1) in ( 小明,小李)使用的函数如下 1、使用SUBSTRING_INDEX函数 SU…...

汽车发动机电机右盖设计

摘要 随着我国微型电子技术和社会经济的发展&#xff0c;目前行业内为满足客户需求出现了大量的电器设备&#xff0c;而大多数的电气设备的重要组成中都有电机&#xff0c;并且电机端盖成为电机研发人员重点关注和研究的对象&#xff0c;逐渐成为电机的重要组成部分&#xff0c…...

ETHERNET/IP从站转CANOPEN主站连接AB系统的配置方法

你还在为配置网关的ETHERNET/IP从站和CANOPEN主站发愁吗&#xff1f;今天来教你解决办法&#xff01; 一&#xff0c;首先&#xff0c;配置网关的ETHERNET/IP从站&#xff0c;需要使用AB系统的配置方法&#xff0c;具体步骤如下 1&#xff0c;使用 AB 系统配置网关的 ETHERNET/…...

人工智能和机器学习:走向智能未来的关键

人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;是当今IT领域中最令人振奋的发展方向之一。从自动驾驶汽车到智能助手&#xff0c;AI技术的应用正在不断扩展&#xff0c;重新定义着我们的生活方式和商业模式。在这个文章中&#xff0c;我们将深入探讨…...

openGauss本地Centos7.6单机安装和简单应用

openGauss本地Centos7.6单机安装和简单应用 openGauss基础环境配置openGauss安装openGauss使用测试openGauss常用命令 openGauss基础环境配置 在VMware Workstation中安装一台 centos7.6 内存&#xff1a;8GB&#xff0c;亲测4GB安装不够 磁盘&#xff1a;测试50GB-100GB够用 …...

零代码玩转OpenClaw:Qwen3-4B模型对话式任务配置

零代码玩转OpenClaw&#xff1a;Qwen3-4B模型对话式任务配置 1. 为什么选择OpenClawQwen3-4B组合 上周我在整理电脑里的300多张照片时&#xff0c;突然意识到——为什么不让AI帮我完成这种机械工作&#xff1f;经过对比测试&#xff0c;我发现OpenClaw与Qwen3-4B-Thinking模型…...

揭秘MiniMax-Remover:如何通过两阶段优化实现视频物体移除的高效与精准

1. MiniMax-Remover&#xff1a;视频编辑领域的"魔法橡皮擦" 想象一下&#xff0c;你刚拍完一段完美的旅行vlog&#xff0c;却发现画面角落有个碍眼的垃圾桶&#xff1b;或者你下载了一段珍贵的纪录片&#xff0c;却被平台水印破坏了观影体验。传统视频编辑软件处理这…...

OpenClaw 接入微信,QQ,飞书的正确方法-周红伟

OpenClaw 接入微信 OpenClaw&#xff08;原 Clawdbot&#xff09;是一个开源、本地优先的 AI 代理网关&#xff0c;能让大模型在你的电脑/服务器上 7X24 小时运行&#xff0c;支持直接操作电脑、浏览网页、执行命令&#xff0c;还能无缝接入飞书、Telegram、Discord 等聊天平台…...

离线语音识别新选择:Whisper Web本地部署与内网穿透实战指南

1. 为什么选择Whisper Web进行本地语音识别 在当今AI技术快速发展的时代&#xff0c;语音识别已经成为我们日常工作和生活中不可或缺的工具。但大多数语音识别服务都需要依赖云端&#xff0c;这不仅带来了隐私泄露的风险&#xff0c;还受限于网络连接质量。Whisper Web的出现完…...

OpenClaw长期运行优化:Qwen3.5-9B-AWQ-4bit内存泄漏排查

OpenClaw长期运行优化&#xff1a;Qwen3.5-9B-AWQ-4bit内存泄漏排查 1. 问题背景与现象描述 上周我的OpenClaw网关服务在连续运行72小时后突然崩溃&#xff0c;导致自动化任务全部中断。查看系统监控发现内存占用从初始的2GB逐渐增长到16GB&#xff08;我的服务器总内存&…...

【数据结构】顺序表的应用->通讯录(详细代码及配图)

小编主页详情<-请点击 小编gitee代码仓库<-请点击 本文主要介绍了数据结构的顺序表的应用->通讯录&#xff0c;内容全由作者原创&#xff08;无AI&#xff09;&#xff0c;同时深度解析了通讯录顺序表增删查改等功能&#xff0c;并带有配图帮助博友们更好的理解&#…...

2026届必备的十大降AI率平台实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 旨在降低AIGC检测率的工具&#xff0c;其发挥功效的途径多种多样。其一&#xff0c;借助对词…...

效率提升利器:用快马ai生成jdk多版本一键切换与配置管理工具

作为一名经常需要切换不同JDK版本的开发者&#xff0c;我深知手动配置环境变量的痛苦。每次切换项目时&#xff0c;都要反复修改JAVA_HOME和PATH&#xff0c;还要担心配置出错影响其他项目。最近发现InsCode(快马)平台可以快速生成JDK管理工具&#xff0c;彻底解决了这个痛点。…...

Tk wasm 滑块算法分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析部分python代码cp execjs.co…...

ZUI 3表单组件完全指南:从基础输入到复杂验证的完整解决方案

ZUI 3表单组件完全指南&#xff1a;从基础输入到复杂验证的完整解决方案 【免费下载链接】zui ZUI is an HTML5 front UI framework. 项目地址: https://gitcode.com/gh_mirrors/zu/zui ZUI 3是一个全新的开源HTML5前端UI框架&#xff0c;提供了丰富的表单组件和完整的表…...