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

Oracle学习笔记 5 -- 多表查询

我们之前的查询都是建立在一张表上,那么如何从两张,或者多张表中查询数据呢?本次笔记来学习多表查询。

    基本的语法

select *  | (具体的列名,列名1 ,列名2 )

from table 1  别名1 , table 别名2

where  限定条件

order by 列名(asc , desc )

等值连接:使用‘=’比较符作为连接条件的连接查询,被称为等值连接。使用除‘=’以外其他比较符作为连接条件的连接查询,称为不等连接。

内连接:合并两个表或者多个表相匹配的行,如果其中一个表中的行找不到在另一个表中相匹配的行,则删除这个行。结果集中不包含一个表与另一个表不匹配的行。

外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为

左(或右)外连接:没有匹配的行时,      结果表中相应的列为空(NULL)。外连接的 WHERE 子句条件类似于内部连接, 但连接条件中没有匹配行的表的列后面要加外连接运算符, 即用圆括号括起来的加号(+)。

交叉连接:连接查询的时候不使用连接条件,容易产生笛卡尔积。

自连接:连接查询在一个表上或者是视图上进行,即:表与自己进行连接查询。

 

上面给了各个连接的大体定义,下面我们通过示例具体解释!

内连接:

        连接两个或者是多个表的数据。返回满足连接条件的数据。删除不满足连接条件和匹配列中带有null值的记录。

例:使用多表查询语句同时对empdept表进行操作,查询雇员姓名和部门名称。

SQL> select ename ,dname from emp , dept where emp.deptno = dept.deptno ;
ENAME      DNAME
---------- --------------
SMITH      RESEARCH
ALLEN      SALES
WARD       SALES
JONES      RESEARCH
MARTIN     SALES
BLAKE      SALES
CLARK      ACCOUNTING
SCOTT      RESEARCH
KING       ACCOUNTING
TURNER     SALES
ADAMS      RESEARCH
JAMES      SALES
FORD       RESEARCH
MILLER     ACCOUNTING
 
14 rows selected

 

   上面查询语句中使用了'='运算符,为等值连接。如果各表之间的列名不相同,那么就不需要在列名钱加表的前缀;如果在各表之间有相同的列名,则

要加上表名做前缀,以此来区分不同表中的相同列名。有时表名可能较长,我们可以给表起一个别名,来简化操作和提高执行效率。


  SQL>select ename ,dname from emp e  , deptd  where e.deptno = d.deptno ;