此外,如何适应左外加入,右外加入和全外加入?
当前回答
内部加入需要附加表中包含相关 ID 的记录。
外部连接将为左侧返回记录,即使没有对右侧的记录。
例如,您有一个订单和一个订单细节表,它们由一个“订单ID”相关。
命令
客戶名稱
命令细节
商品名稱 Qty 價格
请求
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
只会返回订单,该订单还包含在订单详细信息表中的一些东西。
如果您将其更改为向左加入
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
LEFT JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
然后它将从订单表中返回记录,即使它们没有订单详细记录。
您可以使用此来查找没有订单详细信息的订单,并通过添加一个在哪里条款,如Where OrderDetails.OrderID IS NULL。
其他回答
简单的说法:
左边“加入”
1.Take All records from left Table
2.for(each record in right table,) {
if(Records from left & right table matching on primary & foreign key){
use their values as it is as result of join at the right side for 2nd table.
} else {
put value NULL values in that particular record as result of join at the right side for 2nd table.
}
}
右加入 : 正反对左加入. 在右加入中的左加入中输入表名称,您将获得与左加入相同的输出。
外部加入: 显示两张表中的所有记录 不管是什么. 如果左表中的记录不符合基于首要, 前进密钥的右表,则使用加入结果的 NULL 值。
例子:
1. 工人, 2.phone_numbers_工人
employees : id , name
phone_numbers_employees : id , phone_num , emp_id
在这里,员工表是主表,电话_数字_员工是儿童表(它包含 emp_id 作为外国密钥,连接员工.id 因此其儿童表)。
内部加入
问答会是:
SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
在这里只采取相匹配的行在主键 = 外国键如上所述。在这里不相匹配的行在主键 = 外国键因加入而被排除。
左联盟保留左桌的所有行,无论是否有一个行在右桌上相匹配。
SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
外面加入:
SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;
格式上看起来如下:
我在其他答案中看不到很多关于性能和优化的细节。
有时,知道只有INNER JOIN是合并的,这意味着优化器有最多的选择与它一起玩,它可以重新订单加入顺序,使它更快地保持相同的结果,优化器可以使用最多加入模式。
一般来说,尝试使用 INNER JOIN 而不是不同类型的插件是很好的做法(当然,如果可以考虑到预期的结果设置)。
这里有几个好例子和解释这个奇怪的协会行为:
是否留在外部合并合并合并?合并命令在SQL中的内容?
批评了我非常喜欢的红色阴影的Venn图表,我认为发表我自己的尝试是公平的。
虽然 @Martin Smith 的答案在很长一段时间内是这个集合中最好的,但他的单一显示每个桌子的关键列,而我认为理想的非关键列也应该显示。
在允许的半小时内我能做的最好,我仍然不认为它足够地表明,由于TableB中缺乏关键值,零值存在,或者外加入实际上是一个联盟而不是一个联盟:
此分類上一篇
在简单的条件下,
1.INNER JOIN OR EQUI JOIN : 返回结果组,仅符合两张表中的状态。
2.OUTER JOIN : 从两个表中返回所有值的结果,即使有条件相匹配或不相匹配。
3.LEFT JOIN : 从左表中返回所有值的结果组合,并仅与右表中的条件相匹配的行。
4.RIGHT JOIN : 从右表返回所有值的结果组合,并且仅符合左表的条件的行列。
5、全加入:全加入和全外加入是相同的。
此分類上一篇
INNER JOIN 最典型的加入为两个或多个表. 它返回数据匹配在两个表上 ON primarykey 和 forignkey 关系. OUTER JOIN 与 INNER JOIN 相同,但它还包含结果设置上的 NULL 数据. LEFT JOIN = INNER JOIN + 未匹配的左表数据与右表上的 Null 匹配. RIGHT JOIN = INNER JOIN + 未匹配的右表数据与左表上的 Null 匹配. FULL JOIN = INNER J
例如:
SELECT *
FROM tablea a
INNER JOIN tableb b
ON a.primary_key = b.foreign_key
INNER JOIN tablec c
ON b.primary_key = c.foreign_key
推荐文章
- 在SQL server查询中将NULL替换为0
- 在SQL中修改表的模式名
- 如何在SQL Server 2005的一条语句中更新两个表?
- 如何创建临时表与SELECT * INTO tempTable从CTE查询
- 用于查找计数为>的记录的SQL查询
- 完全外部连接
- “从Table1左连接Table2”和“从Table2右连接Table1”可以互换吗?
- 在SQL Server的选择语句中使用带TOP的变量,而不是动态的
- 自然连接和内部连接的区别
- MySQL现在()+1天
- 在SQL中转换月号到月名函数
- 改变一个varchar列的最大长度?
- 外键约束:何时使用ON UPDATE和ON DELETE
- 连接查询vs多个查询
- 暂时关闭约束(MS SQL)