从 2 个或更多表中获取数据:选择还是加入?
Posted
技术标签:
【中文标题】从 2 个或更多表中获取数据:选择还是加入?【英文标题】:Getting data from 2 or more tables: select or join? 【发布时间】:2014-03-03 01:17:06 【问题描述】:假设有 2 个或更多表。
表 A:身份证、姓名、生日
表 B:bID、petType、petName
表 C:cID、***Username
我想获得类似身份证件、姓名、生日、一个人拥有的猫的数量、堆栈溢出的用户名
我们可以
使用连接来连接所有 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 个 *** 帐户,Tom 有 1 个,Peter 有 2 个, 使用
A left join B left join C
将返回总共 6 行
select a.*, select count(*) from tableB where..., select top 1 ***Username from tableC
返回 3 行,因为有 3 个人
如果我只想为 tableA 中的每个人提供一行数据,而不管他/她有多少个 *** 帐户,我可以使用联接来实现类似的功能吗?
谢谢
【问题讨论】:
【参考方案1】:可能会针对每个结果行扫描选定的子选择(案例 2),而连接的表/视图/子选择仅计算一次:节省内存和连接时间(使用预建索引)。一旦习惯了讲 SQL,就会发现 JOIN 语法容易阅读很多倍。
【讨论】:
嗨,我可以说如果我做这样的事情与连接相比会浪费更多的内存吗? select a.*, select col1 from tableC where..., select col2 from tableC where..., select col3 from tableC where...以上是关于从 2 个或更多表中获取数据:选择还是加入?的主要内容,如果未能解决你的问题,请参考以下文章