ORACLE SQL 多表连接
2015-06-18 14:34
351 查看
第四章:多表连接
迪卡尔集: 表连接时没有指明连接条件
select ename,loc
from emp,dept;
等值连接:
select ename,loc
from emp,dept
where emp.deptno=dept.deptno;
外键连接:
select ename,loc
from emp,dept
where emp.deptno(+)=dept.deptno;
不等连接:
select ename,grade,sal,losal,hisal
from emp,salgrade
where sal between losal and hisal;
自身连接:
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno;
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno(+);
1)不可以在查询块中使用(+) 当它同时包含 join的from语句中
2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段
3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,
如果没有 ,oracle不会警告你~只是结果自然不同的
4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~
5)不可以用(+)外联接到自己 当然Self Join是可以的
6)含(+)的Where后的注意
OR不可用
IN不可用
子查询不可用
n张表连接至少需要n-1个条件!
SQL99的连接语法:
交叉连接:产生迪卡尔集
select ename,loc
from emp
cross join dept;
自然连接:按照列名作等值连接
select ename,loc
from emp
natural join dept;
自然连接:如果两张表有多个列同名,使用using子句显示指明连接时使用哪些列做等值连接
select ename,loc
from emp join dept
using (deptno);
使用on子句可以任意指明两张表连接时使用的列:
select ename,loc
from emp join dept
on (emp.deptno=dept.deptno);
右外连接:right outer join
select ename,loc
from emp right outer join dept
using (deptno);
左外连接:left outer join
全部外连接:full outer join
select ename,loc
from emp full outer join dept
using (deptno);
--oracle实现Full Join的方法:使用集合 union
迪卡尔集: 表连接时没有指明连接条件
select ename,loc
from emp,dept;
等值连接:
select ename,loc
from emp,dept
where emp.deptno=dept.deptno;
外键连接:
select ename,loc
from emp,dept
where emp.deptno(+)=dept.deptno;
不等连接:
select ename,grade,sal,losal,hisal
from emp,salgrade
where sal between losal and hisal;
自身连接:
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno;
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno(+);
1)不可以在查询块中使用(+) 当它同时包含 join的from语句中
2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段
3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,
如果没有 ,oracle不会警告你~只是结果自然不同的
4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~
5)不可以用(+)外联接到自己 当然Self Join是可以的
6)含(+)的Where后的注意
OR不可用
IN不可用
子查询不可用
n张表连接至少需要n-1个条件!
SQL99的连接语法:
交叉连接:产生迪卡尔集
select ename,loc
from emp
cross join dept;
自然连接:按照列名作等值连接
select ename,loc
from emp
natural join dept;
自然连接:如果两张表有多个列同名,使用using子句显示指明连接时使用哪些列做等值连接
select ename,loc
from emp join dept
using (deptno);
使用on子句可以任意指明两张表连接时使用的列:
select ename,loc
from emp join dept
on (emp.deptno=dept.deptno);
右外连接:right outer join
select ename,loc
from emp right outer join dept
using (deptno);
左外连接:left outer join
全部外连接:full outer join
select ename,loc
from emp full outer join dept
using (deptno);
--oracle实现Full Join的方法:使用集合 union
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解