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的区别的主要内容,如果未能解决你的问题,请参考以下文章

sql中“inner join”和“where”的操作顺序

SQL数据库怎么查询,between 当前日期 and 当前日期前30天,之间的数据

SQL BETWEEN 操作符

在 WHERE 中使用多个 BETWEEN 优化 SQL

SQL中JOIN操作详解

SQL中JOIN操作详解