第一次来电。
我对加入表格时的最佳做法有疑问。例如,以下两个查询都返回相同的结果:
SELECT i.id, p.first_name, p.last_name
FROM individuals i, profiles p
WHERE i.id = p.individual_id;
SELECT i.id, p.first_name, p.last_name
FROM individuals i INNER JOIN profiles p ON i.id = p.individual_id;
这两种方法的优缺点是什么?请让我知道你的想法。我对性能差异感兴趣,而且对查询的可读性、从一个 RDMS 到另一个的可移植性等感兴趣。
谢谢!
两个查询完全相同,应该返回完全相同的结果集,并且应该产生完全相同的执行计划。
但是第二个查询使用的是
ANSI-92 SQL
语法。第一个是使用旧(非常旧)版本的 SQL 连接。我可以想到一些你应该使用 ANSI-92 SQL 语法的原因。
Join Conditions
中的过滤器和实际过滤器分开。WHERE
INNER
和CROSS
连接。UNION
除了复杂的查询外,外连接是不可能的。一些 DBMS(+)
在 Oracle*=
和=*
SQL Server 中为外部连接添加了专有语法,但这些语法正在或已经被弃用。显式LEFT
连接RIGHT
和FULL
外连接已添加到标准中,并且已被几乎所有 DBMS 采用。CROSS JOIN
,以我的经验,这是旧方法最糟糕的缺点之一。