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. 有趣的Github项目万里挑一 !(附论文、项目链接)
  2. C语言函数strstr()分析及实现
  3. laravel5.6 分页样式目录
  4. InstallShield使用——菜单部分
  5. 再见了微服务,DDD已成气候!
  6. 2018 ICPC Asia Jakarta Regional Contest
  7. 请求和响应向更多内容
  8. input内容右对齐_向右打方向倒库过程中,如何判断后车距离?光线较暗车库倒库技巧...
  9. OpenShift 4 - DevSecOps Workshop (15) - 利用OpenShift GitOps向多个目标部署应用
  10. python成长之路10——socketserver源码分析
  11. 对string类型字符串操作
  12. 【CentOS 7架构8】,域名跳转#171221
  13. 2021年南宁二中高考成绩查询,2021年广西南宁二中高考物理冲刺试卷(一).docx...
  14. zabbix中mysql连不上的排错_zabbix使用排错 - oschina130111的个人空间 - OSCHINA - 中文开源技术交流社区...
  15. java 构造函数嵌套_java – spring – 构造函数注入和覆盖嵌套bean的父定义
  16. 【纯干货】中国的支付清算体系是怎么玩的?
  17. ubuntu显卡测试软件,Linux显卡性能测试程序Unigine Valley 和 Unigine Heaven
  18. 基于Pytorch实现的声音分类
  19. HCIP 数通资料下载 肖哥视频
  20. 服务器软硬件安装和配置,Windows Server 2016-系统安装软硬件要求

热门文章

  1. flex布局具体的属性字段和属性值
  2. 清华姚班90后学霸、MIT博士吴佳俊即将加入斯坦福任助理教授
  3. PHP开发APP接口全过程(一)
  4. python怎么小数向上取整_python向上取整怎么还有小数部分
  5. android+减小视频占用空间,手机拍摄视频占用空间太大是怎么回事 【解决方法】...
  6. sharepoint入门。
  7. 怎么退出fastboot模式10
  8. Xmind基本操作,和一些快捷键,以及合并两棵树
  9. 一入wine深似海,从此奋战到天明
  10. 新手站长小白该如何选择云服务器配置?