Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1169177
  • 博文数量: 178
  • 博客积分: 2776
  • 博客等级: 少校
  • 技术积分: 2809
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-22 15:36
文章分类

全部博文(178)

文章存档

2014年(3)

2013年(66)

2012年(109)

分类: Oracle

2013-05-09 10:29:40

Sql代码 

SELECT emp_name, dept_name FORM Employee, Department   WHERE Employee.emp_deptid(+) = Department.deptid 

SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:
转自cuug官网

Sql代码 

SELECT emp_name, dept_name FORM Employee, Department WHERE Employee.emp_deptid = Department.deptid(+) 

 则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示

一般的相等连接:

Sql代码 

select * from a, b where a.id = b.id; 

 这个就属于内连接。

对于外连接:

Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

LEFT OUTER JOIN:左外关联

Sql代码 

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); 

 等价于

Sql代码 

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:右外关联

Sql代码 

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); 

 等价于

Sql代码 

SELECT e.last_name, e.department_id, d.department_name 

FROM employees e, departments d 

WHERE e.department_id(+)=d.department_id 

结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。


阅读(1453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~