内连接与equi-join相同吗?

时间:2011-03-29 10:27:13

标签: sql oracle join

你能告诉我内连接和等连接是否相同?

7 个答案:

答案 0 :(得分:40)

“内连接”与一般术语中的“等连接”不同。

'equi-join'表示使用相等运算符或等效运算符连接表。如果它仅使用相等性(其他人可能不同意),我仍然会将外连接称为“等连接”。

'inner join''outer join'相对,并确定在没有匹配值时如何连接两个集。

答案 1 :(得分:30)

我发现了这篇文章,猜测它可以回答你的问题。

  

他们是无关的。

     

几乎所有的连接都是等值连接,   因为匹配的条件   行基于两个相等   值 - 来自每个表的一个   加入。这就是它的成功   等值连接:ON状态是   平等。这包括内连接   和所有三种类型的外连接。

     另一方面,内部联接可以是   基于相等性来匹配行,或者基于   一些其他条件完全。如果它是   不是等值的,那通常是   称为theta join,尽管如此   确切地说,等值连接只是其中之一   可能的theta加入;其他theta   联接使用少于,少于或   等等,作为比较   操作

Read the whole article

答案 2 :(得分:7)

答案是否定的。

equi-join 用于使用显式运算符 = 匹配两个表中的两列:

示例:

select *
  from table T1, table2 T2
  where T1.column_name1 = T2.column_name2

内部联接用于获取两个表之间的交叉产品,组合两个表中的所有记录。要获得正确的结果,您可以使用等连接或一个自然连接(表之间的列名必须相同)

使用equi-join(显式和隐式)

select *
  from table T1 INNER JOIN table2 T2
  on T1.column_name = T2.column_name

select *
  from table T1, table2 T2
  where T1.column_name = T2.column_name

或使用自然联接

select *
  from table T1 NATURAL JOIN table2 T2

HTH

答案 3 :(得分:5)

简单地说: equi-join是一种可能的内连接类型

有关更深入的解释:

  

内连接是一种连接,它只返回满足特定条件的连接表中的行。这种情况可能是平等的,这意味着我们会有equi-join;如果条件不是平等 - 可能是不平等,大于,小于,等等 - 我们有一个nonequi-join,更准确地称为theta-join。

     

如果我们不希望必须满足这些条件,我们就可以   外连接(返回的所有表中的所有行),左连接(所有行   从左表返回,只匹配右表),右连接   (返回右表中的所有行,仅匹配左表)。

答案 4 :(得分:3)

答案是否定的,这是读者的简单和简单。

内连接可以在连接条件中具有相等(=)和其他运算符(例如<,>,<>)。

Equi join 在连接条件中只有等于(=)运算符。

Equi join 可以是内连接,左外连接,右外连接

答案 5 :(得分:1)

如果必须有区别,那么我认为它是。我用DB2测试过它。 在'equi join'中,你必须选择正在连接的表的比较列,在内连接中,你不必强制执行。示例: -

Select k.id,k.name FROM customer k
inner join  dealer on(
k.id =dealer.id
)

此处生成的行只有两列

id    name

但我认为在equi join中你也必须选择其他表的列

Select k.id,k.name,d.id FROM customer k,dealer d
where
k.id =d.id

这会导致有三列的行,你不可能在这里找到不需要的经销商比较列(即使你不想要它),行看起来像

 id(from customer) name(from Customer) id(from dealer)

可能这不适用于你的问题。但这可能是主要区别之一。

答案 6 :(得分:0)

答案是肯定的,但作为结果集。所以这是一个例子。

考虑三个表:

订单(ord_no,purch_amt,ord_date,customer_id,salesman_id)

客户(customer_id,cust_name,city,grade,salesman_id)

推销员(salesman_id,名称,城市,佣金)

现在,如果我有这样的查询:

查找订单的详细信息。

使用INNER JOIN:

<html ng-app='FormApp'>
 <head>
 </head>
 <body ng-controller='contactsCtrl'>
 <form ng-show="addFormShow">
    <h3>Add Contact</h3>
    <!-- Add form -->
    <div class="row">
        <div class="large-6 columns">
            <label>Name:
        <input type="text" ng-model="name" placeholder="Contact Name" required />
    </label>
        </div>
        <div class="large-6 columns">
            <label>Email:
        <input type="text" ng-model="email" placeholder="Contact Email" required />
    </label>
        </div>
    </div>
    <div class="row">
        <div class="large-12 columns">
            <input type="submit" value="Add Contact" class="button" />
        </div>
    </div>
</form>
<div class="small-12 large-2 columns">
    <a class="button large" ng-click="showAddForm()">+</a>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js">
</script>
<script>
    angular.module('FormApp', []).controller('contactsCtrl', ['$scope', function($scope) {

        $scope.showAddForm = function() {
            $scope.addFormShow = true;
        }
    }]);
</script>
</body>
</html>

使用EQUI JOIN:

SELECT * FROM orders a INNER JOIN customer b ON a.customer_id=b.customer_id 
INNER JOIN salesman c ON a.salesman_id=c.salesman_id;

执行两个查询。您将获得相同的输出。

来到你的问题 equijoin和内连接的输出没有区别。但两种类型的内部执行可能存在差异。