Oracle(五)多表查询

Posted on 2021-04-07 23:49  MissRong  阅读(98)  评论(0)    收藏  举报

Oracle(五)多表查询

1、笛卡尔集:

省略连接条件
连接条件无效
所有表中的所有行互相连接

2、两个表连接:

(1)等值连接 :

select e.ename, e.deptno, d.dname from dept d,emp e where e.deptno=d.deptno;

(2)非等值连接:

select e.ename, e.sal, s.grade from emp e, salgrade s
where e.sal between s.losal and s.hisal;

(3)外连接

--外连接 dept是主表
select e.ename, d.deptno, d.dname from emp e, dept d
where d.deptno = e.deptno(+);
--外连接 emp是主表
select e.ename, d.deptno, d.dname from emp e, dept d
where d.deptno(+) = e.deptno;

--查询员工的编号、姓名、上位的编号、上位的姓名
select e.empno, e.ename, t.empno, t.ename from emp e,emp t
where e.empno(+) = t.mgr;

(4)叉集,相当于笛卡儿积--cross join

select * from emp e cross join dept d;

(5)自然连接--natural join

自动把两个表列名相同的作为连接条件
select * from emp e natural join dept d;

(6)on子句--join on

select * from emp e join dept d on (e.deptno=d.deptno);

(7)左外连接--left outer join

select e.empno, d.deptno, d.dname
from dept d left outer join emp e on d.deptno = e.deptno;

其它练习--多表查询:

select s.sno, s.sname, count(cno), sum(score)
from student s left outer join sc on s.sno=sc.sno
group by s.sno,s.sname;

select s.sno, s.sname, count(cno), sum(score)
from student s , sc
where s.sno=sc.sno(+)
group by s.sno,s.sname;

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3