首页 > 数据库 >sql 中的left join 的坑请大家绕着走

sql 中的left join 的坑请大家绕着走

时间:2023-03-27 12:22:37浏览次数:29  
标签:code join yn sql where left

背景:
最近工作中一直和sql 打交道,由于平时用的少,也不怎么写多表联查的情况,但是最近项目中存在大量的多表联查的sql,让自己走了一些小坑

  1. A left join B 中未必A就是小表,或者说A未必是1:N中的 N

A表

namecode
张三001

B表

corecode
23001
234001

select * from a left join B on a.code = b.code
结果 不是一条数据而是2条数据

这个比较好理解,自己当时思维定势导致的 主观认为, 都是小表 left join 大表,

  1. on 和 where 写条件区别

条件on 和 where 后面写条件有区别吗? 原来只记得 条件尽可能早写,减少数据的过滤
所以经常经条件提前写在on里面 这种未必符合实际条件

A表

namecodeyn
张三0011
李四0021

B表

corecodeyn
230011
240010
250021
270020

sql1

select * from b left join a on a.code = b.code 
where a.yn = 1 and b.yn = 1

sql2

select * from b left join a on a.code = b.code and b.yn = 1
where a.yn = 1 

这2个sql执行的结果是不一样的,自己去验证,这里我说下理论:
on比where起作用更早,,先根据on条件进行多表的连接操作,生成一个临时表再通过where来筛选

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:code,join,yn,sql,where,left
From: https://www.cnblogs.com/edda/p/17261138.html

相关文章

  • mysql查看死锁
    查看死锁Mysql查询是否存在锁表有多种方式,这里只介绍一种最常用的。1、查看正在进行中的事务SELECT*FROMinformation_schema.INNODB_TRX2、查看正在锁的事务......
  • 告别慢SQL,如何去写一手好SQL ?
    MySQL性能最大数据量最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。《阿里巴巴Java开发手册......
  • chatGPT教你学sql的事务
    事务的隔离级别事务的隔离级别是指多个并发事务之间相互隔离的程度,主要是为了解决并发事务带来的一致性问题,它的主要作用是控制数据库中事务的可见性和可重......
  • SQL SERVER不使用EOMONTH,获取月份的最后一天- SQL server 2008
    1)TofindthelastdateofthecurrentmonthusingEOMONTHDECLARE@current_dateDATE=GETDATE()SELECTEOMONTH(@current_date,0)ASLastDayOfCurrentMonthNE......
  • Mysql 修改表编码
    Mysql修改表编码,字段编码还是以前的Mysql修改表编码,字段编码未变ALTERTABLE`table6`CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_bin;--ALTERTABLE`rent......
  • 监控事件系列——SQL Trace(默认跟踪与自定义跟踪)
    目录【1】服务器端跟踪(ServerSideTrace)【1.1】概念与使用【1.2】跟踪的基本操作【1.3】七大事件监控【2】默认跟踪的应用 【2.1】常用事件跟踪(删除、审核登......
  • MYSQL执行顺序
    MYSQL的执行顺序如下所示:fromonjoinwheregroupbyhavingselectdistinctunionorderby可以看到,select是在where后执行的,也就是说,select下的窗口函数也是在where之后执行的......
  • 自动生成sql 这是MySQL例子
    @TestpublicvoidtestGeneSql(){try{Stringss=getFileContentTwo("D:\test\13json.txt");JSONObjectjo=JSONObject.parseObject(ss);JSONAr......
  • MS SQL Server 删除重复行数据
    您可以使用以下SQL语句删除MSSQLServer表中重复的行:WITHCTEAS(SELECTROW_NUMBER()OVER(PARTITIONBYcolumn1,column2,...columnNORDERBY(SELECT0))......
  • SQL Server 索引类型及意义
    一、什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQLServer中的数据记录也是按页存放的,每页容量一般为4K。为了加快查找的速度,汉语字(词)典......