一、表间关联基础
1.关联的实现
一个表的外键(FK)与另一个表的主键(PK)相对应
2.从表(子表)
外键所在表
3.主表(父表)
主键所在表
4.主键表达一方,外键表达多方
二、关联查询
1.概念:
从多个表查询数据
2.关联查询分类:
2.1 内关联(inner join)
2.2 外关联(outer join)
2.3 交差关联(cross join)
2.4 自关联(self join)
3.关联实现方式:
3.1 oracle专用方式
3.2 ANSI标准方式(有利于移植)
3.3 自然方式
三、内关联查询
【应用最广】
1.Inner join :
要求 PK 所指的 FK 有记录
2.实现方式
2.1 oracle方式:
select *
from tablea, tableb
where --条件
PS:关联时,重复的列必须指明
PS:N个表关联需要有N-1个关联条件
例子:
select dept.deptno, empno
from emp, dept
where emp.deptno = dept.deptno
2.2 标准方式:
select ...
from table1 [inner] join table2
on table1.columns = table2.columns
PS:这两种方式,字段可以不同
2.3 使用using关联
select ...
from table1 [inner] join table2
using columns
PS:要求关联字段必须用一样
2.4 使用自然连接
只能用于内联
select ...
from table1 natural join table2
四、外关联查询
1. Outer join:
查询某一张表的所有记录
另一张表对应的记录有无均可
2.左外关联查询
查询左表所有记录
2.1 oracle方式
select ...
from tableleft, tableright
where tableleft.columns = tableright.columns(+)
2.2 标准SQL
select ...
from tableleft left outer join tableright
on tableleft.columns = tableright.columns
2.3 一样字段可以使用using
3.右关联查询
查询右表所有记录
3.1 oracle方式
select ...
from tableleft, tableright
where tableleft.columns(+) = tableright.columns
3.2 标准SQL
select ...
from tableleft right [outer] join tableright
on tableleft.columns = tableright.columns
3.3 使用using
4.全外联查询
查询左右表所有记录
有对应显示字段值,无对应显示null
4.1 oracle
无
4.2 标准SQL
select ...
from tableleft full outer join tableright
on tableleft.columns = tableright.columns
五、交差联接
1.cross join:
两张表所有记录,交差连接
(没有意义,尽量避免)
2.实现方式
2.1 oracle 方式
select ...
from tableleft, tableright
-- 无条件
2.2 标准SQL
select ...
from tableleft cross join tableright
六、自关联
1.self join:
一张表关联自己(内联 && 外联)
2.实现方式:
select ...
from tablea, tableb
七、汇总查询
1.汇总函数
1.1 avg(字段)
求平均值
1.2 sum(字段)
汇总求和
1.3 min(字段)
最小值
1.4 max(字段)
最大值
1.5 count(字段)
记录个数
PS:特点:忽略null值
2.分类汇总语句
2.1 group by
用于分类
当select 中包含组函数与单函数时,单函数必须group by
group by table.columns
2.2 对汇总后记录进行筛选
where 对源记录进行筛选
having 对汇总记录进行再次筛选
表达式中只能有1. group by 项目,2.组函数