left join 涉及多个关联条件时写在on后面与where后面有什么区别?
一、left join 涉及多个关联条件时写在on后面与where后面的区别
在 SQL 中,LEFT JOIN 连接操作是用来连接两个或多个表的。当涉及到多个关联条件时,这些条件可以写在 ON 后面,也可以写在 WHERE 后面。但是它们的作用是不同的。
如果多个关联条件写在 ON 后面,这些条件将被视为 LEFT JOIN 操作的一部分,并且将会影响到连接后的结果集。如果多个关联条件写在 WHERE 后面,这些条件将被视为对连接后的结果进行过滤。实例:
表1(product):
表2(product_details):
查询1:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
AND product.amount=200;
结果:
把on的所有条件作为匹配条件,不符合的右表都为null。
查询2:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
WHERE product.amount=200;
结果:
匹配完再筛选,结果只有一条记录。
二、SQL语言JOIN详解
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
不同的 SQL JOIN 类型:
INNER JOIN:如果表中有至少一个匹配,则返回行LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行FULL JOIN:只要其中一个表中存在匹配,则返回行下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法:
1、SQL INNER JOIN
语法:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
参数说明:
columns:要显示的列名。table1:表1的名称。table2:表2的名称。column_name:表中用于连接的列名。注释:INNER JOIN 与 JOIN 是相同的。
2、SQL LEFT JOIN
语法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
注释:在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN。
3、SQL RIGHT JOIN
语法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
注释:在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN。
4、SQL FULL JOIN
语法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
延伸阅读1:SQL是什么
SQL 指结构化查询语言,全称是 Structured Query Language。SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。

猜你喜欢LIKE
相关推荐HOT
更多>>
千万级用户的实时问答网站用什么语言,数据库和服务器有什么要求?
一、千万级用户的实时问答网站用什么语言,数据库和服务器有什么要求语言方面,可以选择像 Java、Python、Go 等支持高并发的编程语言。其中,Ja...详情>>
2023-10-15 20:29:42
目前主流的ERP系统开发软件是什么?
一、目前主流的ERP系统开发软件1、SAP ERPSAP是全球名列前茅的企业软件公司,其SAP ERP系统是较广泛应用的企业级解决方案之一。SAP ERP提供了全...详情>>
2023-10-15 17:10:14
为什么“去O”唯有PostgreSQL?
一、“去O”唯有PostgreSQL的原因“去O”是指”去Oracle”,即替代Oracle数据库。这种说法是因为在替代Oracle数据库的选择中,PostgreSQL是一个...详情>>
2023-10-15 14:47:53
mysql的MEMORY引擎为什么没有redis的应用广泛?
一、mysql的MEMORY引擎为什么没有redis的应用广泛从kv缓存的作用看,mysql优点不在kv缓存上,用它做kv缓存维护成本高,redis安装启动使用简单,...详情>>
2023-10-15 12:03:13热门推荐
为什么Impala要使用C++语言,而不是Java?
沸为什么使用Redis做缓存而不会使用关系型数据库?
热假设mysql的两条连接同时发送对同一个表同一条记录的update语句,mysql会怎么处理?
热为什么Redis先执行指令,再记录AOF日志?
新MySQL日均10万数据永久保存实现高可用可以采用什么方案?
Oracle数据库与SQL Server数据库有何区别?
千万级用户的实时问答网站用什么语言,数据库和服务器有什么要求?
为什么说“对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈”?
手机APP开发适合哪些行业?
left join 涉及多个关联条件时写在on后面与where后面有什么区别?
Linux下有什么工具可以分析出一个程序的运算时间分布?
oracle数据库为什么按cpu个数收费?
主流web开发技术有哪些?
系统功能架构图和数据库建模一般用什么工具?
技术干货






