如下面的两个查询所示,我们发现它们都运行良好.然后我很困惑为什么我们应该使用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 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)
Run Code Online (Sandbox Code Playgroud)
但是,LIKE语法更清晰.
带有"之间"的版本更容易阅读.如果我要使用第二个版本,我可能会把它写成
5000 <= salary and salary <= 15000
Run Code Online (Sandbox Code Playgroud)
出于同样的原因.
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)
最后,如果您只输入一次列名,则可以减少出错的机会
| 归档时间: |
|
| 查看次数: |
21436 次 |
| 最近记录: |