Oracle笔记二

多表查询

分为等值查询,不等值查询,外连接,自连接。
注:四种类型,表一m行,表二n行,两个表有共同的一列(字段)
1.以表一为基准,每行都完全匹配表二所有行。共m*n行(笛卡尔积)
2.以共有字段为基准,表一.字段=表二.字段,共m∩n行(等值连接/内连接)
3.以独有字段为基准,如以表一某列为基准,表二能和表一该字段匹配的就显示,不能匹配的就显示为空。共m行。
同理若以表二为基准,则共n行。(外连接/不等值连接)
4.一张表和自己连接,就是自连接
其中2和3中的两张表都是有共有字段的。

笛卡尔积

select * from 表1,表2;
这样查询结果总条数为表1条数和表2条数之积。
查询会影响性能。

关联查询

多表查询时,先执行from部分,再执行select 和where条件,所以编写sql语句时先考虑from部分,确定表,再确定select的字段和where条件。
两张表的关联查询字段,一般是一张表的主键,另一张表的外键。
如:select * from emp,dept where epm.deptno=dept.deptno;

查询效率:
from 后面两张表会先做笛卡尔乘积,会很慢,可以改为join on即可在做笛卡尔积之前先根据on后的条件判断,这样可以减少很多操作,提高效率
select * from emp join dept on epm.deptno=dept.deptno;

自连接

select e.empno,e.ename,e2.empno,e2.ename from emp e, emp e2 where e.mgr= e2.empno;

外连接

左连接

(+)在右边,表示左连接
select e.empno,e.ename,d.deptno,d.dname from emp e, dept d where
e.deptno =d.deptno(+);

右连接

(+)在左边,表示右连接
select e.empno,e.ename,d.deptno,d.dname from emp e, dept d where
e.deptno(+) =d.deptno;

select e.empno,e.ename,d.deptno,d.dname from emp e, right join dept d on
e.deptno =d.deptno;

子查询

就是嵌套,一条sql语句里嵌套进另一条sql语句
select ename,job,sal from emp where sal =(select MIN(sal) from emp);

分页查询

ROWNUM表示行号,
ROWID表中每行数据指向磁盘上的物理地址

集合运算

1.union并集
select * from emp where sal>10000 union select * from emp where deptno =10;
2.intersect交集
select * from emp where sal>10000 intersect select * from emp where deptno=10;
3.minus差集(属于其中一个,但不属于另一个)
select * from emp where to_char(hiredate,yyyy’)=‘1990’
minus select * from emp where job =‘manager’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值