/*
A 和 B 两张表都只有一个 ID 字段

比如A表的数据为 ID 1,2,3,4,5,6

B表的数据为 ID 1,2,3

判断 JOIN 查询时候条件在 ON 和 WHERE 时的区别

ON 和 WHERE 查询顺序有关
标准查询关键字执行顺序为 FROM->WHERE->GROUP BY->HAVING->ORDER BY
LEFT JOIN 是在 FROM 范围内 所以先 ON 条件筛选表,然后两表再做 LEFT JOIN
而对于 WHERE 来说是在 LEFT JOIN 结果再次筛选
*/

select A.ID as AID, B.ID as BID
from A
left join
B
on A.ID = B.ID
where
B.ID<3;
/*
1.这个语句是先执行 LEFT JOIN 即是:
select A.ID as AID, B.ID as BID from A left join B on A.ID = B.ID
2.再将查询结果中的 B.ID < 3 筛选出来
*/

select A.ID as AID, B.ID as BID
from A
left join
B
on A.ID = B.ID and B.ID<3;

/*
1.这个语句是先安装 ON 条件 B.ID < 3 筛选出来,即是先执行:
select ID from B where ID < 3;
2.再将查询结果中的结果与A表做 LEFT JOIN,所以会保留A表所有的数据

ON与where的使用一定要注意场所:

(1):ON后面的筛选条件主要是针对的是关联表【而对于主表刷选条件不适用】。

(2):对于主表的筛选条件应放在where后面,不应该放在ON后面。

(3):对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件放置于ON后。

如果是想在连接完毕后才筛选就应把条件放置于where后面。

(4): 对于关联表我们其实可以先做子查询再做join

第二个sql语句等价于
select A.ID as AID, B1.ID as BID

from A left join ( select B.ID from B where B.ID < 3 )B1 on A.ID = B1.ID
*/

MySql数据查询中 left join 条件位置区别的更多相关文章

  1. MySql数据查询的逻辑蕴含条件问题

    SQL语言中没有蕴含逻辑运算.但是,可以利用谓词演算将一个逻辑蕴含的谓词等价转换为:p->q ≡┐p∨q. 我们通过一个具体的题目来分析:(具体的表和数据详见文章:Mysql数据库中的EXIST ...

  2. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  3. 笔记-4:mysql数据查询

    1.创建查询表 1.1 创建班级表 含义 字段名 数据类型 宽度 班级编号 classNo 字符型 6 班级名称 className 字符型 20 所属院系 department 字符型 30 年级 ...

  4. Django数据查询中对字段进行排序

    Django数据查询中对字段进行排序   第一种方法:使用order_by进行排序 Articlelist = Article.objects.filter(**kwargs).order_by('n ...

  5. docker mysql 数据持久化到本地、设置不区别表名大小写-清风柳絮-51CTO博客

    原文:docker mysql 数据持久化到本地.设置不区别表名大小写-清风柳絮-51CTO博客 Docker MySQL 把数据存储在本地目录,很简单,只需要映射本地目录到容器即可 1.加上-v参数 ...

  6. MySQL数据查询之多表查询

    多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...

  7. MySQL数据查询之单表查询

    单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...

  8. mysql 数据查询全讲

    数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询  ...

  9. nodejs mysql 数据查询例子

    1.安装nodejs 2.安装mysql  npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...

随机推荐

  1. Java函数式接口Function

    Function 提供了一个抽象方法  R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...

  2. Ubuntu16.04安装deb文件时提示:此软件来自第三方且可能包含非自由组件

    解决方式: 1.在Ubuntu软件中心安装GDebi. 2.安装好之后,选择这个要安装的deb文件右键,打开方式选择GDebi,然后输入管理员密码等待安装,期间如果不行需要重试几次. 3.另外的方法, ...

  3. php-fpm配置项

    php版本:php-7.3 全局配置 ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative ...

  4. 爱普生L201

    http://tech.sina.com.cn/b/2011-03-29/05481698131.shtml

  5. ArcEngine 打开AutoCAD文件的几种方法

    方法一. IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatur ...

  6. 【转】C++ 进程间的通讯(一):简单的有名管道实现

    原文: C++ 进程间的通讯(一):简单的有名管道实现 -------------------------------------------------- 进程间的通讯(一):简单的有名管道实现   ...

  7. VM虚拟机的网卡模式介绍

    (1)Bridged方式 用这种方式,虚拟系统的IP可设置成与本机系统在同一网段,虚拟系统相当于网络内的一台.独立的机器,与本机共同插在一个Hub上,网络内其他机器可访问虚拟系统,虚拟系统也可访问网络 ...

  8. gcc 5.2.0 编译安装笔记-20151110

    **转载请注明出处** by.haunying3 系统版本号 CentOS-6.6-x86_64-minimal 编译器 gcc-4.4.7通过yum安装 rpm -qa | grep gcc gcc ...

  9. C#的DataGridView如何修改字体

    在RowTemplate中可以修改字体和显示的格式(比如保留几位小数)                  

  10. Redis3.0--集群安装部署

    准备环境 操作系统:CentOS6.5  Redis3.0.0 192.168.3.154 192.168.3.158 192.168.3.160 192.168.3.162 一.安装 安装文件夹 / ...