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

时间:2019-06-10 17:26:12

标签: sql sql-like

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

它不会显示错误消息,而只会显示“无结果”。当我在这里尝试第二条SQL语句时: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_having

第一个SQL语句确实起作用。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

user_posts