Oracle中多表查询

1.笛卡尔积
select * from emp,dept;

2.等值连接
select empno,ename,sal,emp.depno,dname from emp,dept
where emp.depno=dept.depno;

3.非等值连接
select ename,empno,grade, from emp,salgrade where sal between losal and hisal;

4.自连接
select e.empno,e.ename,m.empno,m.ename from emp e,emp m
where e.mgr = m.empno;
select e.empno,e.ename,m.empno,m.ename from emp e,emp m
where m.mgr = e.empno;

5.左外连接(LEFT OUTER JOIN)
select s.sid,s.sname,s1.sid,s1.sname from student s,student s1
where s.sid = s1.sid(+);
select empno,ename,dname from emp left outer join dept on emp.depno = dept.depno;

6.右外连接(RIGHT OUTER JOIN)
select s.sid,s.sname,s1.sid,s1.sname from student s,student s1
where s.sid(+) = s1.sid;

7.满外连接(FULL OUTER JOIN)
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O FULL OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
注意:MySQL是不支持全外的连接的,这里给出的写法适合Oracle和DB2。
但是可以通过左外和右外求合集
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O LEFT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID
UNION
SELECT O.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAME
FROM ORDERS O RIGHT OUTER JOIN CUSTOMERS C ON C.ID=O.CUSTOMER_ID;
两者查询的结果是相同的

8.集合操作
union:并集,所有的内容都查询,重复的只显示一次。
union all:并集,所有的内容都查询,包括重复的。
intersect:交集,只显示重复的。
minus:差集或减集,只显示两张表不同的记录(和顺序有关系)或者说在第一个查询结果中排除第二个查询结果中出现的行。
验证union和union all
select * from emp union select * from emp20;--此语句查询结果中,重复的内容不再显示
select * from emp union all select * from emp20;--查询结果中,重复的内容依然显示
select * from emp intersect select * from emp20;--只显示两张表中都存在的记录
select * from emp minux select * from emp20;--只显示两张表中不同的记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值