ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

left jion on and 与 where 的区别

2022-06-07 11:32:02  阅读:152  来源: 互联网

标签:join testa jion NULL where id left


left jion on and 与 where 的区别

参考链接:https://blog.csdn.net/qq_33864656/article/details/77838258

参考链接:https://www.icode9.com/content-4-896261.html

以mysql为例子

小绿CREATE TABLE 
    testa 
    ( 
        id   INT NOT NULL, 
        name VARCHAR(20), 
        PRIMARY KEY (id) 
    ) 
    ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci;
CREATE TABLE 
    testb 
    ( 
        Id  INT NOT NULL, 
        age INT, 
        PRIMARY KEY (Id) 
    ) 
    ENGINE=InnoDB DEFAULT CHARSET=latin1 DEFAULT COLLATE=latin1_swedish_ci;
    
insert into testa values(1, '小黄');
insert into testa values(2, '小绿'); 
insert into testa values(3, '小白');
insert into testa values(4, '小黑');
insert into testB values(1, 10);
insert into testB values(2, 11);
insert into testB values(3, 12);
insert into testB values(4, 13);

通过例子说明:

使用left join on where,且where后跟的是右边的条件

-- 使用left join on where,且where后跟的是右边的条件
select * from testa a
left join testb b on a.id = b.id where b.age = 10;

结果:

id name id age
1 小黄 1 10

使用left join and且and后跟的是右边的条件

-- 使用left join and且and后跟的是右边的条件
select * from testa a
left join testb b on a.id = b.id and b.age = 10;

结果:

id name id age
1 小黄 1 10
2 小绿 (NULL) (NULL)
3 小白 (NULL) (NULL)
4 小黑 (NULL) (NULL)

使用left join on where,且where后跟的是左边的条件

-- 使用left join on where,且where后跟的是右边的条件
select * from testa a
left join testb b on a.id = b.id where a.name = '小黄';

结果:

id name id age
1 小黄 1 10

使用left join and且and后跟的是左边的条件

-- 使用left join and且and后跟的是左边的条件
select * from testa a
left join testb b on a.id = b.id and a.name = '小黄';

结果:

id name id age
1 小黄 1 10
2 小绿 (NULL) (NULL)
3 小白 (NULL) (NULL)
4 小黑 (NULL) (NULL)

总结

  1. where 是在两个表join完成后,再附上where条件。

  2. left/right join on and 是在表连接前筛选A表或B表那些数据符合条件,同时还是兼顾是left jion 还是inner join。即如果是left jion的话,如果left loin on and后的条件左边表的某条记录不满足,那么它不进行连接,但任然留在结果集中(此时右边部分的链接结果为NULL)。on条件是在生产临时表时使用的条件,它不管on中的条件是否为真,都会返回左表的记录。

  3. inner jion on and 结果与where一样。

  4. 建议尽量使用where来过滤条件。

标签:join,testa,jion,NULL,where,id,left
来源: https://www.cnblogs.com/annamaple/p/16351131.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有