mysql left join on 后面的and 条件和 where条件区别

如:

select * from table_1 left join table_2 on table_1.id = table_2.t1_id and table_2.status > 0

select * from table_1 left join table_2 on table_1.id = table_2.t1_id where table_2.status > 0

发现两个查询存在差异。

为什么会存在差异,这和on与where查询顺序有关。

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

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

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

              放置于ON后。

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

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

时间: 2024-11-06 11:19:02

mysql left join on 后面的and 条件和 where条件区别的相关文章

mysql的join操作

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Nested-Loop Join Algorithms

MySQL在多表之间执行join时,利用一种nested-loop algorithm 或者其变种:(嵌套循环)  Nested-Loop Join Algorithm      一个简单的嵌套循环连接(NLJ)算法 从第一个表读取一行,然后传递给Join中的其他表依次读取,过程一直重复剩余的表都被Join. 假设在三个表t1,t2,t3做连接时: Table Join Type t1 range t2 ref t3 ALL 如下: for each row in t1 matching ran

MySQL的Join使用

在MySQL(以5.1为例)中,表连接的语法可以参见MySQL官方手册:MySQL官方手册-JOIN 在查询中,连接的语法类似 [sql] view plaincopy SELECT select_expr FROM table_references table_references(对表的引用)的定义如下(也可以看成连接表达式):(晕晕晕哈) [sql] view plaincopy table_references: table_reference [, table_reference] .

MYSQL中JOIN的用法

近期用phpcms v9做项目,初期没有问题,后期随着数据量的增大,phpcms v9后台出现的栏目更新不动的情况,初期我以为是程序的问题,进行了程序排查,没有发现任何问题,登录上centos服务器后free命令发现内存也没有满.瞬间感觉很蛋疼,不知如何处理,后来登录阿里云账号,发现更新栏目时,cpu使用率直接到达100%,xhell远程登录进入服务器后用top检测cpu使用率的情况,发现MySQL占用的cpu使用率的100%,直接登录进入MySQL数据库,输入show full process

MySQL Full Join的实现

MySQL Full Join的实现 由于MySQL不支持FULL JOIN,以下是替代方法 left join + union(可去除反复数据)+ right join select * from A left join B on A.id = B.id (where 条件) union select * from A right join B on A.id = B.id (where条件);

MySQL的JOIN(一):用法

JOIN的含义就如英文单词"join"一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接.这里描述先甩出一张用烂了的图,然后插入测试数据. CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), typeId INT ); SELECT * FROM t_blog; +----+-------+--------+ | id | title | typeId | +----+--

MySql Outer Join 简单化

查询from语句中的Outer Join可以在多种情况下被简化: 在解析阶段,右外连接操作可以被转变为等下ode值包含left join的操作,在一般情况下,转变: (T1, ...) RIGHT JOIN (T2,...) ON P(T1,...,T2,...) = (T2, ...) LEFT JOIN (T1,...) ON P(T1,...,T2,...) 所有inner join表达式形如(t1 inner join t2 on p(t1,t2))可以被(t1,t2,p(t1,t2))

Mysql的join语句

mysql超强功能之一:join # group by 必须放在 order by 和 limit之前,不然会报错 # 你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询. # JOIN 常用分为如下三类(但不仅仅只有这三类): # INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录:使用MySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样) # LEFT JOIN(左连接):获取左

MySQL忘记root密码后修改

MySQL忘记root密码后可以使用下面的方法修改. 1.登录MySQL所在的服务器,手工kill掉MySQL进程 kill `cat $mysql_data_dir/hostname.pid` $mysql_data_dir/hostname.pid为MySQL数据目录,它记录了MySQL服务的进程号. [[email protected] ~]# ps -ef |grep mysql root      6602     1  0 21:39 ?        00:00:00 /bin/s