`
dushanggaolou
  • 浏览: 171202 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Oracle表的连接(内连、外连......)

阅读更多

--笛卡尔集(Cross Join)
        Select * from emp,dept;


--等值连接(Equijoin)(Natural join..on) --------内连接
      select empno, ename, sal, emp.deptno, dname from emp, dept
      where emp.deptno = dept.deptno;


--非等值连接(Non-Equijoin)
      select ename,empno,grade,sal,losal,hisal from emp,salgrade where sal between losal and hisal;
 
--自连接(Self join)
         select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr = m.empno; 
 
 
--左外联接(Left Outer Join ))---外连接----返回右表全部和左表满足条件的部分 
         select s.sid,s.sname,s1.sid,s1.sname from student s,student1 s1 where s.sid=s1.sid(+); 
 
         select empno,ename,dname from emp left outer join dept on emp.deptno = dept.deptno;
 
--右外联接(Right Outer Join))---外连接 ----返回左表全部和右表满足条件的部分 

         select s.sid,s.sname,s1.sid,s1.sname from student s,student1 s1 where s.sid(+)=s1.sid;
 
         select empno,ename,dname from emp right outer join dept on emp.deptno = dept.deptno;
 
 
--满外联接(Full Outer Join)---外连接 --------在等值连接的基础上将左表和右表的未匹配数据都加上
         select empno,ename,dname from emp full outer join dept on emp.deptno = dept.deptno;
 
--UNION:并集,所有的内容都查询,重复的显示一次
--UNION  ALL:并集,所有的内容都显示,包括重复的
--INTERSECT:交集:只显示重复的
--MINUS:差集:只显示对方没有的(跟顺序是有关系的)

 

eg: 
         CREATE  TABLE  emp20  AS  SELECT  *  FROM  emp  WHERE  deptno=20  ; 
 
--UNION:
          SELECT  *  FROM  emp  UNION  SELECT  *  FROM  emp20  ;        --使用此语句重复的内容不再显示

--UNION  ALL:
          SELECT  *  FROM  emp  UNION  ALL  SELECT  *  FROM  emp20  ; --重复的内容依然显示
 
--INTERSECT
          SELECT  *  FROM  emp  INTERSECT  SELECT  *  FROM  emp20  ;  --只显示了两个表中彼此重复的记录
 
--MINUS   
          SELECT  *  FROM  emp  MINUS  SELECT  *  FROM  emp20  ;         --只显示了两张表中的不同记录  返回差异的记录

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics