假设有2个或更多表格。
表A:aID,名称,生日
表B:bID,petType,petName
表C:cID,stackOverFlowUsername
我希望获得像aID,名字,生日,一个人拥有的猫的数量,堆栈溢出的用户名
我们可以
select * from tableA... tableB... tableC...
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帐户,我可以使用连接来实现类似的东西吗?
由于
答案 0 :(得分:0)
可能会为每个结果行扫描选定的子选择(案例2),而连接的表/视图/子选择仅计算一次:节省内存和加入时间(使用预先建立的索引)。一旦习惯于谈论SQL,你会发现JOIN语法很容易阅读。