什么时候用outer join和inner join

 我来答
werewwersdgfdf
2011-08-21 · TA获得超过569个赞
知道答主
回答量:104
采纳率:100%
帮助的人:86.9万
展开全部
先说一下概念哈:
内连接:当实现同等连接和非同等连接时,分别使用等于和不等于运算符表示的连接条件,匹配源表和目标表中的行,这些连接称为内连接(inner join)
外连接:当返回内连接没有包含的行时实现外连接。外连接分为:左外连接,右外连接,全外连接。

下面具体来说哈:你是知道HT模式的吧?
在这个模式中。DEPARTMENTS表存储DEPARTMENT_NAME和DEPARTMENT_ID值得主列表。每个EMPLOYEES记录有一个DEPARTMENT_ID列,它被限制为DEPARTMENTS表中的值或者空值。这将导致出现下面三种情况之一。如果删除表之间的限制,则会出现第四种情况、
·1、员工行有DEPARTMENT_ID值,它匹配DEPARTMENTS表中的行。
2、员工行的DEPARTMENT_ID列是空值。
3、DEPARTMENTS表中有一些行,它们包含DEPARTMENT_ID值,但这些值没有存储在任何员工记录中。
4、员工行有DEPARTMENT_ID的值,但它不再DEPARTMENTS表中。

使用两表间的自然内连接检索匹配第1种情况的行。第2种和第3种情况导致许多问题。因为这些行被内连接排除在外,可以使用外连接在结果集中包含这些孤立行。第4种情况在设计良好的数据库中很少出现,因为外间约束会阻止插入没有父值得子记录。因为内连接会排除这一行,所以可以用外连接来检索它。、

不知道你明白没有。希望对你有帮助。
追问
这么深奥。。。其实是个写语句的题
select xuesheng.姓名, xuesheng.学号 from xuesheng inner join chengji on ……
有的时候 inner join 也 被 left outer join 代替。。。不知道为什么?? 当用outer join 时,有什么特殊的标志吗??
追答
嗨,你要早这么问多好。具体问题具体分析,才是硬道理。呵呵……
我们这样来看哈:有两个表,一个是源表,称为A表;一个是目标表,称为B表。一般来说,比较完美的组合就是,A表中的每一条记录,在B表中都有能与之匹配的一行。比如说,A表是学生的基本信息表(假设学生的人数为10人),包含学生的姓名,学号。B表是学生的成绩表,包含学生的学号,成绩。这两个表共享学号这一列,也是因为学号这一列才使得这两个表有了联系。那现在,写SQL语句如下:
SELECT A.name "姓名",A.number "学号",B.sccot "成绩" FROM A INNER JOIN B ON(A.number=B.number);你将得到10行信息。也就是说全部都返回了。这个时候,你用LEFT OUTER JOIN来替换得到的结果是一样的。
但是,如果A表中有一行在B表中没有与之匹配的行的话(称这样的行 为W),你用INNER JOIN 来连接的话,第W行,是不会显示在返回结果中的。但是,这个时候,你用LEFT OUTER JOIN的话,W这一被孤立的行,将会显示在返回结果中。

不知道,这样说,你明白没有。
总之哈,就是说,当两表用内连接来查询的时候,将会有你需要的孤立行不能被显示在返回结果中时,你就应该用OUTER JOIN 啦。前面也说了,OUTER JOIN 分为三种,分别是 LEFT OUTER JOIN (左表中被孤立的行,会被显示在结果中) , RIGHT OUTER JOIN(右表中被孤立的行,会被显示在结果中). FULL OUTER JOIN. (两表中被孤立的行,都会被显示在结果中)

如果还不明白,欢迎追问。呵呵……加油!
禅奉
2018-03-31 · TA获得超过3455个赞
知道小有建树答主
回答量:29
采纳率:0%
帮助的人:4023
展开全部

首先明确outer join和inner join概念:

内连接:当实现同等连接和非同等连接时,分别使用等于和不等于运算符表示的连接条件,匹配源表和目标表中的行,这些连接称为内连接(inner join)

外连接:当返回内连接没有包含的行时实现外连接。外连接分为:左外连接,右外连接,全外连接。

下面具体来说:HT模式

在这个模式中。DEPARTMENTS表存储DEPARTMENT_NAME和DEPARTMENT_ID值得主列表。每个EMPLOYEES记录有一个DEPARTMENT_ID列,它被限制为DEPARTMENTS表中的值或者空值。这将导致出现下面三种情况之一。如果删除表之间的限制,则会出现第四种情况、

·1、员工行有DEPARTMENT_ID值,它匹配DEPARTMENTS表中的行。

2、员工行的DEPARTMENT_ID列是空值。

3、DEPARTMENTS表中有一些行,它们包含DEPARTMENT_ID值,但这些值没有存储在任何员工记录中。

4、员工行有DEPARTMENT_ID的值,但它不再DEPARTMENTS表中。

使用两表间的自然内连接检索匹配第1种情况的行。第2种和第3种情况导致许多问题。因为这些行被内连接排除在外,可以使用外连接在结果集中包含这些孤立行。第4种情况在设计良好的数据库中很少出现,因为外间约束会阻止插入没有父值得子记录。因为内连接会排除这一行,所以可以用外连接来检索它。、

inner join是内连接,查询两个表中字段的值必须相等(a.id=b.id),如果a.id存在(1、1、1、1)而b.id只存在(1),那么会有四行结果(及笛卡尔积),b.id重复三次。
select *

from a inner join b

on a.id=b.id

outer join分为左外连接,右外连接两个:left outer join ,right outer join。
用上面的例子:left outer join(a left outer join b,那么这里要看左边的脸色,一切向左边看齐,先把左边表全显示了,右边满足条件a.id=b.id的显示,不满足显示为空)  右连接同理。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式