You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接两张表时可使用SELECT *吗?指定SQL查询是否有效?

关于多表查询中使用*的问题解答

没问题,咱们一步步把这个事儿说清楚:

1. 多表连接时能不能用*?

完全可以!用SELECT *在多表连接场景下,会返回参与连接的所有表的全部字段。不过这里要提一个常见的坑:如果两张表有同名字段(比如你例子里的h_id),查询结果里会出现两个同名的列,这时候如果是在程序里读取结果,很多语言的数据库驱动会只保留最后一个同名字段的值,或者直接抛出异常,这一点要特别注意。

2. 你给出的查询语句是否有效?

你的这条语句:

Select * from hospital,favorite Where hospital.h_id=favorite.h_id AND favorite.u_id=$uid;

是完全有效的!它属于SQL里的隐式内连接写法(用逗号分隔两张表,通过WHERE子句指定关联条件),功能和显式的INNER JOIN写法完全等价:

SELECT * 
FROM hospital
INNER JOIN favorite ON hospital.h_id = favorite.h_id
WHERE favorite.u_id = $uid;

这条语句会返回所有满足「hospital和favorite的h_id匹配」且「favorite的u_id等于指定值$uid」的记录,包含两张表的所有字段。

3. 实用建议:尽量避免在生产环境用SELECT *

虽然*用起来省事,但在实际项目里更推荐明确写出需要的字段,原因有这几个:

  • 性能优化:只查询业务需要的字段,减少数据库的数据传输量,尤其是当表包含大字段(比如长文本、二进制数据)时,效果会很明显
  • 避免意外:如果后续表结构变更(比如新增字段),SELECT *会自动把新字段也查出来,可能导致程序处理逻辑出错(比如前端页面多了不需要的字段,或者程序依赖的字段顺序被打乱)
  • 解决同名字段冲突:可以给字段加别名,比如hospital.h_id AS hospital_hid,这样在结果里就能清晰区分不同表的同名字段了

内容的提问来源于stack exchange,提问作者Kapil Kumawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:09:43