日期:2014-05-16  浏览次数:20500 次

Oracle(八)老师

Dept表

?名称????????????? 是否为空? 类型
?----------------- -------- ------------
?DEPTNO???????????????????? NUMBER(2)
?DNAME????????????????????? VARCHAR2(14)
?LOC??????????????????????? VARCHAR2(13)

salgrade表

?名称????????????? 是否为空? 类型
----------------- -------- ------------
GRADE????????????????????? NUMBER
LOSAL????????????????????? NUMBER
HISAL????????????????????? NUMBER

?

多表查询

多表链接 首先做到的是笛卡尔乘积

A表

a1 a2 a3

b1 b2 b3

c1? c2 c3

B

d1 d2

f1 f2

结果

a1 a2 a3 d1 d2

b1 b2 b3 d1 d2

c1? c2 c3 d1 d2

a1 a2 a3 f1 f2

b1 b2 b3 f1 f2

c1? c2 c3 f1 f2

结果分析:

获得的行数:A*B

获得的列数:A+B

?--------------------------

两个表合成一个表 中间加个条件

emp,dept 相连

emp.sal>salgrade.losal and emp.sal<salgrade.hisal(between losal and hisal)

emp,dept,salgrade三表相连

select * from emp,dept,salgrade where emp.deptno=dept.deptno and (emp.sal>salgrade.losal and

emp.sal<salgrade.hisal)

?

其他函数

控制替换 nvl(comm.0);

例:sal 和 comm 的和? 如果之间有空值 直接加的话 空值依然是空值

select nvl(sal,0)+nvl(comm,0) from emp;把空值替换成0 在进行计算

?

?如果想找管理者的话 需要关联 另一张表 所以就创建一张表

?select emp.empno,manager.mgr from emp,manager where emp.empno=manager.mgr

这里我们可以用别名 从而访问同一张表(别名的意思 也就是虚拟一张自己)

select e.empno,m.mgr from emp e.manager m where e.empno=m.mgr;

练习:查询 和 allen 在同一个工资级别的员工信息;

select * from emp,salgrade where sal between losal and hisal and grade=(select grade from emp,salgrade where sal between losal and hisal and ename='ALLEN')

---------------------------------------------

多表查询
多表连接首先做的是笛卡尔乘积
A
a1 a2 a3
b1 b2 b3
c1 c2 c3

B
d1 d2
f1 f2
C
g1 g1
h1 h2

结果
a1 a2 a3 d1 d2 g1 g1
b1 b2 b3 d1 d2 g1 g1
c1 c2 c3 d1 d2 g1 g1
a1 a2 a3 f1 f2 g1 g1
b1 b2 b3 f1 f2 g1 g1
c1 c2 c3 f1 f2 g1 g1
a1 a2 a3 d1 d2 h1 h2
b1 b2 b3 d1 d2 h1 h2
c1 c2 c3 d1 d2 h1 h2
a1 a2 a3 f1 f2 h1 h2
b1 b2 b3 f1 f2 h1 h2
c1 c2 c3 f1 f2 h1 h2
结果分析:
获得的行数:A*B*C
获得的列数:A+B+C


多表连接类型
? 等值连接
?非等值连接
?自连接 --自己连接自己 在使用自连接时必须使用表别名

nvl函数

表别名


子查询:查询的语句中还包含查询,内部的查询就是子查询
使用子查询:当要查询一个复杂内容 通过一个简单的查询无法实现,这时使用子查询


在使用子查询时
根据返回的值的不同使用的符号也不同
当返回一个值的时候使用 = > < >= <=
当返回一列值时使用 in? any? all???? any 和all在使用时必须和基本符号一起使用
>any? <any =any >=any >=all