从2个或更多表中获取数据:选择还是加入?

时间:2014-03-03 01:17:06

标签: sql select join multiple-select-query

假设有2个或更多表格。

表A:aID,名称,生日

表B:bID,petType,petName

表C:cID,stackOverFlowUsername

我希望获得像aID,名字,生日,一个人拥有的猫的数量,堆栈溢出的用户名

我们可以

  • 使用联接加入所有3个表select * from tableA... tableB... tableC...
  • 使用多个select语句select a.*, (select count(*) from tableB where petType = 'cat') as numberOfCats, (select...) as stackUsername from tableA a
  • 或其他我不知道的方式

我的问题是什么时候使用select,join或者是否有更好的方法?

更新

这是另一个问题。如果我有3个stackoverflow帐户,Tom有1,Peter有2, 使用

A left join B left join C

将返回总共6行

select a.*, select count(*) from tableB where..., select top 1 stackOverFlowUsername from tableC

返回3行,因为有3个人

如果我只需要tableA中每个人的一行数据而不管他/她有多少个stackoverflow帐户,我可以使用连接来实现类似的东西吗?

由于

1 个答案:

答案 0 :(得分:0)

可能会为每个结果行扫描选定的子选择(案例2),而连接的表/视图/子选择仅计算一次:节省内存和加入时间(使用预先建立的索引)。一旦习惯于谈论SQL,你会发现JOIN语法很容易阅读。