oracle连接查询

WBOY
WBOY원래의
2016-06-07 15:25:571114검색

一直以来都被什么内连接、左连接、左外连接、右连接、右外连接、全连接什么的搞的糊里糊涂的,自己动手建两张表,写个sql语句查查,发现其实左连接和左外连接是一回事,右连接和右外连接也是一回事。曾经有个家伙在我面前卖弄什么左连接是这样的,左外连接又

      一直以来都被什么内连接、左连接、左外连接、右连接、右外连接、全连接什么的搞的糊里糊涂的,自己动手建两张表,写个sql语句查查,发现其实左连接和左外连接是一回事,右连接和右外连接也是一回事。曾经有个家伙在我面前卖弄什么左连接是这样的,左外连接又是那样的,说的神神秘秘的,听的我糊里糊涂的。自己动手测一下,发现也就那样,用结果说明,更有说服力。

  注:没有左内连接、右内连接(测试了下,报错,说明不存在这些)


    创建一张student表

create table STUDENT
(
  ID      NUMBER(5),
  NAME    VARCHAR2(20),
  CLAZZID NUMBER(5)
)

  插入一些记录

oracle连接查询


创建一张clazz表

create table CLAZZ
(
  ID   NUMBER(5),
  NAME VARCHAR2(50)
)
  插入一些记录

oracle连接查询
   

要求查询学生姓名和班级名称

    

--常用方式,不指明连接方式,默认内连接
select s.id sid,s.name 姓名,c.id cid,c.name 班名  
from student s,clazz c 
where s.clazzid=c.id ;
--等价
select s.id sid,s.name 姓名,c.id cid,c.name 班名  
from student s 
inner join clazz c  on s.clazzid=c.id ;
oracle连接查询


--左(外)连接,以左表为基表,结果集记录数等于或大于基表记录数
select s.id sid,s.name 姓名,c.id cid,c.name 班名 
from student s
left outer join clazz c on s.clazzid=c.id;--或者用left outer join,结果都一样

--oracle中可用+
select s.id sid,s.name 姓名,c.id cid,c.name 班名  
from student s,clazz c 
where s.clazzid=c.id(+);--+号位于clazz,说明以student为基表
oracle连接查询


--右(外)连接,以右表为基表,结果集记录数等于或大于基表记录数
select s.id sid,s.name 姓名,c.id cid,c.name 班名 
from student s
right   join clazz c on s.clazzid=c.id;----或者用right outer join,结果都一样

--oracle中可用+
select s.id sid,s.name 姓名,c.id cid,c.name 班名  
from student s,clazz c 
where s.clazzid(+)=c.id;--+号位于student,说明以clazz为基表
oracle连接查询

     

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.