内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回满足不满足连接条件的记录!从Oracle9i开始,可以在From 子句中指定连接语法。语法如下:
SELECT table.column,table.column2 FROM table1 [INNER|LEFT|RIGHT|FULL] JOIN table2 ON table.column1=table.column2;
INNER JOIN表示内连接,LEFT JOIN 表示左外连接,RIGHT JOIN表示右外连接,FULL JOIN表示完全外连接;ON 子句用于指定连接条件!
下面我们来看下这些所谓的连接吧!
1.内连接
内连接用于返回满足连接条件的所有记录。默认情况下,在执行连接查询时如果没有指定任何连接操作符,那么这些连接查询属于内连接。 下面以显示部门10的部门名及其雇员名为例,说明使用内连接的方法。示例如下:
SQL> select a.dname ,b.ename from dept a ,emp b where a.deptno=b.deptno and a.deptno=10; DNAME ENAME -------------- ---------- ACCOUNTING CLARK ACCOUNTING KING ACCOUNTING MILLER
工作中用这种连接查询很多,其实我一直不知道这就是内连接,在我的印象里面,用INNER JOIN连接语法的才是内连接,想想都可笑啊!
所以在执行连接查询时,通过在FROM子句中指定INNER JOIN选项,也可以指定内连接,这是一种显示表示内连接的方式。示例如下:
SQL> select a.dname,b.ename from dept a inner join emp b on a.deptno=b.deptno and a.deptno=10; DNAME ENAME -------------- ---------- ACCOUNTING CLARK ACCOUNTING KING ACCOUNTING MILLER
还有一种方式的内连接,不过我到现在也不怎么用到,这是从Oracle 9i开始执行的,如果主表的主键列和从表的外部键列名称相同,那么还可以使用NATURAL JOIN关键字自动执行内连接操作,示例如下:
SQL> select dname ,ename from dept natural join emp; DNAME ENAME -------------- ---------- RESEARCH SMITH SALES ALLEN SALES WARD RESEARCH JONES SALES MARTIN SALES BLAKE ACCOUNTING CLARK RESEARCH SCOTT ACCOUNTING KING SALES TURNER RESEARCH ADAMS SALES JAMES RESEARCH FORD ACCOUNTING MILLER 14 rows selected
2.左外连接
左外连接是通过指定 LEFT [OUTER] JOIN选项来实现的.当使用左外连接时,不仅会返回满足连接条件的所有记录,而且还会返回不满足连接条件的连接操作符左边表的其他行。下面以显示部门10的部门名、雇员名,以及其他部门名为例:
SQL> select a.dname,b.ename from dept a left join emp b on a.deptno=b.deptno and a.deptno=10; DNAME ENAME -------------- ---------- SALES ACCOUNTING CLARK ACCOUNTING KING ACCOUNTING MILLER RESEARCH SALES OPERATIONS
右外连接、全外连接和左外连接很相似,就不多说了!