表连接

表连接分为:内连接、外连接、交叉连接、自连接、左外部连接、由外部链接、全外部连接。

一、内连接:内连接组合2张表,并且基于2张表中的关联关系来连它们。使用内连接需要指定表中的那些字段组成关联关系,并且指定基于什么条件进行连接。  实例如下:
select FName,FPrice from T_Order inner join T_Customer on FCustomerId= T_Customer.FId  where T_Customer.FName='TOM'             在这个 SQL 语句中,首先列出了组成结果集所需要的列名,而后则是在 FROM 关键字后指定需要的表,在 INNER JOIN 关键字后指明要被连接的表,而在 ON 关键字后则指定了进行连接时所使用的条件。

       在大多数数据库系统中, INNER JOIN 中的 INNER 是可选的, INNER JOIN 是默认的连接方式。

为了明确指定字段所属的表,上面的 SQL 语句中多次出现了 T_Order、 T_Customer

当字段比较多的时候这样的 SQL 语句看起来非常繁杂,为此可以使用表别名来简化 SQL 语句的

编写,比如下面的 SQL 语句就与上面的 SQL 语句是等价的:

select FName,FPrice from T_Order as o inner join T_Customer as c on 0.FCustomerId= c.T_Customer.FId  where T_Customer.FName='TOM'    

二、不等值连接:处理等值连接, 还存在另外一种不等值连接, 也就是在连接的条件中可以使用小于 (<) 、大于(>) 、不等于(<>)等运算符,而且还可以使用LIKEBETWEEN  AND等运算符,甚至还可以使用函数。

SELECTT_Order.FNumber,T_Order.FPrice, 

T_Customer.FName,T_Customer.FAge 

FROMT_Order

INNER JOINT_Customer 

ONT_Order.FPrice< T_Customer.FAge*5 

不等值连接产生了大量的查询结果, 因为它是对被连接的两张表做了笛卡尔运算,所以

如果只想查看与客户对应的订单, 那么就要在不等值连接后添加等值连接匹配条件。 实现的SQL语句如下:

SELECTT_Order.FNumber,T_Order.FPrice, 

T_Customer.FName,T_Customer.FAge 

FROMT_Order

INNER JOINT_Customer 

ONT_Order.FPrice< T_Customer.FAge*5

andT_Order.FCustomerId=T_Customer.FId 

三、交叉连接:交叉连接会把涉及到的所有表中的所有记录到包含在结果集中。交叉连接可以用2种形式定义分别是隐式的和显示的。

隐式定义:隐式连接只需要在select 语句后的from语句后将要进行的交叉连接的表名列出即可:如下:SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge, T_Order.FId, T_Order.FNumber, T_Order. FPrice FROM T_Customer, T_Order 这种形式几乎在所有的数据库中都支持。  交叉连接也支持给表取别名。

显示定义:使用cross  join关键字语法如下:

SELECTT_Customer.FId,T_Customer.FName,T_Customer.FAge,T_Order.FId,T_Order.FNumber, T_Order.FPrice FROMT_Customer  CROSS JOINT_Order 

四、自定义连接:表与其自身相连接,就被称为自连接。 其主要用途就是检索一张表内部的匹配情况。

SELECT o1.FNumber,o1.FPrice,o1.FTypeId, o2.FNumber,o2.FPrice,o2.FTypeId FROM T_Order o1 INNER JOINT_Order o2  ONo1.FTypeId=o2.FTypeId  and o1.FId<o2.FId 

五、外连接:外连接分为左外部链接、右外部链接和全外部链接。

1、左外部链接:左外部链接还返回左表中不符合表的数据。

2、右外部链接:右外部链接还返回右表中不符合表的数据。

3、全外部链接:全外部链接还返回在左表中不符合链接条件的数据以及右表中不符合链接条件的数据,它其实是右外连接和左外连接的集合。     这里的左表和右表是相对于join关键字来说的,位于join关键字的左表则称为左表,位于join关键字的右侧则成为的表则称为右表。

1、左外部链接:在左外部链接中,左表中的所有记录到要放到结果集中,无论右表是否存在于左表匹配的记录。实例:

Select o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAge from T_Order o left outer join T_Customer c on o.FCustomerId=c.FId;  在做外部链接中也可以用where语句。

2、右外部链接:于左外部链接正好相反,在右外部链接中不管是否成功匹配链接条件都会返回右表中的所有记录。实例:

Select o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAge form T_Order o Right Outer Join T_Customer c on o.FCustomerId=c.FId;

3、全外部链接:全外部连接是左外部连接和右外部连接的合集, 因为即使在右表中不存在匹配连接条件的数据, 左表中的所有记录也将被放到结果集中, 同样即使在左表中不存在匹配连接条件的数据, 右表中的所有记录也将被放到结果集中。实例:

Select o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAge from T_Oder o Full outer join T_Customer c on o.FcustomerId=c.FId;

posted @ 2013-10-17 10:18  Andyabc  阅读(387)  评论(0编辑  收藏  举报