oracle 多表查询

------------------------------------------------------------------------多表查询
--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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值