Эти два оператора SQL эквивалентны? Один работает другой нет - PullRequest
1 голос
/ 10 июня 2019

Я изучаю SQL в w3schools. Я изучал эту главу: 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 ]

4 голосов
/ 10 июня 2019

Они эквивалентны только в SQL Server (и Sybase). Они расширяют шаблон LIKE и включают классы символов (буквы внутри квадратных скобок).

В других базах данных шаблоны LIKE имеют только два подстановочных знака % и _. Квадратные скобки - это просто квадратные скобки. Маловероятно, чтобы название страны соответствовало им.

2 голосов
/ 10 июня 2019

Как уже говорили другие, это работает только в 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;
2 голосов
/ 10 июня 2019

Они эквивалентны, если вы используете T-SQL. [] синтаксис - расширение Microsoft SQL Server / Sybase.

...