0

假设有 2 个或更多表。

表 A:身份证、姓名、生日

表 B:bID、petType、petName

表 C:cID、stackOverFlowUsername

我想获得类似身份证件、姓名、生日、一个人拥有的猫的数量、堆栈溢出的用户名

我们可以

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

我的问题是什么时候适合使用 select、joins 或有更好的方法?

更新:

这是另一个问题。如果我有 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 帐户,我可以使用联接来实现类似的功能吗?

谢谢

4

1 回答 1

0

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

于 2014-03-03T01:25:33.903 回答