联接类型

当联接表时,创建的联接类型影响出现在结果集内的行。 可以创建下列联接类型:

  • 内部联接   仅显示两个联接表中的匹配行的联接。 (这是查询和视图设计器中的默认联接类型。)例如,可以联接 titles 表和 publishers 表以创建显示每个书名的出版商名称的结果集。 在内部联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。 这类联接所得到的 SQL 可能像下面这样:

    SELECT     title, pub_name
    FROM         titles INNER JOIN
    publishers ON titles.pub_id = publishers.pub_id
    

    备注

    当创建内部联接时,包含 NULL 的列不与任何值匹配,因此不包括在结果集内。空值不与其他的空值匹配。

  • 外部联接   即使在联接表中没有相关行的行也可包括在内的联接。 可以创建外部联接的三个变体来指定要包括的不匹配行:

    • 左外部联接   包括第一个命名表(“左”表,出现在 JOIN 子句的最左边)中的所有行。 不包括右表中的不匹配行。 例如,下面的 SQL 语句说明这样一个左外部联接,它在 titles 表和 publishers 表之间联接以包括所有的书名,甚至包括那些没有出版商信息的书名:

      SELECT titles.title_id, 
             titles.title, 
             publishers.pub_name
      FROM titles LEFT OUTER JOIN publishers 
                  ON titles.pub_id 
                   = publishers.pub_id
      
    • 右外部联接   包括第二个命名表(“右”表,出现在 JOIN 子句的最右边)中的所有行。 不包括左表中的不匹配行。 例如,在 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
      

      备注

      有些数据库(如 Oracle)不支持完全外部联接。

  • 完全联接   在这类联接的结果集内,两个表中每对可能成对的行占一行。 例如,在通过作者 CROSS JOIN(完全联接)出版商输出的结果集内,每个可能的作者/出版商组合占一行。 得到的 SQL 可能像下面这样:

    SELECT *
    FROM authors CROSS JOIN publishers 
    

请参见

概念

处理“结果”窗格中的数据

其他资源

指定搜索条件