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;
浙公网安备 33010602011771号