SQL join操作中BETWEEN、WHERE和ON的区别
Posted
技术标签:
【中文标题】SQL join操作中BETWEEN、WHERE和ON的区别【英文标题】:Difference B/W, WHERE and ON in SQL join Operation 【发布时间】:2020-02-17 13:48:23 【问题描述】:这是我的解释测试代码
create table Test3(id integer, name varchar(100));
insert into Test3(id, name) values(1, "Vijay");
insert into Test3(id, name) values(2, "Sandy");
insert into Test3(id, name) values(3, "Rohit");
create table Test4(id integer, surname varchar(100));
insert into Test4(id, surname) values(1, "karma");
insert into Test4(id, surname) values(2, "sharma");
这是我的查询:
select Test3.id , Test3.name , Test4.surname from Test3,Test4 where Test3.id = Test4.id;
select Test3.id , Test3.name , Test4.surname from Test3 join Test4 on Test3.id = Test4.id;
以上两个查询语句结果如下:
1 维杰业力
2 桑迪夏尔马
这两种查询在内部有什么区别,哪一种更高效?
【问题讨论】:
比较执行计划。如果有任何差异,我会感到惊讶。 这是相反的@GordonLinoff (很明显,)这是一个常见问题解答。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。 这能回答你的问题吗? Explicit vs implicit SQL joins 【参考方案1】:这两个查询在功能上是等效的。
一个使用老式的隐式连接(在from
子句中使用逗号),另一个使用显式连接(使用on
关键字)。
虽然两个查询都保证生成相同的结果(并且可能具有相同的性能),但我强烈建议使用显式连接语法。由于许多原因,隐式连接在几十年前(即 ANSI 92 天)已经失宠,特别是因为它们更难遵循(逻辑分布在 from
子句和 where
子句之间),并且不能轻松转换为left join
。
【讨论】:
只是想强调现在没有理由使用旧式连接。现代联接语法更清晰、更易于阅读和调试,并且自 SQL-92(28 年前)以来一直可用。【参考方案2】:两种情况下的性能是相同的。
从多个表中选择没有连接只不过是交叉连接。当你给它加上 where 子句时,查询会执行内连接。
【讨论】:
以上是关于SQL join操作中BETWEEN、WHERE和ON的区别的主要内容,如果未能解决你的问题,请参考以下文章