MySQL left join操作中on和where放置条件的区别介绍

MySQL 的 left join 操作中,on 和 where 都可以放置条件,但二者有一定的区别。

on 语句是在连接两个表的时候使用的,用来指定连接的条件;where 语句则是在连接之后对结果进行筛选的过程中使用的,用来指定筛选条件。

具体来说,常见的使用场景是:两个表之间有一个公共字段关联,通过 left join 进行连接,right table 中有些记录的关联字段值为空(即没有匹配到 left table),此时想要查询出在 right table 中关联字段值为空的记录。
在这种情况下,可以使用以下 SQL 语句进行查询:

SELECT A.*, B.*
FROM table_a AS A
LEFT JOIN table_b AS B ON A.id = B.id
WHERE B.id IS NULL;

在该 SQL 语句中,第一个表是 table_a,第二个表是 table_b。由于我们想要查找关联字段为空的记录,所以我们使用 LEFT JOIN,将 table_a 作为左表,table_b 作为右表。

B.id IS NULL 是该 SQL 语句的关键部分,表示查找在右表中没有匹配到左表的记录(即 B.id 为空)。将条件放在 where 中会筛选掉所有没有匹配到的记录,而在 on 中进行判断则可以将数据连接后再对空值进行筛选。

再举一个例子来说明,假设有一张表格 BlogPosts,还有一张表格 PostTags,它们之间通过 BlogPosts.Id 和 PostTags.BlogPostId 相关联。现在我们想要查找所有没有标签的博客,可以使用以下 SQL 语句:

SELECT *
FROM BlogPosts
LEFT JOIN PostTags ON BlogPosts.Id = PostTags.BlogPostId
WHERE PostTags.BlogPostId IS NULL;

在该 SQL 语句中,使用了 left join 连接两个表,然后在 where 中将条件设置为 PostTags.BlogPostId IS NULL,代表没有对应的标签。如果将该条件放在 on 中,则会将所有没有匹配到左表的记录放在结果集中,无法实现我们需要的筛选。

综上所述,在 left join 操作中,on 和 where 都是起到条件筛选的作用,但位置不同,作用也不同。on 操作在连接两个表的关系时使用,用于作为连接条件;where 操作在连接两个表之后,在筛选结果集时使用,用于过滤出符合条件的记录。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL left join操作中on和where放置条件的区别介绍 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Vue添加请求拦截器及vue-resource 拦截器使用

    当我们在Vue中使用vue-resource库进行接口请求时,我们可能需要为每个请求设置一些通用信息,比如token、请求头、请求体等,那么我们可以通过添加请求拦截器来实现这个过程。 添加请求拦截器 我们可以在Vue实例中添加一个request拦截器,这个拦截器会在每个请求发送前被触发执行,可以在这里对请求进行配置,如下: import Vue from ‘…

    other 2023年6月27日
    00
  • 易语言创建EXCEL对象的方法

    易语言创建EXCEL对象的方法 以下是使用易语言创建EXCEL对象的完整攻略: 导入ExcelCOM模块:在易语言的开发环境中,首先需要导入ExcelCOM模块,以便使用Excel相关的功能。 创建Excel对象:使用ExcelCOM模块提供的函数,创建一个Excel对象。 vb ExcelObj = ExcelCOM_CreateExcelObj() 打开…

    other 2023年10月15日
    00
  • css样式优先级及层叠的顺序排序探讨

    CSS样式优先级及层叠的顺序排序探讨 1. 优先级的原则 CSS样式优先级是用来确定当多个样式规则应用于同一个元素时,哪个规则将被应用。在计算优先级时,可以遵循以下原则: !important规则的优先级最高,即使在样式规则中顺序靠后,也会被最先应用。 内联样式(写在HTML元素的style属性中)的优先级高于内部样式表(写在<style>标签中…

    other 2023年6月28日
    00
  • Windows7下安装使用MySQL8.0.16修改密码、连接Navicat问题

    下面我将为您详细讲解“Windows7下安装使用MySQL8.0.16修改密码、连接Navicat问题”的完整攻略,步骤如下: 安装MySQL8.0.16 首先,在MySQL官网下载MySQL8.0.16安装文件,并安装到Windows7系统中。然后可以按照以下步骤修改密码: 打开命令行界面(如Windows+R,cmd),输入以下命令进入mysql: my…

    other 2023年6月27日
    00
  • Linux CentOS 7.0中java安装与配置环境变量的步骤详解

    Linux CentOS 7.0中java安装与配置环境变量的步骤详解 1. 安装Java 在CentOS 7.0中,可以通过yum来安装Java。打开终端程序,输入以下命令: sudo yum install java 终端会提示你输入管理员密码确认安装。然后等待安装完成即可。 2. 配置环境变量 安装完Java后,为了方便使用,需要配置Java的环境变量…

    other 2023年6月27日
    00
  • iOS9.3 beta2固件下载 iOS9.3 beta2固件网盘下载地址汇总(需开发者账号)

    下面是对于“iOS9.3 beta2固件下载 iOS9.3 beta2固件网盘下载地址汇总(需开发者账号)”的完整攻略。 iOS9.3 beta2固件下载 1. 前置条件 要下载 iOS9.3 beta2 固件,你需要满足以下两个前置条件: 具有 Apple 开发者账号。 需要在一个注册了 UDID 的设备上进行安装。 如果你已经满足了上面的两个前置条件,那…

    other 2023年6月26日
    00
  • 微信公众号订阅号以及服务号通过网页授权获取用户openid方法

    以下是“微信公众号订阅号以及服务号通过网页授权获取用户openid方法的完整攻略”的详细讲解,过程中包含两个示例说明的标准Markdown格式文本: 微信公众号订阅号以及服务号通过网页授权获取用户openid方法的完整攻略 在微信公众号订阅号以及服务号中,我们可以通过网页授权的方式获取的openid。本文将介绍如何通过网页授权获取用户openid,并提供两个…

    other 2023年5月10日
    00
  • Android开发服务Service全面讲解

    Android开发服务Service全面讲解 什么是Service? 在Android开发中,Service是一种可以在后台执行长时间运行操作的组件。它可以在没有用户界面的情况下运行,并且可以与其他应用程序组件进行通信。 Service的类型 在Android中,有两种类型的Service: Started Service:Started Service是通…

    other 2023年8月20日
    00
合作推广
合作推广
分享本页
返回顶部