我是数据库初学者,我有一个小问题。与2个SQL查询混淆
这两个查询有什么区别?
SELECT *
FROM Products
WHERE ProductName LIKE '[C-M]%';
SELECT *
FROM Products
WHERE ProductName BETWEEN 'C%' AND 'M%';
我是数据库初学者,我有一个小问题。与2个SQL查询混淆
这两个查询有什么区别?
SELECT *
FROM Products
WHERE ProductName LIKE '[C-M]%';
SELECT *
FROM Products
WHERE ProductName BETWEEN 'C%' AND 'M%';
第一个返回名称以字符串[C-M]
开头的产品。
第二个产品的名称按照字母顺序排列在C%
和M%
之间。
SELECT * FROM Products
where ProductName Like '[C-M]%';
将产生的所有行ProductName
开始与C
和M
,包括那些像Mzzzzzz
之间的任何信件。
select * from Products
where ProductName between 'C%' And 'M%';
在此查询中,%
是不通配符。它只是另一个字符文字。因此,此查询将生成行,其中ProductName
在按字母顺序排序时等于或大于(排序后)文字字符串C%
且等于或小于(排序前)M%
。它会不是产生像Mzzzzzz
行。
它会产生排C&
(C%
后排序),但会不生产排C!
(各种C%
前),但它会产生排M!
(M%
之前排序)
下面的脚本(SQL服务器)将说明:
declare @t table
(prodName varchar(10) not null)
insert @t(prodName)values
('C(apy'), ('C!ewrrt'), ('[email protected]'), ('C#qww'),
('C%tty'), ('C&asda'),('C+ASD'),('C-ert'),('C=xx'),
('E(apy'), ('E!ewrrt'), ('[email protected]'), ('J#qww'),
('G%tty'), ('N&asda'),('W+ASD'),('H-ert'),('J=xx'),
('M(apy'), ('M!ewrrt'), ('[email protected]'), ('M#qww'),
('M%tty'), ('M&asda'),('M+ASD'),('M-ert'),('M=xx')
select * from @t Where prodName like '[C-M]%'
select * from @t Where prodName between 'C%' and 'M%'
select * from @t order By prodName
注:您没有提及您正在使用的DBMS产品,以下信息适用于SQL Server
。
第一个查询将返回所有Products
其ProductName
开始C
和M
之间的任何信件。这个清单是包容性的。
Select *
From Products
Where ProductName Like '[C-M]%';
输出示例:
C
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
...
Lima
M
Mike
的秒查询将返回所有那些ProductName
是C%
之间并与字符串文字M%
结束Products
的。 (注意:M%
是而不是使用通配符。它是文字字符串M%
)。此列表是而不是(含)。
Select *
From Products
Where ProductName Between 'C%' And 'M%';
输出示例:
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
...
Lima
M
这个问题看起来特定于特定的数据库引擎。有人应该添加一个适当的标签。 – Michas