Комбинирование предикатов представлений и основных запросов в представлениях

Когда вы делаете запрос представления, вы собственно, запрашиваете запрос. Основной способ для SQL обойти это, — объединить предикаты двух запросов в один. Давайте посмотрим еще раз на наше представление с именем Londonstaff :
CREATE VIEW Londonstaff AS SELECT * FROM Salespeople WHERE city = ‘ London ‘;

Если мы выполняем следующий запрос в этом представлении
SELECT * FROM Londonstaff WHERE comm > .12;
он такой же как, если бы мы выполнили следующее в таблице Продавцов:
SELECT * FROM Salespeople WHERE city = ‘ London ‘ AND comm > .12;
Это прекрасно, за исключением того, что появляется возможна проблема с представлением. Имеется возможность комбинации из двух полностью допустимых предикатов и получения предиката, который не будет работать. Например, предположим, что мы создаем (CREATE) следующее представ- ление:
CREATE VIEW Ratingcount (rating, number) AS SELECT rating, COUNT (*) FROM Customers GROUP BY rating;

Это дает нам число заказчиков, которые мы имеем для каждого уровня оценки(rating). Вы можете затем сделать запрос этого представления, чтобы выяснить, имеется ли какая-нибудь оценка, в настоящее время назначенная для трех заказчиков:
SELECT * FROM Ratingcount WHERE number = 3;

Посмотрим что случится, если мы скомбинируем два предиката:
SELECT rating, COUNT (*) FROM Customers WHERE COUNT (*) = 3 GROUP BY rating;
Это недопустимый запрос. Агрегатные функции, такие как COUNT (СЧЕТ), не могут использоваться в предикате. Правильным способом при формировании вышеупомянутого запроса, конечно же будет следующий:
SELECT rating, COUNT (*) FROM Customers GROUP BY rating; HAVING COUNT (*) = 3;

Но SQL может не выполнить превращения. Может ли равноценный запрос вместо запроса Ratingcount потерпеть неудачу? Да может! Это — неоднозначна область SQL, где методика использования представлений может дать хорошие результаты. Самое лучшее, что можно сделать в случае, когда об этом ничего не сказано в вашей системной документации, так это попытка в ней разобраться. Если команда допустима, вы можете использовать представления, чтобы установить некоторые ограничения SQL в синтаксисе запроса.

‹ Модифицирование представлений
Вверх
Групповые представления ›

Айтистанция
Добавить комментарий

Adblock
detector