a、b两个表通过c字段做连接。全连接在ac is null和bc is null的记录列入结果中。内连接在ac is null和bc is null的记录不列入结果中。
全连接为连接信息不全时使用,比如学生95003没有选课,那么在选课表(sc)中就没有相应的元组,但是我们想从student表为主体列出每个学生的基本情况及选课情况,若没个学生没有选课,只输出其基本情况,选课信息为空即可,同时有想显示出哪门课没有任何学生选。这是就要用到全连接,
上面情况中不想看见两值为空的记录就用内连接
内连接:返回2个表中完全符合条件的记录,结果集中每个表的字段内容均来自各自的表;
外连接:返回2个表中完全符合条件的记录,再加上2个表中各自的记录,结果集中的字段只有一个表中有记录时,另一个表中的字段均使用空值null填写。
例如A表:
ID user partmentID
1 aaa 3
2 bbb 3
3 ccc (null)
B表:
parmentID PartmentName
3 pm001
4 pm002
内连接结果:select Auser BPartmentName from A inner join B on ApartmentID = BpartmentID
user PartmentName
aaa pm001
bbb pm001
外连接结果:select Auser BPartmentName from A outer join B on ApartmentID = BpartmentID
user PartmentName
aaa pm001
bbb pm001
ccc (null) 比内连接多出来的记录,PartmentName字段是空值
(null) pm002 比内连接多出来的记录,user字段是空值
内连接在多是应用环境下使用,只有极少是使用外连接:比如同类数据的对比就可以使用外连接,比较两人统计的同一个价格表,为了对比两份数据的一致性,可以使用外连接。
left\right
join是外部连接,inner
join是内连接
外部连接有主表与从表,主表在left中是左侧表,right中是右侧表,主表数据会全部显示,从表数据则只显示关联部分匹配的数据,无匹配的数据用null补全
内连接则只显示两表关联条件匹配的数据
left
join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left
join是以左表为准的
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为:
AaID
=
BbID)
B表记录不足的地方均为NULL
二、内连接(INNER JOIN)
内连接(INNER JOIN):有两种,显式的和隐式的,返回连接表中符合连接条件和查询条件的数据行。(所谓的链接表就是数据库在做查询形成的中间表)。
例如:下面的语句3和语句4的结果是相同的。
语句3:隐式的内连接,没有INNER JOIN,形成的中间表为两个表的笛卡尔积(如果没有where条件)。
SELECT OID,OORDER_NUMBER,CID,CNAMEFROM CUSTOMERS C,ORDERS O WHERE CID=OCUSTOMER_ID;
语句4:显示的内连接,一般称为内连接,有INNER JOIN,形成的中间表为两个表经过ON条件过滤后的笛卡尔积。
SELECT OID,OORDER_NUMBER,CID,CNAMEFROM CUSTOMERS C INNER JOIN ORDERS O ON CID=OCUSTOMER_ID;
三、外连接(OUTER JOIN)(必须有ON条件):
外连不但返回符合连接和查询条件的数据行,还返回不符合条件的一些行。
外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。
三者的共同点是都返回符合连接条件和查询条件(即:内连接)的数据行。不同点如下:
左外连接还返回左表中不符合连接条件单符合查询条件的数据行。
右外连接还返回右表中不符合连接条件单符合查询条件的数据行。
全外连接还返回左表中不符合连接条件单符合查询条件的数据行,并且还返回右表中不符合连接条件单符合查询条件的数据行。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。
说明:左表就是在“(LEFT OUTER JOIN)”关键字左边的表。右表当然就是右边的了。在三种类型的外连接中,OUTER 关键字是可省略的。
下面举例说明:
语句5:左外连接(LEFT OUTER JOIN)
SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID;
语句6:右外连接(RIGHT OUTER JOIN)
SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID;注意:WHERE条件放在ON后面查询的结果是不一样的。例如:
语句7:WHERE条件独立。
SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_IDWHERE OORDER_NUMBER<>'MIKE_ORDER001';
语句8:将语句7中的WHERE条件放到ON后面。
SELECT OID,OORDER_NUMBER,OCUSTOMER_ID,CID,CNAMEFROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON CID=OCUSTOMER_ID AND OORDER_NUMBER<>'MIKE_ORDER001';
从语句7和语句8查询的结果来看,显然是不相同的,语句8显示的结果是难以理解的。因此,推荐在写连接查询的时候,ON后面只跟连接条件,而对中间表限制的条件都写到WHERE子句中。
自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。而等值连接并不去掉重复的属性列。
自然连接是关系R和S在所有公共属性(common attribute)上的等接(Equijoin)。但在得到的结果中公共属性只保留一次,其余删除,R⋈S ≡ ΠR u S( δ predicate(R x S))。
直观的说就是集合A{a1,a2,a3} 集合B{b1,b2} ,他们的笛卡尔积是AB ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}。任意两个元素结合在一起,两个逻辑算式之间的比较,如果不全为真,则结果为假。
举例:现有a和b两表分别为关系R和S关系。
扩展资料:
其实就是域相同的属性值相等就连接。
比如有R(A,B)和S(B,C)两个关系,自然连接的条件就是RB=SB,结果是一个关系,为3个属性(A,B,C)。
通过相同名字的属性连接的结果就是自然连接。自然连接是在笛卡尔积中选取属性值(对于这个例子就是属性B)相等的那些条目,然后把重复的属性删掉。
本例的自然连接就是 {m 1 3},并和交需要两个关系的结构相同,本例R的结构是属性A B S的结构是属性B C, 故而不能做交或者并的运算。
自然连接又叫笛卡尔乘积,简单的说就是两个集合相乘的结果,直观的说就是集合A{a1,a2,a3} 集合B{b1,b2},他们的笛卡尔积是 AB ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}。任意两个元素结合在一起,两个逻辑算式之间的比较,如果不全为真,则结果为假。
参考资料来源:百度百科-自然连接
以上就是关于数据库查询时 的 内连接,左右连接,全连接全部的内容,包括:数据库查询时 的 内连接,左右连接,全连接、oracle数据库中外连接和内连接有什么区别、sql中left join、right join、inner join有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)