Oracle 内连接和外连接

来源:互联网 发布:淘宝饰品店发展前景 编辑:程序博客网 时间:2024/06/06 00:48

内连接用于返回满足连接条件的记录;而外连接则是内连接的扩展,它不仅会返回满足连接条件的所有记录,而且还会返回满足不满足连接条件的记录!从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     CLARKACCOUNTING     KINGACCOUNTING     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     CLARKACCOUNTING     KINGACCOUNTING     MILLER


 还有一种方式的内连接,不过我到现在也不怎么用到,这是从Oracle 9i开始执行的,如果主表的主键列和从表的外部键列名称相同,那么还可以使用NATURAL JOIN关键字自动执行内连接操作,示例如下:

SQL> select dname ,ename from dept natural join emp; DNAME          ENAME-------------- ----------RESEARCH       SMITHSALES          ALLENSALES          WARDRESEARCH       JONESSALES          MARTINSALES          BLAKEACCOUNTING     CLARKRESEARCH       SCOTTACCOUNTING     KINGSALES          TURNERRESEARCH       ADAMSSALES          JAMESRESEARCH       FORDACCOUNTING     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     CLARKACCOUNTING     KINGACCOUNTING     MILLERRESEARCH       SALES          OPERATIONS  

 

右外连接、全外连接和左外连接很相似,就不多说了!