应用中的表的连接使用:
join和(+)
区别:Join系列连接的特点是有专门的连接对象和被连接对象,使用on设置专门的连接条件。
(+)连接实质上是一种外连接Outer Join的现象,连接条件放置在where条件列表中,通过不同的位置来对应不同方向的结果。
(+)连接的结果是将(+)号对面的数据表不符合记录的结果也输出出来。
1 INNER JOIN 内连接
内连接就类似与我们传统where的连接方式了,返回严格符合条件的数据列。
2 LEFT JOIN / LEFT OUTER JOIN 左连接
左连接left join是保证from子句中的数据表全部显示。
3 RIGHT JOIN / RIGHT OUTER JOIN 右连接
右连接right join是保证Join的数据表全部显示。
4 FULL JOIN 全连接
全连接是将两个数据表中符合连接条件或者不符合连接条件的全部列出。
5 CROSS JOIN 笛卡尔连接。
Cross Join是进行全匹配,两两之间进行笛卡尔积运算。
join和(+)连接实例:
内连接:
SELECT * FROM DEPT INNER JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO;
左外连接:
SELECT * FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO(+);
右外连接:
SELECT * FROM DEPT RIGHT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO(+) = EMP.DEPTNO;
全连接:
SELECT * FROM DEPT FULL JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
笛卡尔连接:
SELECT * FROM DEPT CROSS JOIN EMP;
union和union all,Intersect和Minus的使用
union 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
union all 对两个结果集进行并集操作, 包括重复行, 不进行排序;
intersect 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
minus 对两个结果集进行差操作, 不包括重复行,同时进行默认规则的排序。
关于排序控制:
如果想使用排序时,order by子句必须写在最后一个结果集里,
排序时,必须使用第一个查询语句中的字段名、字段序号,并且其排序规则将改变操作后的排序结果.
select * from student where id < 4
union
select * from student where id > 2 and id < 6;
select * from student where id < 4
union all
select * from student where id > 2 and id < 6;
select job from dept1 intersect select job from dept2;
select job from dept1 minus select job from dept2;
备注:关于join和union的区别
如果你明白了两个连接的原理不难看出:
union 和join不一样,union这个运算子是将资料列合并,而join是将栏位合并。
join和(+)
区别:Join系列连接的特点是有专门的连接对象和被连接对象,使用on设置专门的连接条件。
(+)连接实质上是一种外连接Outer Join的现象,连接条件放置在where条件列表中,通过不同的位置来对应不同方向的结果。
(+)连接的结果是将(+)号对面的数据表不符合记录的结果也输出出来。
1 INNER JOIN 内连接
内连接就类似与我们传统where的连接方式了,返回严格符合条件的数据列。
2 LEFT JOIN / LEFT OUTER JOIN 左连接
左连接left join是保证from子句中的数据表全部显示。
3 RIGHT JOIN / RIGHT OUTER JOIN 右连接
右连接right join是保证Join的数据表全部显示。
4 FULL JOIN 全连接
全连接是将两个数据表中符合连接条件或者不符合连接条件的全部列出。
5 CROSS JOIN 笛卡尔连接。
Cross Join是进行全匹配,两两之间进行笛卡尔积运算。
join和(+)连接实例:
内连接:
SELECT * FROM DEPT INNER JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO;
左外连接:
SELECT * FROM DEPT LEFT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO = EMP.DEPTNO(+);
右外连接:
SELECT * FROM DEPT RIGHT JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
SELECT * FROM DEPT , EMP WHERE DEPT.DEPTNO(+) = EMP.DEPTNO;
全连接:
SELECT * FROM DEPT FULL JOIN EMP ON DEPT.DEPTNO = EMP.DEPTNO;
笛卡尔连接:
SELECT * FROM DEPT CROSS JOIN EMP;
union和union all,Intersect和Minus的使用
union 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
union all 对两个结果集进行并集操作, 包括重复行, 不进行排序;
intersect 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
minus 对两个结果集进行差操作, 不包括重复行,同时进行默认规则的排序。
关于排序控制:
如果想使用排序时,order by子句必须写在最后一个结果集里,
排序时,必须使用第一个查询语句中的字段名、字段序号,并且其排序规则将改变操作后的排序结果.
select * from student where id < 4
union
select * from student where id > 2 and id < 6;
select * from student where id < 4
union all
select * from student where id > 2 and id < 6;
select job from dept1 intersect select job from dept2;
select job from dept1 minus select job from dept2;
备注:关于join和union的区别
如果你明白了两个连接的原理不难看出:
union 和join不一样,union这个运算子是将资料列合并,而join是将栏位合并。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24070945/viewspace-705563/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24070945/viewspace-705563/