`
Mr.Zero
  • 浏览: 33056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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的员工记录和没有任何员工的部门记录。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics