如下两个查询所示,我们发现它们都工作得很好。然后我感到困惑,为什么我们要使用BETWEEN,因为我发现在不同的数据库中,BETWEEN的行为是不同的,正如在w3school中发现的那样
SELECT *
FROM employees
WHERE salary BETWEEN 5000 AND 15000;
SELECT *
FROM employees
WHERE salary >= 5000
AND salary <= 15000;
发布于 2009-12-25 17:17:12
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
t_source
只是一个包含1,000,000
记录的虚拟表。
当然,这可以使用子查询来解决,但在MySQL
中效率较低。
当然,BETWEEN
更具可读性。为了永远记住语法,在查询中使用它需要花费3
时间。
在SQL Server
和MySQL
中,对具有非前导'%'
的常量的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)
但是,LIKE
语法更清晰。
发布于 2009-12-25 17:07:48
当所比较的表达式是一个复杂的计算而不仅仅是一个简单的列时,使用BETWEEN有额外的优点;它省去了两次写出复杂的表达式。
发布于 2009-12-25 16:51:53
带有"between“的版本更容易阅读。如果我使用第二个版本,我可能会把它写成
5000 <= salary and salary <= 15000
出于同样的原因。
https://stackoverflow.com/questions/1960801
复制相似问题