【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子句可以提高代码可读性
左外连接:以左边表为基表,该表所有行的数据按照连接条件无论是否与右边表匹配,都显示出来
右外连接:同上
全外连接:返回两个表等值连接结果,以及两个表中所有等值连接失败的记录

浙公网安备 33010602011771号