这两个 SQL 语句是否等价?一个有效,另一个无效

Are these two SQL Statements equivalent? One works the other doesn't

我正在 w3schools 学习 SQL。我正在研究这一章: https://www.w3schools.com/sql/sql_having.asp

我决定使用通配符只是为了让它变得有趣。 当我在线尝试时,第一个 SQL 语句似乎有效,但第二个无效。 这就是为什么我想知道两个 SQL 语句是否等价。

1)

SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE Country LIKE 'u%' OR Country LIKE 'g%' OR Country LIKE 'f%'
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;

2)

SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE Country LIKE '[ugf]%' 
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;

它不显示错误消息它只显示 "No result." 当我在这里尝试第二个 SQL 语句时: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_having

第一个 SQL 语句有效。

如果您使用 T-SQL,它们是等效的。 [] 语法是 Microsoft SQL Server/Sybase 扩展。

两者仅在SQL Server(和Sybase)中是等价的。这些扩展 LIKE 模式以包含字符 类(方括号内的字母)。

在其他数据库中,LIKE 模式只有两个通配符 %_。方括号就是方括号。国家名称不太可能匹配它们。

正如其他人所说,这仅适用于 SQL Server 和 Sybase。 Oracle 等效项需要使用 REGEXP_LIKE 函数来允许正则表达式匹配:

SELECT COUNT(CustomerID) AS Total, Country
FROM Customers
WHERE regex_like(Country, '^[ugf]','c')
GROUP BY Country
HAVING Total > 5
ORDER BY Total DESC;