第三章 联接查询(转)

来源:互联网 发布:网络搞笑喜欢你的段子 编辑:程序博客网 时间:2024/05/21 17:43

第三章  联接查询

3.1 交叉连接(CROSS JOIN)

将一个输入表的每一行与另一个表的所有行进行匹配。如果一个表有m行,另一个表有n行,将得到m*n行的结果集。

ANSI-SQL语法:

SELECT C.custid,E.empid

FROM Sales.Customers AS C 

CROSS JOIN HR.Employees AS E

 

自交叉联接:

SELECT E1.empid, E1.firstname,E1.lastname , E2.empid,E2.firstname,E2.lastname

FROM HR.Employees AS E1 

CROSS JOIN HR.Employees AS E2

3.2 内联接(INNER JOIN)

ANSI-SQL语法:

SELECT E.empid, E.firstname,E.lastname,O.orderid,O.empid

FROM HR.Employees AS E 

JOIN Sales.Orders AS O

ON  E.empid = O.empid

 

【注意】ON子句只会返回令谓词结果为TRUE的行,而不会返回令谓词计算结果为FALSE或UNKNOWN得行。

3.4 外联接

逻辑处理步骤:

(1)笛卡尔积

(2)ON过滤

(3)添加外部行 : 识别保留表中按照ON条件在另一个表找不到与之匹配的那些行,再把这些行添加到联接的前两个步骤生成的结果集中。对于来自联接的非保留表的那些列,追加的外部行则用NULL作为占位符。

SELECT C.custid,O.orderid

FROM Sales.Customers AS C 

LEFT  OUTER  JOIN Sales.Orders AS O

 ON  C.custid = O.custid

WHERE  O.orderid IS NULL

从外联接保留表的角度来看,可以认为外联接结果集中的数据行包括两种:

(1)内部行:是按照ON子句中的条件能在另一边找到匹配的那些行。

(2)外部行:是指找不到匹配的那些行。

内联接只返回内部行;外联接同时返回内部行和外部行。

 

转自博客园张念http://www.cnblogs.com/zhangnian88123/archive/2010/02/03/1662653.html