SQL:在SQL Server 2012中使用外连接

问题描述:

我在学习如何在SQL Server中使用OUTER JOIN函数,以便select查询返回两个表中的所有值,即使是不匹配的也是如此。SQL:在SQL Server 2012中使用外连接

下面是我使用(男孩和女孩)这两个示例表:

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 

正常的内部连接会忽略最后一行,因为它没有匹配的男孩城市。

任何人都可以帮助我吗?

谢谢!

迈克

+1

的'男孩子,girls'联接语法是较旧的语法(术语我想不起来了个大气压),并使用一个隐含的内部联接这就是为什么你的部分原因没有看到你想要的结果。 – 2014-10-06 15:12:59

+1

为什么地球上你有每个性别的表格? – Kermit 2014-10-06 15:45:36

+0

它只是一个无意义的表格来说明我的问题 – Mike 2014-10-06 15:51:21

你正在寻找一个FULL OUTER JOIN这是双向的,而不是右外连接;

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 

An SQLfiddle to test with

您现有的查询连接两次男孩,一次使用旧连接语法,一次使用正确连接。使用完全外连接,您只需将每个表包含一次。

您可以在两个表上使用FULL OUTER JOIN

您可以找到更多的细节here

例如:

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