t1:

num | name
-----+------
1      | a
2      | b
3      | c

t2:

num | value
-----+-------
1    | xxx
3    | yyy
5    | zzz

1. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';

2. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num WHERE t2.value = 'xxx';

这两种写法结果是会不一样的:

1. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx'; =>

num | name | num | value
-----+------+-----+-------
1 | a | 1   | xxx
2 | b |    |
3 | c |      |

2. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num WHERE t2.value = 'xxx';

num | name | num | value
-----+------+-----+-------
1    |       a | 1     | xxx

解释:(这是因为在ON子句连接之处理,而WHERE子句在连接之处理。)

我们先看第二种:2. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num WHERE t2.value = 'xxx';

这个可以分两步:

1)SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num => 假设生成了一个新的虚拟表:t12

num | name | num | value
-----+------+-----+-------
1    | a       | 1     | xxx
2      | b       |      |
3      | c       | 3     | yyy

2) SELECT * FROM t12 WHERE t12.value = 'xxx';

num | name | num | value
-----+------+-----+-------
1    |       a | 1     | xxx

再看第一种:1. SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num AND t2.value = 'xxx';

这里已经明确规定从t2表选择的数据中value要等于'xxx'的, 这是t2只有一条符合,所以这返回一条,其余的用NULL不全到LEFT JOIN 的t1表

num | name | num | value
-----+------+-----+-------
1 | a | 1   | xxx
2 | b |    |
3 | c |      |

left join 条件区别的更多相关文章

  1. sql之left join、right join、inner join的区别

    sql之left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括 ...

  2. left join 和 left outer join 的区别

    left join 和 left outer join 的区别 通俗的讲:    A   left   join   B   的连接的记录数与A表的记录数同    A   right   join   ...

  3. SQL Server之LEFT JOIN、RIGHT LOIN、INNER JOIN的区别

    很多人刚入门的时候分不清LEFT JOIN.RIGHT LOIN 和 INNER JOIN的区别,对它们的定义比较模糊,今天就简单的介绍一下它们的区别,对于入门的人来说,应该能够帮助你们理解. lef ...

  4. sql之left join、right join、inner join的区别,连接自己时的查询结果测试

    sql之left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括 ...

  5. MySQL关联left join 条件on与where不同

    以下的文章主要讲述的是MySQL关联left join 条件on与where 条件的不同之处,我们现在有两个表,即商品表(products)与sales_detail(销售记录表).我们主要是通过这两 ...

  6. 转载---sql之left join、right join、inner join的区别

    原文地址:http://www.cnblogs.com/pcjim/articles/799302.html sql之left join.right join.inner join的区别 left j ...

  7. SQL夯实基础(一):inner join、outer join和cross join的区别

    一.数据构建 先建表,再说话 create database Test use Test create table A ( AID ,) primary key, name ), age int ) ...

  8. inner join 和 left join 的区别

    1.left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表 ...

  9. right join 和left join 的区别

    SQL 数据库 right join 和left join 的区别   left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中 ...

随机推荐

  1. mvc razor中renderPartial,RenderAction,Partial,Action的使用选择

    RenderPartial: 通常被用来显示一个功能相对独立的“块”,比如说显示菜单或者导航条. RenderPartial输出的结果被作为调用的View的一部分显示. 这个方法会直接将结果写入到当前 ...

  2. Python基本语法,python入门到精通[二]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现 ...

  3. my_shell

    #include<stdio.h> #include<unistd.h> #include<string.h> #include<stdlib.h> # ...

  4. Linux IPC udp/ip socket 编程

    模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...

  5. Linux系统管理命令之用户管理

    1.添加用户useradd   2.删除用户userdel userdel aming 彻底删除用户(包括删除用户目录) userdel -r aming 3.用户修改usermod    

  6. Ubuntu下安装Pyenv不成功,求指教

    虚拟机:VMware12.0 操作系统:Ubuntu16.04 LTS (新安装系统) 已经按照网上的步骤: 1.安装git: $sudo apt-get install git 2.安装依赖包: $ ...

  7. android PopupWindow使用实例

    注:点空白或菜单外隐藏popupwindow菜单: 但是,若点击有点击事件的组件则要再写代码手动隐藏: @Override public boolean onTouchEvent(MotionEven ...

  8. Java基础语法总结2

    三.运算符 Java基 本 的 运 算 符 按功能分有 下 面 几 类 : 1.算 术 运 算 符 (+,-,*,/,%,++,--) Java对 加 运 算 符 进 行 了 扩 展 ,使 它 能 够 ...

  9. C# FTP 命令无法获取ServerU目录列表问题

    第一步:  使用C# 的Ftp功能时,发现了一个很奇怪的现象,获取目录列表的命令,在SeverU上面直接返回错误,而在windows自带的FTP上则正常,经过反复试验,终于发现,原来是ServerU默 ...

  10. Nagios监控ganglia的指标

    这是nagios与ganglia整合的一部分内容 . 通常我们会把ganglia的监控发送给一个主机,我们可以在这个主机上执行nc localhost 8649 可以获取到所有发往这个主机的信息,以x ...