/*
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. 激活IDEA 2019.1

    First step: 先下载jar包JetbrainsCrack.jar,把它放到你认为合适的文件夹内, 我放在了安装目录C:\Program Files\JetBrains\IntelliJ ID ...

  2. 采用jmeter和泛化测试dubbo服务接口

    采用jmeter和泛化测试dubbo服务接口 http://blog.csdn.net/linuu/article/details/54313560

  3. dstat用法;利用awk求dstat所有列每列的和;linux系统监控

    安装:yum install -y dstat dstat命令是一个用来替换vmstat.iostat.netstat.nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具.与sys ...

  4. 移动端 js 实现图片上传 预览

    方法一: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q ...

  5. Django学习系列之django分页

    基本语法实例 from django.core.paginator import Paginator objects = Post.objects.filter(status='published') ...

  6. java MAT 分析

    java MAT 分析 http://blog.csdn.net/qeqeqe236/article/details/43577857 https://www.cnblogs.com/AloneSwo ...

  7. hdu 5386 Cover (暴力)

    hdu 5386 Cover Description You have an matrix.Every grid has a color.Now there are two types of oper ...

  8. chrome.socket

    chrome.socket https://chajian.baidu.com/developer/apps/socket.html#method-create 描述: 使用 chrome.socke ...

  9. Raphael.js API 之Element.remove(),Element.removeData(),paper.text(),Element.node(),Element.onDragOver

    /*API-38*/ Element.remove() 删除某个元素对象,无返回值 /*API-39*/ Element.removeData([key]); 删除某个key的value值.假设没有特 ...

  10. 2016/1/14 java生成指定范围的随机数

    java生成指定范围的随机数 package edu.sjtu.erplab.io; import java.util.Random; public class RandomTest { public ...