SQL Server多表查询:逗号分隔表的语法是union还是join?
SQL Server 语法问题解答
语句含义说明
你给出的SQL语句如下:
select top 10 * from table1 as t1, table2 as t2
这段语句属于隐式连接写法,属于JOIN范畴,和UNION无关,具体逻辑:
select top 10 *表示返回查询结果集中的前10行所有字段- FROM子句中用逗号分隔两个表,是SQL早期的连接语法,无关联条件时等价于
CROSS JOIN(笛卡尔积):会将table1的每一行与table2的每一行逐行匹配拼接,结果总行数为table1行数 × table2行数,最终仅返回前10行拼接后的结果。如果后续添加WHERE子句指定关联条件,例如WHERE t1.id = t2.relate_id,则等价于显式INNER JOIN的效果,不过目前行业普遍不推荐这种隐式写法,可读性差且容易误写产生无意义的笛卡尔积数据。
常见疑问解答
- 属于UNION还是JOIN?
属于JOIN范畴,不是UNION。两者核心逻辑差异:- JOIN是横向拼接字段:将两个表的字段按关联条件匹配后,合并到同一行的不同列中
- UNION是纵向合并行:将两个字段数量、类型顺序一致的结果集,上下堆叠为一个结果集,UNION会自动去重,UNION ALL保留全部数据
- 是否可以合并两张表的数据?
该写法是横向合并两个表的字段,如果你需要的是将两个表的行数据上下合并,应该使用UNION/UNION ALL实现,不要用这种连接写法。
学习建议
你可以按以下路径系统学习相关知识:
- 先掌握基础DQL查询语法,明确区分连接查询和集合运算的适用场景
- 优先学习显式JOIN写法,掌握INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN的差异和使用方法
- 了解隐式连接和显式连接的区别,理解笛卡尔积的产生原因和使用风险
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

