SELECT titles.title_id, 
       titles.title, 
       publishers.pub_name
FROM titles left OUTER JOIN publishers 
            ON titles.pub_id 
             = publishers.pub_id
或者
SELECT titles.title_id, 
       titles.title, 
       publishers.pub_name
FROM titles right OUTER JOIN publishers 
            ON titles.pub_id 
             = publishers.pub_id

解决方案 »

  1.   


        建议看看full join的联机帮助。
      

  2.   

    仔细看看帮助
    若要通过在联接结果中包括不匹配的行保留不匹配信息,请使用完整外部联接。Microsoft® SQL Server™ 2000 提供完整外部联接运算符 FULL OUTER JOIN,不管另一个表是否有匹配的值,此运算符都包括两个表中的所有行。假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。SQL-92 FULL OUTER JOIN 运算符指明:不管表中是否有匹配的数据,结果将包括两个表中的所有行。若要在结果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商是否住在同一个城市,请使用完整外部联接。下面是 Transact-SQL 完整外部联接的查询和结果:USE pubs
    SELECT a.au_fname, a.au_lname, p.pub_name
    FROM authors a FULL OUTER JOIN publishers p
       ON a.city = p.city
    ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC下面是结果集:au_fname             au_lname                     pub_name             
    -------------------- ---------------------------- -------------------- 
    Reginald             Blotchet-Halls               NULL
    Michel               DeFrance                     NULL
    Innes                del Castillo                 NULL
    Ann                  Dull                         NULL
    Marjorie             Green                        NULL
    Morningstar          Greene                       NULL
    Burt                 Gringlesby                   NULL
    Sheryl               Hunter                       NULL
    Livia                Karsen                       NULL
    Charlene             Locksley                     NULL
    Stearns              MacFeather                   NULL
    Heather              McBadden                     NULL
    Michael              O'Leary                      NULL
    Sylvia               Panteley                     NULL
    Albert               Ringer                       NULL
    Anne                 Ringer                       NULL
    Meander              Smith                        NULL
    Dean                 Straight                     NULL
    Dirk                 Stringer                     NULL
    Johnson              White                        NULL
    Akiko                Yokomoto                     NULL
    Abraham              Bennet                       Algodata Infosystems
    Cheryl               Carson                       Algodata Infosystems
    NULL                 NULL                         Binnet & Hardley
    NULL                 NULL                         Five Lakes Publishing
    NULL                 NULL                         GGG&G
    NULL                 NULL                         Lucerne Publishing
    NULL                 NULL                         New Moon Books
    NULL                 NULL                         Ramona Publishers
    NULL                 NULL                         Scootney Books
      

  3.   

    <joined_table>由两个或更多表的积组成的结果集,例如:SELECT *
    FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
        RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
            ON tab3.c1 = tab4.c1
            ON tab2.c3 = tab4.c3对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。<join_type>指定联接操作的类型。INNER指定返回每对匹配的行。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。FULL [OUTER]指定在结果集中包含左表或右表中不满足联接条件的行,并将对应于另一个表的输出列设为 NULL。这是对通常由 INNER JOIN 返回的所有行的补充。说明  按此处指定的方法指定外联接或在 WHERE 子句中使用旧式非标准的 *= 和 =* 运算符都是可行的。不能在同一语句中同时使用这两种方法。
    LEFT [OUTER]指定在结果集中包含左表中所有不满足联接条件的行,且在由内联接返回所有的行之外,将另外一个表的输出列设为 NULL。RIGHT [OUTER]指定在结果集中包含右表中所有不满足联接条件的行,且在由内联接返回的所有行之外,将与另外一个表对应的输出列设为 NULL。<join_hint>指定 SQL Server 查询优化器为在查询的 FROM 子句中指定的每个联接使用一个联接提示或执行算法。有关更多信息,请参见本主题下面的"联接提示"。JOIN指明所指定的联接操作应在给定的表或视图之间执行。ON <search_condition>指定联接所基于的条件。尽管经常使用列和比较运算符,但此条件可指定任何谓词,例如:SELECT ProductID, Suppliers.SupplierID
        FROM Suppliers JOIN Products 
        ON (Suppliers.SupplierID = Products.SupplierID)当条件指定列时,列不一定必须具有相同的名称或数据类型;但是,如果数据类型不一致,则这些列要么必须相互兼容,要么是 Microsoft&reg; SQL Server&#8482; 能够隐性转换的类型。如果数据类型不能隐式转换,则条件必须使用 CAST 函数显式转换数据类型。 在 ON 子句中可能有仅涉及一个联接表的谓词。这样的谓词也可能出现在查询中的 WHERE 子句中。尽管这种谓词的放置在 INNER 联接中不会产生差别,但是在涉及 OUTER 联接时可能会导致不同的结果。这是因为 ON 子句中的谓词在应用于联接之前先应用于表,而 WHERE 子句在语意上应用于联接结果。有关搜索条件和谓词的更多信息,请参见搜索条件。 CROSS JOIN指定两个表的矢量积。这将返回相同的行,就好像在旧式的非 SQL-92 式联接中并没有指定 WHERE 子句。表提示
    表提示指定一个表扫描、查询优化器要使用的一个或多个索引或查询优化器要在该表中为该 SELECT 语句使用的锁定方法。虽然这是一个选项,但查询优化器通常无须指定提示就能够选择最佳优化方法。 注意  因为 SQL Server 查询优化器通常为查询选择最优执行计划,所以建议只将 <join_hint>、<query_hint>、<table_hint> 和 <view_hint> 作为经验丰富的开发人员和数据库管理员的最终手段。
    如果查询计划不访问表,则忽略表提示。这可能是优化器作出完全不访问该表的选择的结果,或改为访问索引视图。在后一种情况中,使用 OPTION (EXPAND VIEWS) 查询提示可阻止使用索引视图。鼓励在表提示之间使用逗号,尽管这是可选的。向后兼容性支持使用空格而不是逗号分隔提示。鼓励使用 WITH 关键字,尽管目前这还不是必须。在将来的 SQL Server 版本中,WITH 可能会成为必需的关键字。在 SQL Server 2000 中,所有的锁提示都传播给视图中引用的所有基表和视图。另外,SQL Server 执行相应的锁一致性检查。如果表(包括系统表)中包含计算列,而这些计算列由访问其它表中的列的表达式或函数计算而得,则不在那些表上使用表提示(不传播表提示)。例如,在查询中的表上指定 NOLOCK 表提示。该表包含由访问另一表中的列的表达式和函数组合计算到的计算列。这些由表达式和函数引用的表在被访问时并不使用 NOLOCK 表提示。对于 FROM 子句中的每个表,SQL Server 不允许有来自下列各组的多个表提示: 粒度提示:PAGLOCK、NOLOCK、ROWLOCK、TABLOCK 或 TABLOCKX。 
    隔离级别提示:HOLDLOCK、NOLOCK、READCOMMITTED、REPEATABLEREAD 或 SERIALIZABLE。 
    NOLOCK、READUNCOMMITTED 和 READPAST 表提示不能用于将进行删除、插入或更新操作的表。