Sql 在联接条件中传递输入

Sql 在联接条件中传递输入,sql,oracle,join,Sql,Oracle,Join,这两个查询的逻辑是否相同?哪一个合适 SELECT * FROM TESTTABLE1 TBL1 INNER JOIN TESTTABLE2 TBL2 ON TBL2.ID = '123' WHERE TBL2.APP_ID = TBL1.ID; SELECT * FROM TESTTABLE1 TBL1 INNER JOIN TESTTABLE2 TBL2 ON TBL2.APP_ID = TBL1.ID WHERE TBL2.ID = '123'; 请解释一下,谢谢, SELECT *

这两个查询的逻辑是否相同?哪一个合适

SELECT *
FROM TESTTABLE1 TBL1
INNER JOIN TESTTABLE2 TBL2 ON TBL2.ID = '123'
WHERE TBL2.APP_ID = TBL1.ID;

SELECT *
FROM TESTTABLE1 TBL1
INNER JOIN TESTTABLE2 TBL2 ON TBL2.APP_ID = TBL1.ID
WHERE TBL2.ID = '123';
请解释一下,谢谢,

SELECT *
FROM TESTTABLE1 TBL1
INNER JOIN TESTTABLE2 TBL2 ON TBL2.ID = '123'
WHERE TBL2.APP_ID = TBL1.ID;
第一个将返回id号“123”的id及其行(如果有)

SELECT *
FROM TESTTABLE1 TBL1
INNER JOIN TESTTABLE2 TBL2 ON TBL2.APP_ID = TBL1.ID
WHERE TBL2.ID = '123';
第二个将返回所有id,但只有id“123”将具有与其关联的任何行

对于内部联接,子句实际上是等价的。然而,仅仅因为它们在功能上相同,产生相同的结果,并不意味着这两类从句具有相同的语义

第一个将返回id号“123”的id及其行(如果有)

SELECT *
FROM TESTTABLE1 TBL1
INNER JOIN TESTTABLE2 TBL2 ON TBL2.APP_ID = TBL1.ID
WHERE TBL2.ID = '123';
第二个将返回所有id,但只有id“123”将具有与其关联的任何行


对于内部联接,子句实际上是等价的。但是,仅仅因为它们在功能上是相同的,即它们产生相同的结果,并不意味着这两种子句具有相同的语义。

ON子句旨在定义连接两个表的条件,WHERE子句旨在对连接的结果集应用附加的过滤器。这种清晰的意图是ANSI 92语法的优点之一

第二个查询符合此目的,并且易于阅读

另一方面,第一个问题抛弃了这种清晰性。它在ON子句中具有筛选器,在WHERE子句中具有联接条件。它更难理解,因为它不符合事物的预期方式。阅读这样一条语句会让我们感到困惑,因为现在我们正试图弄清楚为什么您会这样编写查询,而不是以正常方式编写查询


所以不要这样做。无论它是否产生与第二个查询相同的结果,都没有理由故意编写混乱的代码

ON子句用于定义联接两个表的条件,WHERE子句用于对联接的结果集应用附加筛选器。这种清晰的意图是ANSI 92语法的优点之一

第二个查询符合此目的,并且易于阅读

另一方面,第一个问题抛弃了这种清晰性。它在ON子句中具有筛选器,在WHERE子句中具有联接条件。它更难理解,因为它不符合事物的预期方式。阅读这样一条语句会让我们感到困惑,因为现在我们正试图弄清楚为什么您会这样编写查询,而不是以正常方式编写查询

所以不要这样做。无论它是否产生与第二个查询相同的结果,都没有理由故意编写混乱的代码

这可能有用这可能有用