------------------------------------------------------------------------多表查询
--1,笛卡尔积(Cross Join)
select * from emp,dept;
--2,等值联接(Equijoin)(Natural join..on)
select empno,ename,sal,emp.deptno,dname from emp,dept
where emp.deptno = dept.deptno;
--3,非等值联接(Non-Equijoin)
select ename ,empno,grade from emp,salgrade where sal between losal and hisal;
--4,自联接(self join)当管理员编号等于自己的编号
select e.empno,e.ename,m.ename,m.ename from emp e,emp m where e.mgr=e.empno;
--在自然连接中,只有在两个表中匹配的行才能在结果集中出现。而在外连接中可以只限制一个表,
--而对另外一个表不加限制(即所有的行都出现在结果集中)。
--外连接分为左外连接、右外连接和全外连接。左外连接是对连接条件中左边的表不加限制;
--右外连接是对右边的表不加限制;全外连接对两个表都不加限制,
--所有两个表中的行都会包括在结果集中。
--5,左外联接
select * from student
select s.sid,s.sname,s1.sid,s1.sname from student s,student s1
where s.sid(+)=s1.sid;
--6,右外联接
--right join on
--列出左表中与右表中条件一致的项(右表中的数据全部列出)
select * from student
create table student1(
sid integer primary key,
sname varchar2(20)
);
select * from student1;
insert into student values(2,'李四');
insert into student values(3,'王五');
insert into student1 values(1,'李四');
insert into student1 values(2,'张三');
insert into student1 values(3,'王五');
--列出左表中的所有数据以及其右表中与其sid,sname完全一致的数据
select s.sid,s.sname,s1.sid,s1.sname from student s,student1 s1
where s.sname=s1.sname(+) and s.sid=s1.sid(+);
select s.sid,s.sname,s1.sid,s1.sname from student s,student1 s1
--满外联接
select empno,ename,dname from emp full outer join dept
on emp.deptno=dept.deptno;
select * from salgrade;