当联接表时,创建的联接类型影响出现在结果集内的行。可以创建下列联接类型:
titles
表和 publishers
表以创建显示每个书名的出版商名称的结果集。在内联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。这类联接所得到的 SQL 可能象下面这样: ·
SELECT title, pub_name
·
FROM titles INNER JOIN
publishers ON titles.pub_id = publishers.pub_id
注意 当创建内联接时,包含 NULL 的列不与任何值匹配,因此不包括在结果集内。空值不与其它的空值匹配。
有关创建内联接的更多信息,请参见自动联接表。
titles
表和 publishers
表之间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名: ·
SELECT titles.title_id,
· titles.title,
·
publishers.pub_name
·
FROM titles LEFT OUTER JOIN publishers
·
ON titles.pub_id
= publishers.pub_id
titles
和 publishers
表之间的右向外联接将包括所有的出版商,甚至包括那些在 titles
表中没有书名的出版商。所得到的 SQL 可能象下面这样: ·
SELECT titles.title_id,
· titles.title,
·
publishers.pub_name
·
FROM titles RIGHT OUTER JOIN publishers
·
ON titles.pub_id
= publishers.pub_id
titles
表和 publishers
表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个表中没有匹配值的书名和出版商。 ·
SELECT titles.title_id,
· titles.title,
·
publishers.pub_name
·
FROM titles FULL OUTER JOIN publishers
·
ON titles.pub_id
= publishers.pub_id
· 有关创建外联接的更多信息,请参见创建外联接。
·
SELECT *
FROM authors CROSS JOIN publishers
有关创建完全联接的更多信息,请参见删除联接。
请参见
创建外联接 | 创建自联接 | 查询设计器表示联接的方式 | 自动联接表 | 手工联接表 | 修改联接运算符 | 使用多个表进行查询 | 删除联接
©1988-2000 Microsoft Corporation。保留所有权利。
访问和更改关系数据
|
如果要联接的表的列中有空值,则这些空值互相不匹配。如果其中一个联接表的列中出现空值,只能通过外联接返回这些空值(除非 WHERE 子句不包括空值)。
下面的两个表中,每个表在要参与联接的列中均包含 NULL 值:
table1 table2
a b c d
------- ------ ------- ------
1 one NULL two
NULL three 4 four
4 join4
将列 a 中的值与列 c 中的值进行比较的联接在包含 NULL 值的列上不能获得匹配结果:
SELECT *
FROM table1 t1 JOIN table2 t2
ON t1.a = t2.c
ORDER BY t1.a
只返回列 a 和 c 值为 4 的一行:
a b c d
----------- ------ ----------- ------
4 join4 4 four
(1 row(s) affected)
从基表返回的空值和从外联接返回的空值也很难区分。例如,下面的 SELECT 语句对这两个表进行左向外联接:
SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
ON t1.a = t2.c
ORDER BY t1.a
下面是结果集:
a b c d
----------- ------ ----------- ------
NULL three NULL NULL
1 one NULL NULL
4 join4 4 four
(3 row(s) affected)
结果并不能使数据中的 NULL 值和表示联接失败的 NULL 值容易区分。如果要联接的数据出现空值,最好用常规联接将这些空值从结果中省略。
©1988-2000 Microsoft Corporation。保留所有权利。