oracle再遇内外连接 收集

数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)
select a.studentno, a.studentname, b.classname
      from students a, classes b
      where a.classid(+) = b.classid;
STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
            1 周虎          一年级一班
            2 周林          一年级二班
                             一年级三班
以上语句是右连接:无论(+)端有没有无对应的记录都会被显示


反之:
select a.studentno, a.studentname, b.classname
       from students a, classes b
      where a.classid = b.classid(+);

STUDENTNO STUDENTNAM CLASSNAME
---------- ---------- ------------------------------
            1 周虎          一年级一班
            2 周林          一年级二班
            3 钟林达

则是左连接,以上语句是右连接:无论(+)端有没有无对应的记录都会被显示

 

select a.studentno, a.studentname, b.classname
       from students a, classes b
      where a.classid = b.classid;

这个则是通常用到的内连接,显示两表都符合条件的记录

总之,

左连接对左边不加限制

右连接对右边不加限制
内连接是只显示满足条件的!

 

 

 

Access:
SELECT A.id,A.name,B.dep,C.class
FROM (test01 AS A LEFT JOIN test02 as B on A.id=B.id) LEFT JOIN test03 AS C on A.id=C.id

SQL Server:
SELECT A.id,A.name,B.dep,C.class
FROM test01 AS A LEFT OUTER JOIN test02 as B on A.id=B.id LEFT OUTER JOIN test03 AS C on A.id=C.id
或 
右连接:
SELECT Student .sno,Sname,Ssex,Sage,Cno,Grade FROM Student ,SC WHERE Student.Sno=SC.Sno(*);
左连接:
SELECT Student .sno,Sname,Ssex,Sage,Cno,Grade FROM Student ,SC WHERE Student.Sno(*)=SC.Sno;


Oracle:
SELECT A.id,A.name,B.dep,C.class
FROM test01 A,test02 B,test03 C
WHERE A.id=B.id(+) AND A.id=B.id(+)

或:
SELECT A.id,A.name,B.dep,C.class
FROM test01 A LEFT OUTER JOIN test02 B on (A.id=B.id) LEFT OUTER JOIN test03 C on (A.id=C.id)

注:SqlServer与Oracle左右连接中的OUTER可以省略。

内连接关键字:...inner join...on...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值