Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:

SELECT *

FROM Londonstaff;

SQL Execution Log

SELECT * FROM Londonstaff;

snum

sname

city

comm

1001

Peel

London

0.1200

1004

Motika

London

0.1100

Таблица 20.1:

Представление Londonstaff

Когда вы приказываете SQL выбрать(SELECT) все строки (* ) из представления, он выполняет запрос содержащий в определении - Loncfonstaff, и возвращает все из его вывода. Имея предикат в запросе представления, можно вывести только те строки из представления, которые будут удовлетворять этому предикату. Вы могли бы вспомнить, что в Главе 15, вы имели таблицу, называемую Londonstaff, в которую вы вставляли это же самое содержание (конечно, мы понимаем что таблица - не слишком велика. Если это так, вы будете должны выбрать другое имя для вашего представления). Преимущество использования представления, по сравнению с основной таблицы, в том, что представление будет модифицировано автоматически всякий раз, когда таблица лежащая в его основе изменяется.

Содержание представления не фиксировано, и переназначается каждый раз когда вы ссылаетесь на представление в команде. Если вы добавите завтра другого, живущего в Лондоне продавца, он автоматически появится в представлении.

Представления значительно расширяют управление вашими данными. Это - превосходный способ дать публичный доступ к некоторой, но не всей информации в таблице. Если вы хотите чтобы ваш продавец был показан в таблице Продавцов, но при этом не были показаны комиссии других продавцов, вы могли бы создать представление с использованием следующего оператора (вывод показан в Таблице 20.2 )

CREATE VIEW Salesown

AS SELECT snum, sname, city

FROM Salespeople:

SQL Execution Log

SELECT * FROM Salesown;

snum

sname

city

1001

Peel

London

1002

Serres

San Jose

1004

Motika

London

1007

Rifkin

Barcelona

1003

Axelrod

New York

Таблица 20.2: Представление Salesown

Другими словами, это представление - такое же как для таблицы Продавцов, за исключением того, что поле comm, не упоминалось в запросе, и следовательно не было включено в представление.

МОДИФИЦИРОВАНИЕ ПРЕДСТАВЛЕНИЙ

Представление может

теперь изменяться командами модификации DML, но модификация не будет воздействовать на само представление. Команды будут на самом деле перенаправлены к базовой таблице:

UPDATE Salesown

SET city='Palo Alto'

WHERE snum=1004;

Его действие идентично выполнению той же команды в таблице Продавцов. Однако, если значение комиссионных продавца будет обработано командой UPDATE

UPDATE Salesown

SET comm=.20

WHERE snum=1004;

она будет отвергнута, так как поле comm отсутствует в представлении Salesown. Это важное замечание, показывающее что не все представления могут быть модифицированы. Мы будем исследовать проблемы модификации представлений в Главе 21.

ИМЕНОВАНИЕ СТОЛБЦОВ

В нашем примере, поля наших представлений имеют свои имена, полученые прямо из имен полей основной таблицы. Это удобно. Однако, иногда вам нужно снабжать ваши столбцы новыми именами:

* когда некоторые столбцы являются выводимыми, и проэтому не имеющими имен.

* когда два или более столбцов в объединении, имеют те же имена что в их базовой таблице.

Имена, которые могут стать именами полей, даются в круглых скобках, после имени таблиц. Они не будут запрошены, если совпадают с именами полей запрашиваемой таблицы. Тип данных и размер этих полей будут отличаются от запрашиваемых полей которые "передаются" в них. Обычно вы не указываете новых имен полей, но если вы все таки сделали это, вы должны делать это для каждого поля в представлении.

КОМБИНИРОВАНИЕ ПРЕДИКАТОВ ПРЕДСТАВЛЕНИЙ И ОСНОВНЫХ ЗАПРОСОВ В ПРЕДСТАВЛЕНИЯХ

Когда вы делаете запрос представления, вы собственно, запрашиваете запрос. Основной способ для 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;

Посмотрим что случится если мы скомбинируем два предиката:

Поделиться:
Популярные книги

Пчелиный волк

Веркин Эдуард Николаевич
2. Хроника Страны Мечты
Фантастика:
фэнтези
7.89
рейтинг книги
Пчелиный волк

Фантастика. Путеводитель

Weeldoon
Справочная литература:
руководства
5.00
рейтинг книги
Фантастика. Путеводитель

Танковые сражения. Боевое применение танков во Второй мировой войне. 1939-1945

фон Меллентин Фридрих Вильгельм
За линией фронта. Мемуары
Документальная литература:
биографии и мемуары
6.50
рейтинг книги
Танковые сражения. Боевое применение танков во Второй мировой войне. 1939-1945

Цивилизация статуса (сборник)

Шекли Роберт
Сборники Роберта Шекли
Фантастика:
фэнтези
8.22
рейтинг книги
Цивилизация статуса (сборник)

Восьмое Небо

Соловьев Константин Сергеевич
Фантастика:
фэнтези
юмористическая фантастика
5.25
рейтинг книги
Восьмое Небо

Домашняя медицинская энциклопедия. Симптомы и лечение самых распространенных заболеваний

Коллектив авторов
Научно-образовательная:
медицина
5.00
рейтинг книги
Домашняя медицинская энциклопедия. Симптомы и лечение самых распространенных заболеваний

Тристан и Женевьева (Среди роз)

Дрейк Шеннон
Любовные романы:
исторические любовные романы
7.67
рейтинг книги
Тристан и Женевьева (Среди роз)

"Фантастика 2025-41". Компиляция. Книги 1-43

Парсиев Дмитрий
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-41. Компиляция. Книги 1-43

Заложники пустоты

Абоян Виталий Эдуардович
Анклавы
Фантастика:
киберпанк
5.75
рейтинг книги
Заложники пустоты

Ник. Цикл

Ясинский Анджей
Ник
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ник. Цикл

Масоны

Писемский Алексей Феофилактович
Проза:
русская классическая проза
6.25
рейтинг книги
Масоны

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.85
рейтинг книги
Архонт

Двадцать один год

Кинешемцева Мелания
Любовные романы:
прочие любовные романы
5.00
рейтинг книги
Двадцать один год

Тень Гегемона

Кард Орсон Скотт
2. Эндер Виггин. Сага теней
Фантастика:
научная фантастика
7.11
рейтинг книги
Тень Гегемона