left join后面加上where条件浅析

select a.*,b.*
from table1 a
left join table2 b on b.X=a.X
where XXX

如上:一旦使用了left join,没有where条件时,左表table1会显示全部内容

    使用了where,只有满足where条件的记录才会显示(左表显示部分或者全部不显示)

so。。。。

left join的困惑:一旦加上where条件,则显示的结果等于inner join 

原因分析:

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

where条件是在临时表生成好后,再对临时表进行过滤的条件;

因此:where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

解决方案:

1、where过滤结果作为子查询,和主表left,如下:

select a.*,tmp.*
from table1 a
left join(select a.*,b.*from table1 aleft join table2 b on b.X=a.Xwhere XXX
)tmp

很明显,子查询语句无论 left join、inner join都没啥区别了

2、查询条件放在on后面

1

2

3

select a.*,b.*

from table1 a

left join table2 b on b.X=a.X and XXX

注意:where XXX去掉,改为链接条件on后面的 and XXX

分析:

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

结论 a表和b表 做关联

1. on a.id=b.id and a.name='张三' 这种在on后边直接and 的对a表无效  只要不加where 左边永远都是全显示

2.on a.id=b.id where a.name='张三' 这种则查出只有是张三的数据

左连接的左边为什么不全显示相关推荐

  1. 连接查询 左连接 右连接 内连接 1112 sqlserver

    1112连接查询 内联连 关键词 inner join-on inner join...on 格式 表1 inner join 表2 on 表1.列 = 表2.列 表1 inner join 表2 o ...

  2. SQL 查询笔记:子查询,分组查询,左连接查询。。。。。

    表结构: CREATE TABLE dept ( id int NOT NULL, dname varchar ( 50 ) DEFAULT NULL, loc varchar ( 50 ) DEFA ...

  3. mysql内连接和外连接的区别_数据库左连接、右连接、内连接、全连接区别

    基本定义: left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录. right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录. inner j ...

  4. 数据库中查询的各种连接(左连接,右连接,全连接,内连接,交叉连接,自连接)...

    转:http://www.cnblogs.com/Caiqinghua/archive/2013/05/15/3079397.html 左右连接其实就是以哪个表为主(或者说为准),结果集为" ...

  5. sql的左连接,右连接,内连接

    环境: SQL工具(如Navicat,SQLyog) MySQL驱动 全局总结: 左连接:关注左边,右边没有就为空. 右连接:关注右边,左边没有就为空. 内连接:返回交集 必备: 两张或多张表格 一, ...

  6. sql查询:单表、多表、左连接、外连接、高级查询

    sql查询 一.sql语句 标准SQL包含了4种基本的语句类别: (1)DDL语句,数据定义语句,主要用来定义数据库,表名,字段,例如create,drop,alter. (2)DML语句,数据操作语 ...

  7. SQL中的各种连接的区别总结(内连接,左连接,左外连接,右连接,右外连接,全连接,全外连接)

    在数据库中建立两张表方便大家理解,teacher和student表(student表中的teacherid字段是对应teacher表中的ID,举个例子张三的老师就是李四,没有teacherid就是这个 ...

  8. SQL中的左连接与右连接,内连接有什么区别

    例子,相信你一看就明白,不需要多说 A表(a1,b1,c1) B表(a2,b2) 左连接: select A.*,B.* from A left outer join B on(A.a1=B.a2) ...

  9. 左右链接php,sql的左连接和右连接有什么区别

    sql的左连接和右连接区别:1.左连接只要左边表中有记录,数据就能检索出来,而右连接是只要右边表中有记录:2.左连接是已左边表中的数据为基准,而右联接是左向外联接的反向联接. 本文操作环境:Windo ...

最新文章

  1. java 报文长度计算_从TcpClient.GetStream()读取而不知道长度 - java
  2. 一篇非常好的transformer年度总结
  3. 中国人工智能学会通讯——智能语音技术与产业应用展望 1.2 智能语音产业应用的现状和挑战...
  4. Centos 6.5 监控路由器、思科交换机Nagios (三)
  5. RealPlayer 15正式发布 简体中文版下载
  6. python全套视频教程下载-老男孩python全套视频教程百度云资源下载
  7. 铭感文件目录_waf绕过
  8. Node.js 路由的简单使用
  9. .NET 5.0 RC1 发布,离正式版发布仅剩两个版本,与 netty 相比更具竞争力
  10. Spring Boot的自动配置的原理
  11. mysql中的sql
  12. UltraEdit 21 for Mac(超好用的高级文本编辑器)
  13. cmpp java代码_CMPP2.0 java实现基于 协议。 多个厂家的版本都有体现。 Develop 238万源代码下载- www.pudn.com...
  14. 学习笔记:FW内容安全概述
  15. 各邮箱的邮件接收服务器和发送服务器
  16. POJ 2503 Babelfish(map)
  17. 字节跳动年薪百万的测试开发=“半个产品+半个开发”?
  18. [网鼎杯 2020 青龙组]虚幻2 详解 (python脚本)
  19. EBAZ4205 ZYNQ HDMI扩展板 显示Linux桌面播放视频
  20. 当使用VMware给虚拟机扩展硬盘容量时,显示无法扩展容量并提示:在部分链上无法执行所调用的函数,请打开父虚拟磁盘。

热门文章

  1. python中try语句_python如何写try语句
  2. 一步一步的详细步骤在vm虚拟机里安装苹果雪豹系统
  3. 一键清理Linux缓存脚本
  4. Spring中的 @Lazy注解
  5. python 等差数列生成器
  6. 3个案例揭秘一个冷门吸粉渠道,有人在此操作日赚千元!
  7. marginalization
  8. Android studio 接入腾讯TBSx5内核的解决方案
  9. Spring Security - @PreAuthorize安全表达式hasRole、hasAuthority区别
  10. dart中list的map方法获取index