首页 > 其他分享 >多表关联时过滤条件放在On和Where后面的区别

多表关联时过滤条件放在On和Where后面的区别

时间:2024-11-19 10:59:00浏览次数:1  
标签:singer 多表 tb t2 t1 过滤 Where id

演示数据库:Mysql

创建表

内连接

  1. 放在On后面
SELECT * FROM tb_singer t1 INNER JOIN tb_song t2 ON t1.id=t2.singer_id and t2.`name`='夜曲' WHERE t1.`name`='周杰伦';

  1. 放在Where后面
SELECT * FROM tb_singer t1 INNER JOIN tb_song t2 ON t1.id=t2.singer_id WHERE t1.`name`='周杰伦' and t2.`name`='夜曲'

左连接

  1. 放在On后面
SELECT * FROM tb_singer t1 LEFT JOIN tb_song t2 ON t1.id=t2.singer_id and t2.`name`='夜曲' WHERE t1.`name`='周杰伦';

  1. 放在Where后面
SELECT * FROM tb_singer t1 LEFT JOIN tb_song t2 ON t1.id=t2.singer_id WHERE t1.`name`='周杰伦' and t2.`name`='夜曲'

右连接

  1. 放在On后面
SELECT * FROM tb_song t1 RIGHT JOIN tb_singer t2 ON t1.singer_id=t2.id and t1.`name`='夜曲' WHERE t2.`name`='周杰伦';

  1. 放在Where后面
SELECT * FROM tb_song t1 RIGHT JOIN tb_singer t2 ON t1.singer_id=t2.id WHERE t2.`name`='周杰伦' and t1.`name`='夜曲';

总结

  1. 对于内连接查询,过滤条件放在On或者Where后面得到的结果是一样的。

  2. 对于左连接查询,过滤条件放在On后面,不会对左表的数据进行过滤,依然显示左表全部数据,右表不匹配则对应列显示为NULL。
    过滤条件放在Where后面,会对左表数据进行过滤。即理解为过滤条件放在On后面是先过滤后关联,过滤条件放在Where后面是先关联后过滤。

  3. 对于右连接查询,过滤条件放在On后面,不会对右表的数据进行过滤,依然显示右表全部数据,左表不匹配则对应列显示为NULL。
    过滤条件放在Where后面,会对右表数据进行过滤。即理解为过滤条件放在On后面是先过滤后关联,过滤条件放在Where后面是先关联后过滤。

标签:singer,多表,tb,t2,t1,过滤,Where,id
From: https://www.cnblogs.com/mingcore/p/18554427

相关文章

  • 极致高效的数据处理:位图、布隆过滤器与哈希切分的奇妙之旅
    文章目录前言......
  • 深入探索MySQL多表查询:连接查询与子查询的艺术
    深入探索MySQL多表查询:连接查询与子查询的艺术在数据库操作中,多表查询是一项常见且重要的任务。无论是为了获取更全面的数据,还是为了实现复杂的业务逻辑,多表查询都是不可或缺的工具。MySQL提供了两种主要的多表查询方式:连接查询和子查询。本文将深入探讨这两种查询方式的规律、优......
  • Java Web 过滤器和拦截器.
    概念过滤器即Servlet过滤器,参见Servlet过滤器入门示例。拦截器(Interceptor)通常是由特定的框架提供的,不是JavaEE标准的一部分。Spring提供了多种类型的拦截器,如方法拦截器(MethodInterceptor)和控制器拦截器(HandlerInterceptor)。方法拦截器可以用于AOP(面向切面编程),而控......
  • 列表数据隔离--采购申请单只能看当前用户的单据信息 过滤,PrepareFilterParameter 2
    region<<版本注释>>/*===================================================类名称:PUR_Requisition_listFilter类描述:列表数据隔离--采购申请单只能看当前用户的单据信息过滤,PrepareFilterParameter创建人:luohong创建时间:2024/11/1516:18:04电子邮箱:it_lu......
  • 201_springboot基于协同过滤的就业推荐系统
    目录系统展示开发背景代码实现项目案例 获取源码博主介绍:CodeMentor毕业设计领航者、全网关注者30W+群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AWS/Wired等平台优选内容创作者、深耕Web......
  • SpringBoot中监听器、过滤器、拦截器和AOP详解
    SpringBoot中监听器、过滤器、拦截器和AOP详解在构建SpringBoot应用程序时,监听器(Listener)、过滤器(Filter)、拦截器(Interceptor)和面向切面编程(AOP)是四种常用的机制,它们各自有不同的用途和执行时机。本文将详细介绍这四种技术的执行时机和区别,并附上示例代码帮助理解。1.......
  • 帝国CMS过滤内容里面HTML字符简单的方法代码
    自定义函数在 /e/class/userfun.php 文件中添加以下代码:functionDELHTML($string){$string=preg_replace("'<script[^>]*?>.*?</script>'si","",$string);//去掉javascript$string=preg_replace("'<[\......
  • cxGrid【过滤、排序】后获取选中记录的值和cxGrid空表判断
    方法一:使用函数GetRowValue此方法在表格过滤、排序后也正常,请注意:此代码顺序需要CXGRID的列顺序和ADOQUERY中SELECT的字段顺序一致,否则会取错。procedureTfrmBillExtraction.pmGetBill_D_DatasClick(Sender:TObject);varI,J:Integer;beginwithcxGDBTV_Bill_M.Data......
  • Oracle Where子句用法
    OracleWHERE子句简介WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法:SELECTcolumn_1,column_2,...FROMtable_nameWHEREsearch_conditionORDERBYcolumn_1,column_2;WHERE子句出现在FROM子句之后但......
  • R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表
    R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接、data.table使用自定义函数及Reduce函数实现一次性性多表连接目录R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接#data.table是什么?#dat......