这两个 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;
我正在 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;