【Orcale-SQL开发】5.多表连接

连接:在多个表之间通过一定的连接条件,使表发生关联,进而从多个表中获取数据

select 列名|*
from 表1,表2...
where 表1.列名=表2.列名

    在where子句中书写连接条件

    多个表中出现相同的列名,需要使用表名作为列名的前缀

    n个表相连,至少需要n-1个连接条件

    分类:等值连接 非等值连接;外部连接 内部连接

多表连接写法:Oracle写法、 ANNSI 99写法

笛卡尔积:第一个表的所有行与第二个表中的所有行都发生连接

      产生条件:连接条件被省略、连接条件是无效的

      为了避免笛卡尔积的产生、通常需要在where子句中包含一个有效的连接条件

限制歧义列名:在使用多个表时可以使用表名作为前缀限定列

        通过使用表前缀可以提高性能

        通过使用列的别名可以区分不同表中名字相同的列

别名:通过使用表的别名来简化查询语句

多表连接的写法:分析要查询的列来自哪些表,构成from子句

         分析表间的关联关系,适当补充中间关联表,在where子句中补充表之间的关联关系

         分析是否有其他限制条件,补充到where子句的关联关系之后,作为限制条件

         根据用户想要显示的信息,补充select子句

         分析是否有排序要求,如果排序要求中涉及其他表,也要增加表之间的关联关系

外部连接:多表连接时,使用外部连接查看哪些行按照连接条件没有被匹配上,符号为(+)

      左外连接 右外连接 自身连接(一个表通过某些条件和本身进行连接的一种方式)

交叉连接:同笛卡尔积,使用cross join子句完成

自然连接:对两个表之间相同名字和数据类型的列进行的等值连接

      如果两个表相同名称的列数据类型不同,就会产生错误

      使用natural join子句来完成

USING子句:指定使用某个或某几个相同名字和数据类型的列作为连接条件

      如果使用若干个列名称相同但数据类型不同,自然连接子句可以使用USING子句来代替,以指定产生等值连接的列

      如果多余一个列都匹配的情况,使用USING子句只能指定一个列

      USING子句中的列不能使用表名和列名作为前缀

      natural join子句和USING子句是相互排斥的,不能同时使用

ON子句:自然连接条件基本上是具有相同列名的表之间的等值连接

      如果要指定任意连接条件或要连接的列,可以使用ON子句

      用ON将连接条件和其他检索条件分隔开,其他检索条件写在where子句中

      ON子句可以提高代码可读性

左外连接:以左边表为基表,该表所有行的数据按照连接条件无论是否与右边表匹配,都显示出来

右外连接:同上

全外连接:返回两个表等值连接结果,以及两个表中所有等值连接失败的记录

posted @ 2017-09-26 23:00  chain155  阅读(124)  评论(0)    收藏  举报