你能告诉我内连接和等连接是否相同?
答案 0 :(得分:40)
“内连接”与一般术语中的“等连接”不同。
'equi-join'表示使用相等运算符或等效运算符连接表。如果它仅使用相等性(其他人可能不同意),我仍然会将外连接称为“等连接”。
'inner join'与'outer join'相对,并确定在没有匹配值时如何连接两个集。
答案 1 :(得分:30)
我发现了这篇文章,猜测它可以回答你的问题。
他们是无关的。
几乎所有的连接都是等值连接, 因为匹配的条件 行基于两个相等 值 - 来自每个表的一个 加入。这就是它的成功 等值连接:ON状态是 平等。这包括内连接 和所有三种类型的外连接。
另一方面,内部联接可以是 基于相等性来匹配行,或者基于 一些其他条件完全。如果它是 不是等值的,那通常是 称为theta join,尽管如此 确切地说,等值连接只是其中之一 可能的theta加入;其他theta 联接使用少于,少于或 等等,作为比较 操作
答案 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和内连接的输出没有区别。但两种类型的内部执行可能存在差异。