(在oracle中)在性能上有区别吗

Select * from Table1 T1 
Inner Join Table2 T2 On T1.ID = T2.ID

And

Select * from Table1 T1, Table2 T2 
Where T1.ID = T2.ID

?


当前回答

它们都是连接,做同样的事情。

在MySQL查询中,为什么使用join而不是where?

其他回答

它们都是做同样事情的内部连接,一个只是使用更新的ANSI语法。

不!同样的执行计划,请看下面两个表:

CREATE TABLE table1 (
  id INT,
  name VARCHAR(20)
);

CREATE TABLE table2 (
  id INT,
  name VARCHAR(20)
);

使用内部连接的查询的执行计划:

-- with inner join

EXPLAIN PLAN FOR
SELECT * FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id;

SELECT *
FROM TABLE (DBMS_XPLAN.DISPLAY);

-- 0 select statement
-- 1 hash join (access("T1"."ID"="T2"."ID"))
-- 2 table access full table1
-- 3 table access full table2

以及使用WHERE子句的查询的执行计划。

-- with where clause

EXPLAIN PLAN FOR
SELECT * FROM table1 t1, table2 t2
WHERE t1.id = t2.id;

SELECT *
FROM TABLE (DBMS_XPLAN.DISPLAY);

-- 0 select statement
-- 1 hash join (access("T1"."ID"="T2"."ID"))
-- 2 table access full table1
-- 3 table access full table2

它们应该完全一样。然而,作为一种编码实践,我宁愿看到Join。它清楚地表达了你的意图,

它们在逻辑上是相同的,但是在采用ANSI语法的Oracle早期版本中,在更复杂的情况下经常会出现错误,所以在使用它时有时会遇到来自Oracle开发人员的阻力。

它们都是连接,做同样的事情。

在MySQL查询中,为什么使用join而不是where?