多表查询会产生笛卡儿积,为了消除笛卡儿积必须寻找相同字段
(Oracle编辑sql文件: ed 编辑 @执行)
进行多表查询有下列几个步骤:
1.确定有几张表
2.消除笛卡儿积
3.确定有哪些字段
左连接查询,右连接查询
例:e.mgr(+)=m=m.empno(左连接以等号右边表为基准)
自然连接:natural join 自动匹配字段(在两张表只有一个字段名称一样,并且这个字段刚好是关联字段且关联字段是用=来匹配的)
交叉连接:cross join 用来产生笛卡儿积
using子句:两张表中有多个字段相同,关联字段名也相同的情况下(=)
例:select * from emp join dept using(deptno);
左右链接:
on子句:自己编写连接条件
例:select e.ename,m.ename from emp e left join emp m on(e.mgr=m.empno);
聚合函数
SUM([ALL|DISTINCT]expression_r)
AVG([ALL|DISTINCT]expression_r)
COUNT([ALL|DISTINCT]expression_r)
COUNT(*)
MAX(expression_r)
MIN(expression_r)
分组依据:只有分组的条件才能作为分组的单独查询字段
主函数作为查询函数,只能出现在having子句中,不能出现在where子句中
完整查询顺序:
select from
where
group by having
order by
注:当主函数嵌套的时候,不允许任何单独查询字段