我是數據庫初學者,我有一個小問題。與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