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子句表达式中的一个连接条件,您会突然得到一个混乱的笛卡尔积。。。。。无法使用
内部联接
关键字(您必须表示要联接的字段)。基本上,您对联接使用了不同的语法。作为一种最佳实践,最好使用第一种语法(explicitJOIN
),因为它更清楚查询的意图,并且使代码更易于维护。这取决于RDBMS,但对于SQL server,我理解使用前一种语法可以实现更好的优化。这不是一个SQL问题,而是一个特定于供应商的问题
您还可以使用(SQL Server:)类型函数来帮助您了解是否存在差异。每个查询都是唯一的,我认为存储的统计信息可以(也将)改变行为 这两个都是连接。它们只是连接的两种不同的语法表示。第一个(使用“Join”关键字)是当前的ANSI标准(我认为是1992年)
仅在内部联接的情况下,两种不同的REENT表示形式在功能上是相同的,但一旦您习惯了后一种ANSI SQL92标准语法,就更容易阅读,因为每个单独的联接条件都与联接在一起的一对中间结果集相关联,在旧的表示形式中,联接条件在where子句中,条件和整个查询的过滤条件都放在一起,并且不清楚哪个是哪个。这使得识别不良连接条件(例如,将生成意外的笛卡尔积)变得更加困难
但可能更重要的是,在某些情况下,当执行外部连接时,较旧的语法并不等价,实际上会生成错误的结果集
所有查询都应该转换到较新的语法。类似于(如果不是完全相同的话)这个问题:在某些情况下,旧语法实际上更具可读性。通常这只是个人偏好的问题。