oracle学习总结-----------多表查询
2017-01-18 20:33
417 查看
内连接:查询的是2张或者2张以上的表,注意一定不要忘记连接条件
语法:A inner join B on 连接条件
--需求:查询每个员工的姓名,薪资及工作地点
select ename ,sal ,loc from emp ,dept where emp.deptno = dept.deptno;
select eanme ,sal ,loc from emp inner join dept on emp.deptno = dept.deptno;
自连接:本表与本表连接(内部包含有递归连接)
---查询表EMP中所有的工资大于等于1500的雇员姓名和他的经理的名字
select e1.eanme as operator ,e2.eanme as manager from emp e1,emp e2 where e1.empno = e2.mgr and e1.sal > 15500;
select e1.ename as operator ,e2.ename as manager from emp e1 inner join emp e2 on e1.empno = e2.mgr where e1.sal > 1500;
外连接:连接2张以及两张以上的表,其中一张表是基表(必须满足的表),另一张表是副表(如不是满足的情况下,则返回为空)。是对自连接的和内连接的补充。
--(+)必须完善所有的匹配条件
--关于使用(+)的一些注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
---左外连接
-- 语法:
A left join B 连接条件(A书基表)
A= B(+)
--需求:查看员工除了名字为SMITH的员工信息,以及对应的部门信息。
select * from emp,dept where ename!='SMITH' and emp.deptno = dept.deptno(+);
select * from emp left outer join dept on em.deptno = dept.deptno;
---右外连接
-- 语法:
A right join B on 连接条件(B是基表)
A(+) = B
--需求:查看所有部门对应的员工信息。
select * from emp,dept where emp.deptno(+) = dept.deptno;
select * from emp right outer join dept on emp.deptno = dept.deptno;
----全外连接: full join ... on...
--全外连接,一般用于测试,做数据的集合
select * from emp full join dept on emp.deptno = dept.deptno;
minus差集
例:(select * from emp where sal > 2000)
minus
(select * from emp where deptno = 20);
intersect交集
例:(select * from emp where sal > 2000)
intersect
(select * from emp where deptno = 20);
union(去重)/union all(不去重);
例:(select * from emp where sal > 2000)
union
(select * from emp where deptno = 20);
distinct去除重复
?注解
在多表查询时,如果两个表的字段同名,则需要加表名;如果表名不相同则可以不加。
在多表查询时,可以给表起别名。优化查询。
在多表查询中,基本条件必须为表数-1
语法:A inner join B on 连接条件
--需求:查询每个员工的姓名,薪资及工作地点
select ename ,sal ,loc from emp ,dept where emp.deptno = dept.deptno;
select eanme ,sal ,loc from emp inner join dept on emp.deptno = dept.deptno;
自连接:本表与本表连接(内部包含有递归连接)
---查询表EMP中所有的工资大于等于1500的雇员姓名和他的经理的名字
select e1.eanme as operator ,e2.eanme as manager from emp e1,emp e2 where e1.empno = e2.mgr and e1.sal > 15500;
select e1.ename as operator ,e2.ename as manager from emp e1 inner join emp e2 on e1.empno = e2.mgr where e1.sal > 1500;
外连接:连接2张以及两张以上的表,其中一张表是基表(必须满足的表),另一张表是副表(如不是满足的情况下,则返回为空)。是对自连接的和内连接的补充。
--(+)必须完善所有的匹配条件
--关于使用(+)的一些注意事项:
1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。
2. 当使用(+)操作符执行外连接时,如果在where子句中包含有多个条件,则必须在所有条件中都包含(+)操作符
3.(+)操作符只适用于列,而不能用在表达式上。
4.(+)操作符不能与or和in操作符一起使用。
5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。
---左外连接
-- 语法:
A left join B 连接条件(A书基表)
A= B(+)
--需求:查看员工除了名字为SMITH的员工信息,以及对应的部门信息。
select * from emp,dept where ename!='SMITH' and emp.deptno = dept.deptno(+);
select * from emp left outer join dept on em.deptno = dept.deptno;
---右外连接
-- 语法:
A right join B on 连接条件(B是基表)
A(+) = B
--需求:查看所有部门对应的员工信息。
select * from emp,dept where emp.deptno(+) = dept.deptno;
select * from emp right outer join dept on emp.deptno = dept.deptno;
----全外连接: full join ... on...
--全外连接,一般用于测试,做数据的集合
select * from emp full join dept on emp.deptno = dept.deptno;
minus差集
例:(select * from emp where sal > 2000)
minus
(select * from emp where deptno = 20);
intersect交集
例:(select * from emp where sal > 2000)
intersect
(select * from emp where deptno = 20);
union(去重)/union all(不去重);
例:(select * from emp where sal > 2000)
union
(select * from emp where deptno = 20);
distinct去除重复
?注解
在多表查询时,如果两个表的字段同名,则需要加表名;如果表名不相同则可以不加。
在多表查询时,可以给表起别名。优化查询。
在多表查询中,基本条件必须为表数-1
相关文章推荐
- Oracle学习_3 sql子查询,自连接,单行select总结
- oracle简单学习总结(四)——高级查询
- Oracle学习_3 sql子查询,自连接,单行select总结
- oracle简单学习总结(二)——查询
- oracle学习查询总结
- Oracle层次化查询学习总结
- 学习oracle的经验总结1
- oracle学习总结(一)---ROWID
- Oracle基础学习二:表的创建 数据的操作 在VS程序中的查询显示
- Oracle基础学习二:表的创建 数据的操作 在VS程序中的查询显示
- oracle学习总结(一)
- oracle学习---简单的sql语句查询
- oracle学习之--高级查询基础
- oracle学习总结二(转义字符)
- Oracle学习一(简单查询语句)
- oracle学习总结(一)---ROWID
- oracle学习总结一(基础)
- ORACLE 8023学习总结
- oracle学习总结一(基础)
- Oracle基础学习五 : PACKAGE(包) 新建包 加入项 修改项 删除项 访问项 查询包 删除包