--知识点一个
--多表查询
-- 通过join(连接)可将多张表连接起来查询数据
-- 通常通过表的主键和外键进行表之间的连接
--表的连接方式
-- 等价连接
-- 不等价连接
-- 外链接(左外链接和右外链接)
-- 内连接和全连接
-- 自连接
-- 集合运算符union、union all、intersect、minus
--应用:笛卡尔积的避免
-- 为了提高查询的效率,避免不必要的多余查询
--等价连接
-- 两个表之间的连接条件是通过“=”建立
--例1
select a.sal,b.dname from emp a,dept b where a.deptno = b.deptno;
--不等价连接
-- 两个表之间的连接不是通过“=”进行连接,可以是>、<、like、between and
--例1
select e.empno,e.job,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;
--外链接
-- 左外连接(标准SQL语句 left outer join)
-- 等同于在“=”右侧加上+号,将=号左边表中未匹配的记录也查询出来(只可用在oracle中)
-- 右外连接(标准SQL语句 right outer join)
-- 等同于在“=”左侧加上+号,将=号右边表中未匹配的记录也查询出来(只可用在oracle中)
-- 外连接
-- +只能出现在表达式的一边
-- 包含外连接的条件不允许
-- 使用in操作符
-- 使用or操作符连接到另外一个条件
-- 只能使用=
--例1
select * from emp e,dept d where e.empno = d.deptno(+);
select * from emp e left outer join dept d on e.empno = d.deptno;
--例2
select * from emp e,dept d where e.empno(+) = d.deptno;
select * from emp e right outer join dept d on e.empno = d.deptno;
--内连接
-- 查询出匹配的记录,未匹配的记录查询不出来(和等价连接一致)
-- inner join(可省略)
--例1
select * from emp e inner join dept t on e.empno = t.deptno;
--全连接
-- 未匹配的和匹配的都会查找出来
-- full outer join
--例1
select * from emp e full outer join dept d on e.empno = d.deptno;
--自连接(思考)
--例1
select e.empno,e.mgr,m.empno,m.mgr from emp e,emp m where e.empno =m.mgr;
select m.empno||'works for'||e.empno from emp e,emp m where e.empno =m.mgr;
--多表查询
-- 通过join(连接)可将多张表连接起来查询数据
-- 通常通过表的主键和外键进行表之间的连接
--表的连接方式
-- 等价连接
-- 不等价连接
-- 外链接(左外链接和右外链接)
-- 内连接和全连接
-- 自连接
-- 集合运算符union、union all、intersect、minus
--应用:笛卡尔积的避免
-- 为了提高查询的效率,避免不必要的多余查询
--等价连接
-- 两个表之间的连接条件是通过“=”建立
--例1
select a.sal,b.dname from emp a,dept b where a.deptno = b.deptno;
--不等价连接
-- 两个表之间的连接不是通过“=”进行连接,可以是>、<、like、between and
--例1
select e.empno,e.job,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;
--外链接
-- 左外连接(标准SQL语句 left outer join)
-- 等同于在“=”右侧加上+号,将=号左边表中未匹配的记录也查询出来(只可用在oracle中)
-- 右外连接(标准SQL语句 right outer join)
-- 等同于在“=”左侧加上+号,将=号右边表中未匹配的记录也查询出来(只可用在oracle中)
-- 外连接
-- +只能出现在表达式的一边
-- 包含外连接的条件不允许
-- 使用in操作符
-- 使用or操作符连接到另外一个条件
-- 只能使用=
--例1
select * from emp e,dept d where e.empno = d.deptno(+);
select * from emp e left outer join dept d on e.empno = d.deptno;
--例2
select * from emp e,dept d where e.empno(+) = d.deptno;
select * from emp e right outer join dept d on e.empno = d.deptno;
--内连接
-- 查询出匹配的记录,未匹配的记录查询不出来(和等价连接一致)
-- inner join(可省略)
--例1
select * from emp e inner join dept t on e.empno = t.deptno;
--全连接
-- 未匹配的和匹配的都会查找出来
-- full outer join
--例1
select * from emp e full outer join dept d on e.empno = d.deptno;
--自连接(思考)
--例1
select e.empno,e.mgr,m.empno,m.mgr from emp e,emp m where e.empno =m.mgr;
select m.empno||'works for'||e.empno from emp e,emp m where e.empno =m.mgr;