在SQL内部加入中,我们总是检查是否相等?

时间:2017-04-30 19:34:23

标签: oracle join inner-join

直到现在我的印象是当我们加入"两个表主要由"内连接"我们测试的条件是相等的,例如:

select sales.sales_date, sales.order_id, sales.product_id, product.product_name  from sales INNER JOIN product ON sales.PRODUCT_ID = product.PRODUCT_ID;

并且已经看到了一些解释它的维恩图,如here

In"内部联接"我们总是测试条件的相等性吗?

我尝试了这个查询,我也能看到一些输出。

select sales.sales_date, sales.order_id, sales.product_id, product.product_name  from sales INNER JOIN product ON sales.PRODUCT_ID != product.PRODUCT_ID;

基于此,我有点困惑"内部联接"真的很有意思。

任何人都可以帮我理解这个吗?

3 个答案:

答案 0 :(得分:2)

这是一个SQL问题,并非特定于Oracle。在ON条件中使用相等比较的联接称为 equi join 。使用不等式(<=>BETWEEN!=等)的联接称为非等联接。显然,由于它们甚至具有技术名称,因此确实存在非等连接。 Google for&#34; non equi join&#34;你可能会找到很多例子。

加入条件也可能是非算术的;例如,您可以在A上加入表BA.string LIKE B.init_fragment || '%' - 您正在查找stringA列中以值开头的所有字符串init_fragment中的B列。

答案 1 :(得分:1)

在实践中,您通常会将外键/主键关系表达为join ... on子句中的条件,但没有规则要求这样做。

语法允许您将join ... on子句中的任何条件放在where子句中,只要引用的表在范围内(即表中已加入的表) )。

join product on子句中的条件通常会说明如何将产品记录加入到前面提到的表中(价格在你的情况下)。从更广泛的意义上讲,它告诉引擎哪些记录组合可以从结果中消除,甚至之前其余的表连接(如果有的话)。当然由SQL数据库引擎来执行优化并确定何时应用条件。

答案 2 :(得分:0)

否,内部联接可以具有非等联接条件。任何联接中基本上都有2个组件,一个是联接类型(可以是内部,左外部,右外部,完全外部等。),另一个是联接的执行方式(可以是等联接和非等联接)。您可以在这两个组件之间进行混合和匹配,以具有不同类型的连接,例如内部等值连接,内部非等值连接等。

希望这会有所帮助