什么时候用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种情况在设计良好的数据库中很少出现,因为外间约束会阻止插入没有父值得子记录。因为内连接会排除这一行,所以可以用外连接来检索它。、
不知道你明白没有。希望对你有帮助。
这么深奥。。。其实是个写语句的题
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. (两表中被孤立的行,都会被显示在结果中)
如果还不明白,欢迎追问。呵呵……加油!
首先明确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的显示,不满足显示为空) 右连接同理。