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日

相关文章

  • 学习二维动态数组指针做矩阵运算的方法

    学习二维动态数组指针做矩阵运算的方法,需要掌握以下几个方面: 动态数组的申请和释放 二维数组指针的使用 矩阵的创建、初始化和运算 下面分步骤来详细讲解: 1. 动态数组的申请和释放 动态数组是指在程序运行时动态分配内存的数组,其大小可以在运行时根据需要进行调整。在C语言中,可以使用malloc函数来动态申请一维数组,使用calloc函数来申请二维数组。具体实…

    other 2023年6月26日
    00
  • 在 React 中使用 Redux 解决的问题小结

    在 React 中使用 Redux 解决的问题小结 Redux 是一个 JavaScript 状态管理库,它能够帮助我们更好地组织和管理应用程序的状态。在 React 应用中,Redux 通常用于管理应用程序的全局状态,以避免组件之间的深度嵌套和传递 Props 的复杂性。此外,Redux 还提供了强大的开发者工具,使得调试应用程序变得更加容易和高效。下面将…

    other 2023年6月20日
    00
  • DedeCms V5.6漏洞 变量未初始化 导致鸡助漏洞

    DedeCms V5.6是一款广泛使用的CMS系统,但该系统在变量未被正确初始化的情况下存在漏洞,攻击者可以通过利用该漏洞成功实施鸡助攻击。以下是攻击步骤: 攻击者首先需要获取DedeCms V5.6的登录页面,并且需要知道账号和密码才能登录系统; 然后攻击者需要构造恶意请求,通过向upload_picture.php文件中的path参数追加../路径,使得…

    other 2023年6月20日
    00
  • vue3.0实现插件封装

    下面是关于Vue 3.0实现插件封装的完整攻略。 什么是Vue插件 Vue插件是一个自包含的Vue.js模块,它可以添加一些类似于指令、组件、实例方法、过滤器、或混入等等,来扩展Vue全局功能。主要包括以下部分: 注册全局组件 注册全局指令 注册全局过滤器 添加实例方法 添加静态资源 Vue 3.0插件的基本结构 在Vue 3.0中,插件需要暴露一个函数作为…

    other 2023年6月25日
    00
  • Android中使用TextView实现文字跑马灯效果

    当在Android应用程序中使用TextView实现文字跑马灯效果时,可以按照以下完整攻略进行操作: … … 在布局文件中,创建一个TextView,并设置相应的属性来实现跑马灯效果。 <TextView android:id=\"@+id/marqueeTextView\" … android:layout_width…

    other 2023年9月5日
    00
  • ubuntu分区工具

    以下是“Ubuntu分区工具”的完整攻略: Ubuntu分区工具 在Ubuntu中,我们可以使用分区工具来创建、删除、调整分区。以下是使用分区工具的步骤: 1. 打开分区工具 首先,我们需要打开分区工具。可以使用以下命令: sudo gparted 在上面的命令,我们使用sudo命令获取管理员权限,然使用gparted命令打开分区工具。 2. 示例1:创建分…

    other 2023年5月7日
    00
  • JavaScript变量声明的var、let、const详解

    JavaScript变量声明的var、let、const详解 在JavaScript中,我们可以使用var、let和const关键字来声明变量。这些关键字有不同的作用域和特性,下面将详细解释它们的用法和区别。 var var是JavaScript中最早引入的变量声明关键字。它的作用域是函数作用域,意味着在函数内部声明的变量只在函数内部有效。如果在函数外部声明…

    other 2023年8月20日
    00
  • 初始化CSS的方法

    初始化CSS的方法 在进行网页制作时,为了减少浏览器各自默认的样式对网页布局和设计产生的影响,我们会将一些CSS属性全部重置并统一设置。这个过程就被称为初始化CSS。 1. 重置样式 常见的重置样式库有Normalize.css和Reset CSS。 Normalize.css Normalize.css 使浏览器的默认样式更一致和符合现代标准。它解决了一些…

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