直到现在我的印象是当我们加入"两个表主要由"内连接"我们测试的条件是相等的,例如:
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;
基于此,我有点困惑"内部联接"真的很有意思。
任何人都可以帮我理解这个吗?
答案 0 :(得分:2)
这是一个SQL问题,并非特定于Oracle。在ON
条件中使用相等比较的联接称为 equi join 。使用不等式(<=
,>
,BETWEEN
,!=
等)的联接称为非等联接。显然,由于它们甚至具有技术名称,因此确实存在非等连接。 Google for&#34; non equi join&#34;你可能会找到很多例子。
加入条件也可能是非算术的;例如,您可以在A
上加入表B
和A.string LIKE B.init_fragment || '%'
- 您正在查找string
中A
列中以值开头的所有字符串init_fragment
中的B
列。
答案 1 :(得分:1)
在实践中,您通常会将外键/主键关系表达为join ... on
子句中的条件,但没有规则要求这样做。
语法允许您将join ... on
子句中的任何条件放在where
子句中,只要引用的表在范围内(即表中已加入的表) )。
join product on
子句中的条件通常会说明如何将产品记录加入到前面提到的表中(价格在你的情况下)。从更广泛的意义上讲,它告诉引擎哪些记录组合可以从结果中消除,甚至之前其余的表连接(如果有的话)。当然由SQL数据库引擎来执行优化并确定何时应用条件。
答案 2 :(得分:0)
否,内部联接可以具有非等联接条件。任何联接中基本上都有2个组件,一个是联接类型(可以是内部,左外部,右外部,完全外部等。),另一个是联接的执行方式(可以是等联接和非等联接)。您可以在这两个组件之间进行混合和匹配,以具有不同类型的连接,例如内部等值连接,内部非等值连接等。
希望这会有所帮助