Oracle 内连接,左连接 右连接 全连接

此处用到两张表  员工表和部门表

一般的相等连接:
select * from a, b where a.id = b.id;
这个就属于内连接。
内连接
1)等值连接


SQL> SELECT   emp.empno, emp.ename, emp.deptno,
  2  dept.deptno, dept.loc

  3  FROM     emp, dept

  4  WHERE    emp.deptno=dept.deptno;



EMPNO ENAME   DEPTNO DEPTNO LOC

----- ------ ------ ------ ---------

7839 KING         10     10 NEW YORK

7698 BLAKE        30    30 CHICAGO

7782 CLARK        10    10 NEW YORK

7566 JONES        20    20 DALLAS

...

14 rows selected.

2)非等值连接



外连接:
Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN 
 
LEFT OUTER JOIN:左外关联    (左外连接就是在等值连接的基础上加上主表中的未匹配数据)

SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
LEFT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id=d.department_id(+) 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。 
 
RIGHT OUTER JOIN:右外关联    (右外连接是在等值连接的基础上加上被连接表的不匹配数据)
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id(+)=d.department_id 
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。 
 
FULL OUTER JOIN:全外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
FULL OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

猜你喜欢

转载自mr-zero.iteye.com/blog/1595247