为什么在没有它的情况下使用BETWEEN运算符?

Thu*_*der 15 sql between

如下面的两个查询所示,我们发现它们都运行良好.然后我很困惑为什么我们应该使用BETWEEN因为我发现BETWEEN在w3school中找到的不同数据库中表现不同

SELECT *
FROM employees
WHERE salary BETWEEN 5000 AND 15000;

SELECT *
FROM employees
WHERE salary >= 5000
AND salary <= 15000;
Run Code Online (Sandbox Code Playgroud)

Qua*_*noi 32

BETWEEN 可以帮助避免不必要的重新评估表达式:

SELECT  AVG(RAND(20091225) BETWEEN 0.2 AND 0.4)
FROM    t_source;

---
0.1998

SELECT  AVG(RAND(20091225) >= 0.2 AND RAND(20091225) <= 0.4)
FROM    t_source;

---
0.3199
Run Code Online (Sandbox Code Playgroud)

t_source只是一个带1,000,000记录的虚拟表.

当然,这可以使用子查询来解决,但MySQL效率较低.

当然,BETWEEN更具可读性.3在查询中使用它需要时间来永远记住语法.

In SQL ServerMySQL,LIKE对于一个非领先的常量'%'也是一对>=和的简写<:

SET SHOWPLAN_TEXT ON
GO
SELECT  *
FROM    master
WHERE   name LIKE 'string%'
GO
SET SHOWPLAN_TEXT OFF
GO


|--Index Seek(OBJECT:([test].[dbo].[master].[ix_name_desc]), SEEK:([test].[dbo].[master].[name] < 'strinH' AND [test].[dbo].[master].[name] >= 'string'),  WHERE:([test].[dbo].[master].[name] like 'string%') ORDERED FORWARD)
Run Code Online (Sandbox Code Playgroud)

但是,LIKE语法更清晰.


Jon*_*ler 16

当比较的表达式是一个复杂的计算而不仅仅是一个简单的列时,使用BETWEEN有额外的优点; 它可以节省两次复杂的表达式.


Ric*_*ich 5

带有"之间"的版本更容易阅读.如果我要使用第二个版本,我可能会把它写成

5000 <= salary and salary <= 15000
Run Code Online (Sandbox Code Playgroud)

出于同样的原因.


bni*_*dyc 5

T-SQL中的BETWEEN支持NOT运算符,因此您可以使用类似的结构

WHERE salary not between 5000 AND 15000; 
Run Code Online (Sandbox Code Playgroud)

在我看来,对于一个人来说更清楚

WHERE salary < 5000 OR salary > 15000;
Run Code Online (Sandbox Code Playgroud)

最后,如果您只输入一次列名,则可以减少出错的机会

  • 你的意思是"WHERE薪水<5000或工资> 15000" (2认同)