在SQL中,我试图根据ID过滤结果,并想知道之间是否存在任何逻辑差异
SELECT value
FROM table1
JOIN table2 ON table1.id = table2.id
WHERE table1.id = 1
和
SELECT value
FROM table1
JOIN table2 ON table1.id = table2.id AND table1.id = 1
在我看来,逻辑似乎是不同的,尽管您总是会得到相同的结果集,但是我想知道是否存在任何条件下您会得到两个不同的结果集(或者它们是否总是返回完全相同的两个结果集)
答案没有区别,但是:
我将始终喜欢执行以下操作。
ON
条款where
子句这使查询更具可读性。
因此,我将使用以下查询:
SELECT value
FROM table1
INNER JOIN table2
ON table1.id = table2.id
WHERE table1.id = 1
但是,在使用OUTER JOIN'S
过滤器时,保持过滤器的ON
状态和Where
状态有很大的不同。
逻辑查询处理
以下列表包含查询的一般形式,以及根据逻辑上处理不同子句的顺序分配的步骤号。
(5) SELECT (5-2) DISTINCT (5-3) TOP(<top_specification>) (5-1) <select_list>
(1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate>
| (1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias>
| (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias>
| (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias>
(2) WHERE <where_predicate>
(3) GROUP BY <group_by_specification>
(4) HAVING <having_predicate>
(6) ORDER BY <order_by_list>;
流程图逻辑查询处理
(1)FROM:FROM阶段标识查询的源表并处理表运算符。每个表运算符都应用一系列子阶段。例如,联接中涉及的阶段是(1-J1)笛卡尔积,(1-J2)ON过滤器,(1-J3)添加外部行。FROM阶段生成虚拟表VT1。
(1-J1)笛卡尔积:此阶段在表运算符所涉及的两个表之间执行笛卡尔积(交叉联接),生成VT1-J1。
它从《T-SQL查询(开发人员参考)》一书中引用
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句