日期:2014-05-16  浏览次数:20596 次

简单理解外连接

sql的高级查询有四种连接,分别是:等值连接,非等值连接,外连接,自连接。

等值连接很简单,如:

  1. select?*?from?emp.dept ??
  2. where?emp.no?=?dept.dept_no??

非等值连接,是这两个表之间没有直接关系,他们要满足一个条件,如,哪些员工的工资级别属于三级:

  1. select?ename,sal??from?emp,salgrage? ??
  2. ?where?grade?=?3?and?sal?between?losal?and?hisal??

自连接,是同一个基表的不同行做连接,如,指出每个雇员的经理的名字:

  1. select?worker.ename,manager.ename??n ??
  2. ?from?emp??worker,emp??manager ??
  3. ?where?worker.mgr = manager.empno??

步入正题,外连接,简单的说,就是把不带加号(+)那一边的表的数据全部取出,如果带加号那一端的表中没有对应的数据,则用空白补充。说白了,加号的意思就是补充。(因为我每次用外连接的时候都要反应半天,所以自己找了个简单的记忆方法,不知道你听懂没有?)下面这个例子在加以详细解释一下下,如,查出所有员工及对应部门的记录,包括没有任何员工的部门记录。

  1. SELECT?e.last_name,??e.department_id,??d.department_name ??
  2. ??
  3.   FROM?employees?e,?departments?d ??
  4. ??
  5.   WHERE?e.department_id(+)=d.department_id; ??
  6. ??
1 楼 LucasLee 2007-01-16  
+号的理解是正确的。
不过这种方式是Oracle专有的,现在应该根据SQL标准使用left(or right,full) outer join ...on...
这种通用的方式。Oracle9+和其他数据库都支持得很好。
2 楼 抛出异常的爱 2007-06-08  
javastudy 写道
是不是还有卡笛尔连接啊,
那东西有用么?
3 楼 dogstar 2007-06-14  
连接分为三种:内连接、外连接、交叉连接

内连接:INNER JOIN
	分为三种:等值连接、自然连接、不等连接
	
外连接:
	分为三种:左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种

交叉连接(CROSS JOIN)
	没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积
4 楼 qingzi2534 2007-06-25  
全外连接,就字面意思而言,不难理解吧?
既是左外连接 又是有外连接