SQL-连接的好处?

SQL-连接的好处?,sql,tsql,Sql,Tsql,可能重复: 嗨 我总是在没有连接的情况下检索数据 但是一种方法比另一种方法有好处吗 select * from a INNER JOIN b on a.a = b.b; select a.*,b.* from a,b where a.a = b.b; 谢谢 您总是使用联接检索数据。第二个查询使用的是旧语法,但在后台它仍然是join:)我认为最大的好处是可读性。具有显式命名联接类型的版本对我来说更容易理解。使用内部联接关键字的第一种方法是: ANSI SQL标准 更干净,更有表现力 因

可能重复:

我总是在没有连接的情况下检索数据

但是一种方法比另一种方法有好处吗

select * from a INNER JOIN b on a.a = b.b;

select a.*,b.*  from a,b where a.a = b.b;

谢谢

您总是使用联接检索数据。第二个查询使用的是旧语法,但在后台它仍然是join:)

我认为最大的好处是可读性。具有显式命名联接类型的版本对我来说更容易理解。

使用
内部联接
关键字的第一种方法是:

  • ANSI SQL标准
  • 更干净,更有表现力
因此,当我看到第二个选项被使用时,我总是畏缩不前——它只会使您的
WHERE
子句膨胀,而您无法一眼就看到表是如何连接的(在哪些字段上)


如果您碰巧忘记了一长串WHERE子句表达式中的一个连接条件,您会突然得到一个混乱的笛卡尔积。。。。。无法使用
内部联接
关键字(您必须表示要联接的字段)。

基本上,您对
联接使用了不同的语法。作为一种最佳实践,最好使用第一种语法(explicit
JOIN
),因为它更清楚查询的意图,并且使代码更易于维护。

这取决于RDBMS,但对于SQL server,我理解使用前一种语法可以实现更好的优化。这不是一个SQL问题,而是一个特定于供应商的问题


您还可以使用(SQL Server:)类型函数来帮助您了解是否存在差异。每个查询都是唯一的,我认为存储的统计信息可以(也将)改变行为

这两个都是连接。它们只是连接的两种不同的语法表示。第一个(使用“Join”关键字)是当前的ANSI标准(我认为是1992年)

仅在内部联接的情况下,两种不同的REENT表示形式在功能上是相同的,但一旦您习惯了后一种ANSI SQL92标准语法,就更容易阅读,因为每个单独的联接条件都与联接在一起的一对中间结果集相关联,在旧的表示形式中,联接条件在where子句中,条件和整个查询的过滤条件都放在一起,并且不清楚哪个是哪个。这使得识别不良连接条件(例如,将生成意外的笛卡尔积)变得更加困难

但可能更重要的是,在某些情况下,当执行外部连接时,较旧的语法并不等价,实际上会生成错误的结果集


所有查询都应该转换到较新的语法。

类似于(如果不是完全相同的话)这个问题:在某些情况下,旧语法实际上更具可读性。通常这只是个人偏好的问题。