SQL:在SQL Server 2012中使用外部联接

SQL:在SQL Server 2012中使用外部联接,sql,sql-server,join,sql-server-2012,outer-join,Sql,Sql Server,Join,Sql Server 2012,Outer Join,我试图学习如何在SQLServer中使用外部连接函数,以便select查询返回两个表中的所有值,甚至是不匹配的表 以下是我使用的两个示例表,男孩和女孩: Boys: Name City Andrew Cape Town Mike Paphos Simon Amsterdam Girls: Name City Georgia Paphos Megan London Eva Amsterdam Stephi Cape Town 以下是我写的查询: SEL

我试图学习如何在SQLServer中使用外部连接函数,以便select查询返回两个表中的所有值,甚至是不匹配的表

以下是我使用的两个示例表,男孩和女孩:

Boys:

Name    City
Andrew  Cape Town
Mike    Paphos
Simon   Amsterdam

Girls:

Name    City
Georgia Paphos
Megan   London
Eva     Amsterdam
Stephi  Cape Town
以下是我写的查询:

SELECT boys.name, boys.city, girls.name, girls.city
    FROM boys, girls
    RIGHT OUTER JOIN boys as men ON boys.city=girls.city; 
我试图返回一个表,如下所示:

boys.Name     boys.City        girls.name        girls.city    
Andrew        Cape Town        Stephi            Cape Town  
Mike          Paphos           Georgia           Paphos  
Simon         Amsterdam        Eva               Amsterdam  
NULL          NULL             Megan             London  
普通内部连接忽略最后一行,因为它没有匹配的男孩城市

有人能帮我吗

谢谢


Mike

您正在寻找一个双向的完整外部联接,而不是右外部联接

SELECT boys.name boys_name, boys.city boys_city,
       girls.name girls_name, girls.city girls_city
FROM boys
FULL OUTER JOIN girls 
  ON boys.city=girls.city

现有查询连接boys两次,一次使用旧的连接语法,一次使用右连接。使用完全外部联接时,每个表只需包含一次。

可以在两个表上使用完全外部联接

你可以找到更多的细节

例如:

SELECT boys.name, boys.city, girls.name, girls.city
    FROM girls
    FULL OUTER JOIN boys ON boys.city=girls.city;  

FROM boys,girls join语法是一种较老的语法,我不理解这个词,atm使用隐式的内部连接,这是你没有看到想要的结果的部分原因。你到底为什么要为每个性别都设置一个表?这只是一个无意义的表来说明我的问题FROM boys,girls RIGHT OUTER join boys-哈?此外,是否真的有任何一个城市,例如开普敦,最多只能有一个男孩和一个女孩?如果开普敦有两个女孩和一个男孩>,你预计会有什么结果?