SQL INNER JOIN 语法

2023-12-29

下面的两位 SQL 得到相同的结果

SELECT c.name, o.product  
FROM customer c, order o  
WHERE c.id = o.cust_id  
AND o.value = 150  

SELECT c.name, o.product  
FROM customer c  
INNER JOIN order o on c.id = o.cust_id  
WHERE o.value = 150

我见过这两种风格在不同的公司被用作标准。据我所知,网上大多数人推荐的是第二个。除了风格之外,还有什么真正的原因吗?使用内连接有时会具有更好的性能吗?

我注意到 Ingres 和 Oracle 开发人员倾向于使用第一种风格,而 Microsoft SQL Server 用户倾向于使用第二种风格,但这可能只是巧合。

感谢您的任何见解,我想知道这个问题有一段时间了。

编辑:我更改了“SQL 内连接与笛卡尔积”的标题,因为我使用了不正确的术语。感谢迄今为止所有的回复。


这两个查询都是内部联接和等效查询。第一种是较旧的处理方法,而 JOIN 语法的使用在 SQL-92 标准引入后才变得普遍(我相信它是在较旧的定义中,只是在那之前并没有特别广泛使用)。

强烈建议使用 JOIN 语法,因为它将连接逻辑与 WHERE 子句中的过滤逻辑分开。虽然 JOIN 语法实际上是内连接的语法糖,但它的优势在于外连接,其中旧的 * 语法可能会产生无法明确描述连接并且解释依赖于实现的情况。 [左|右] JOIN 语法避免了这些陷阱,因此为了保持一致性,在所有情况下都最好使用 JOIN 子句。

请注意,这两个示例都不是笛卡尔积。为此你可以使用

SELECT c.name, o.product  
FROM customer c, order o  
WHERE o.value = 150  

or

SELECT c.name, o.product  
FROM customer c  CROSS JOIN order o 
WHERE o.value = 150
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL INNER JOIN 语法 的相关文章

随机推荐

  • 我的水晶报表在传递参数时没有刷新?

    我已经使用 Crystal Reports 本身中的 SQL 查询创建了 Crystal Reports 通过传递两个参数 即 例如 月和年 当我预览报告时 我可以通过传递不同的参数来浏览所有页面并且其工作正常 但是在通过浏览器查看报告时
  • ng-view 未显示解析

    我以这种方式使用解析 似乎是这样做的标准方法 但视图没有显示 我错过了什么想法吗 此致 angular module fifaApp ngRoute config function routeProvider routeProvider w
  • 如何显示图像的完整尺寸?

    我是新来的 也是 Android 编程新手 我在互联网上的一个网站上找到了这个示例 下面是示例 这是一个很棒的教程 我想要实现的是 当我单击 GridView 上的图片时 我想显示图像的完整大小 public class MainActiv
  • 如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?

    library RDCOMClient create outlook object OutApp lt COMCreate Outlook Application 我想从名为 AUX 的 Outlook 文件夹中检索今天的电子邮件 解析电子
  • 在 XML 中使用包名称

    我正在使用 Android Studio 来构建我的应用程序 我想用gradle构建类型 我使用 applicationIdSuffix 在包名称中添加后缀 以修改测试构建类型的包名称 buildTypes debug runProguar
  • 服务工作人员错误:事件已响应

    我不断收到此错误 未捕获 承诺中 DOMException 无法在 FetchEvent 上执行 respondWith 该事件已被响应 我知道如果 fetch 函数中发生异步操作 服务工作人员会自动响应 但我无法完全弄清楚这段代码中的哪一
  • 第一次失败时停止 Fluent Validation

    我正在为我的请求对象定义验证 我希望验证器在第一次失败时停止 而不仅仅是同一条链上的失败 在下面的例子中 如果我的TechnicalHeader对象为空 当验证达到规则时 我收到 NullReference 异常TechnicalHeade
  • 如何将 Flask 静态指向 Amazon S3 URL?

    我有一个在 Heroku 上托管的 Flask 应用程序 但希望从 Amazon S3 提供静态文件 在我的模板中 我使用 url for 来引用静态文件 在 Flask 应用程序的初始化中 我想把 app Flask name stati
  • 为什么要避免使用“是”和“不是”?

    我刚刚开始使用 Python 我的在线教授推荐使用is and is not仅当将值与True False or None 或者至少我是这么理解他所说的话的 现在在我的脑海里 我等同于is使用 JavaScript and is not使用
  • Python 3.x Beautifulsoup 爬取图片url

    我正在尝试使用Python进行图像URL爬行 通过开发工具确认Google图片搜索窗口 图片URL约有100个 向下滚动会出现更多 URL 不过 没关系 问题是我只得到了 20 个 URL 我在 html 文件中打开了一个可寻址请求 我确认
  • 在 Android Studio 单元测试功能中获取 Android TestCase 或 Instrumentation TestCase 中的上下文

    我使用 Android Studio 1 1 0 的新单元测试支持功能运行了一些旧测试 运行 gradlew testDebug 时 测试会运行 但所有需要 Context 的测试都会失败 因为getContext Android测试用例
  • 记录 Sequelize 迁移

    刚刚开始使用 Sequelize 并尝试让迁移工作 并希望了解迁移实际上针对数据库运行的 SQL 我找到了一个github评论 https github com sequelize sequelize issues 610 issuecom
  • 从用 C++ 编写的文件中从 pyarrow 中的字段和架构中读回 KeyValueMetadata

    如果我使用脚本编写一个简单的 Parquet 文件简单写入镶木地板 cpp https gist github com dantrim 33f9f14d0b2d3ec45c022aa05f7a45ee 我希望有一个带有单列的简单 Parqu
  • silverlight 3 中 RadialGradient 画笔颜色的数据绑定

    我正在尝试将 silverlight 3 中 RadialGradientBrush 的颜色数据绑定到属性 但似乎无法让它工作 例如 在示例测试应用程序中 我所拥有的只是
  • 什么是 AutoFixture AutoMoq?

    当我注意到 AutoFixture AutoMoq 时 我正在查看 nuget 并想导入 moq 我看到 AutoFixture 是为了帮助更快地编写 TDD 但我找不到 AutoMoq 的任何示例以及它与 AutoFixture 有何不同
  • 如何动态设置 Form.Item 验证所需的规则

    我有一个可以检查或不检查的参数列表 其对应字段的启用 禁用取决于复选框状态 因此 我想在选中参数时启用并验证字段 并在未选中复选框时禁用字段并关闭验证规则 但我无法切换required规则到false切换复选框时 正如你所看到的regist
  • 在 .Net 4.7.2 中导入 AngleSharp 时绑定重定向以某种方式尝试将 NetStandard 2 作为 dll 引入

    我有一个旧版应用程序在旧的 Windows 2008 R2 服务器上运行 该应用程序已经经历了多个 Net版本 目前为4 7 2 它多年来一直坚如磐石 虽然有迁移计划从旧的物理服务器上迁移 但它必须再活一段时间 一项新功能发现需要进行一些
  • 浮动元素上的填充[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MIPS - 将输入字符串与存储在内存中的字符串进行比较

    我有一个用 MIPS 编写的有效字符串比较方法 对用户输入的两个字符串进行逐位比较 但我正在尝试更新它以将第二个输入与我存储在内存中的输入进行比较 如果这两个相等 我想在其他地方使用第一个字符串 但是 我遇到了一些问题 这是我的代码 dat
  • SQL INNER JOIN 语法

    下面的两位 SQL 得到相同的结果 SELECT c name o product FROM customer c order o WHERE c id o cust id AND o value 150 SELECT c name o p