「Inner join」通常称为「内部结合」,它可以应付大部份的结合查询需求,内部结合有两种写法,差异在把结合条件设定在「WHERE」子句或「FROM」子句中。
下列是在「WHERE」子句中设定结合条件来执行结合查询的语法:
虽然这里会先介绍使用结合条件的结合查询,不过不管使用哪一种写法,在使用结合查询时都会有一样的想法。首先是你想要查询的栏位:
把需要查询的栏位列在「SELECT」之后,「FROM」子句后面该需要哪一些表格就很清楚了:
最后把表格与表格之间「对照」的结合条件放在「WHERE」子句中:
这样的叙述就可以查询「所有国家的首都名称」。
在上列的讨论中,因为使用到多个表格了,所以在使用表格的栏位时,都特别提醒你要在栏位名称前面加上表格名称。其实并不是全部都要指定表格名称,你只有在一种情况下,才「一定要」在栏位名称前指定表格名称:
在查询叙述的「FROM」子句中用到的表格,如果有一样的栏位名称,而且你在查询叙述中也用到了这些栏位,就「一定要」在栏位名称前指定表格名称,否则都可以省略:
所以省略掉一些表格名称以后,查询叙述就简短多了,不过它执行查询后的结果也是一样的:
SELECT Code, Capital, city.Name FROM country, city WHERE Capital = ID
如果不小心违反上列的规则,你的查询叙述在执行以后就会发生错误:
如果你想要查询「国家和首都的人口和比例」:
这样的结合查询刚好都使用到两个表格中,有同样名称的栏位,所以你一定要指定表格名称:
SELECT country.name, country.Population coPop, city.Name, city.Population ciPop, city.Population / country.Population * 100 Scale FROM country, city WHERE Capital = ID
这样的查询叙述就会比较长一些,也比较容易打错;所以在结合查询的叙述中,通常为帮「FROM」子句后面的表格都取一个「表格别名」:
使用表格别名以后:
帮「FROM」子句中使用到的表格都取一个表格别名,这样的查询叙述通常也可以比较简短一些了。
执行结合查询除了使用上列讨论的方式外,还有另外一种结合查询语法:
虽然这两种写法看起来的差异很大,不过它们的想法会是一样的。首先是需要查询的栏位:
接下来是需要用到的表格,不过你要使用「INNER JOIN」把两个表格「结合」起来:
最后是结合条件:
上列使用「INNER JOIN」的结合查询执行以后,跟之前使用结合条件的结合查询,所得到的结果是完全一样的。所以查询「国家和首都的人口和比例」的结合查询,也可以改用下列的写法:
SELECT a.name, a.Population coPop, b.Name, b.Population ciPop, b.Population / a.Population * 100 FROM country a INNER JOIN city b ON Capital = ID
使用「INNER JOIN」的结合查询还有另外一种选择:
下列是使用「ON」或是「USING」来设定结合条件的情况:
所以如果想要查询「cmdev」资料库中,员工资料和他们的部门名称,就会有三种写法可以选择了: