(Microsoft PowerPoint - TBD_s_w8_student [tryb zgodno\234ci])

Transkrypt

(Microsoft PowerPoint - TBD_s_w8_student [tryb zgodno\234ci])
Plan wykładu
Technologie baz danych
– Podzapytania w klauzuli FROM i SELECT
Wykład 8: Podzapytania w klauzuli
FROM i SELECT . Perspektywy.
– Perspektywy
Małgorzata Krętowska
Wydział Informatyki
Politechnika Białostocka
2
Podzapytania w klauzuli SELECT
Podzapytania w klauzuli FROM
• Podzapytanie musi zwrócić dokładnie jedną wartość dla każdego
rekordu zapytania zewnętrznego.
• Przykład: Dla każdego pracownika wypisać różnicę między jego
pensją a średnią pensją w firmie.
• Podzapytanie tworzy zbiór danych dla zapytania zewnętrznego
• Przykład: Dla każdego pracownika wypisać różnicę między jego
pensją a średnią pensją w firmie.
– select nazwisko, pensja -(select avg(pensja) from pracownik)
roznica from pracownik;
select nazwisko, round(pensja -srednia, 2) roznica
from pracownik, (select avg(pensja) srednia from pracownik) tabela1;
3
4
Perspektywy
•
•
Co to jest perspektywa
– jest podobna do „okna”, przez które oglądamy i modyfikujemy dane tabeli
– jest definiowana w oparciu o bazową tablicę lub inną perspektywę.
– Jest przechowywana tylko w postaci definiującego ją polecenia SELECT.
Jest obiektem wirtualnym - jest tabelą, która nie istnieje w sposób
rzeczywisty, lecz przez użytkowników jest widziana jak zwykła tabela
– nie przechowuje danych. Operuje jedynie danymi bazowymi tabeli
Dlaczego używa się perspektyw:
– aby ograniczyć dostęp do wszystkich danych tabeli; wybierając dane z
perspektywy jesteśmy ograniczeni tylko do pewnej części danych tabeli
– aby ułatwić użytkownikom pobieranie rezultatów skomplikowanych zapytań
za pomocą prostych zapytań
– aby zwolnić użytkowników od wnikania w struktury danych oraz aby
udostępnić informację widzianą w różny sposób przez różnych
użytkowników
Tworzenie perspektyw
CREATE [ OR REPLACE] VIEW nazwa_perspektywy
[kolumna1, kolumna2, ...]
AS
SELECT ....
• Kolumna1 kolumna2 ... - to nazwy kolumn perspektywy, które
muszą odpowiadać pozycjom z listy SELECT...
• Jeżeli perspektywa o takiej nazwie już istnieje, a chcemy tylko
zmienić treść jej zapytania, musimy wcześniej usunąć
poprzednią perspektywę lub użyć opcji OR REPLACE;
• w definicji perspektywy nie może wystąpić klauzula ORDER BY
6
Przykład
• Tworzenie perspektywy zawierającej funkcje grupowe i
wybierającej dane z dwóch tabel:
CREATE VIEW dept_summary
(nazwa, minpensja, maxpensja, avgpensja)
as
select nazwa, min(pensja), max(pensja), avg(pensja)
from pracownik, departament
where pracownik.nr_departamentu=departament.nr_departamentu
group by nazwa;
• nazwy kolumn w perspektywach można definiować również za
pomocą aliasów w zapytaniu SELECT
Ograniczenia operacji DML
• Operacja DELETE nie jest dozwolona, jeżeli perspektywa zawiera
jedno z:
–
–
–
–
–
–
złączenie tabel
funkcje grupowe
klauzulę GROUP BY
kwalifikator DISTINCT
pseudokolumnę ROWNUM
Podzapytanie skorelowane
• Operacji UPDATE nie jest dozwolona, gdy:
– nie jest dozwolona operacja DELETE
– perspektywa zawiera kolumnę wyrażoną za pomocą wyrażenia (np.
Pensja*2)
• Operacja INSERT nie jest dozwolona, gdy:
– kolumna obowiązkowa („NOT NULL) nie jest wybierana przez perspektywę.
8
Usuwanie perspektywy
Perspektywy w zapytaniach
• DROP VIEW nazwa_perspektywy
• Dla każdego departamentu podać nazwiska tych pracowników,
którzy zarabiają mniej niż średnia wartość pensji w ich
departamencie.
• rozkaz ten powoduje usunięcie definicji perspektywy z bazy
danych
• nie narusza wierszy i kolumn bo są one trzymane w tabelach, na
których perspektywa była oparta
• pozostawienie innych perspektyw i aplikacji bazujących na
usuniętej perspektywie powoduje błąd
• perspektywa może być usunięta przez swojego właściciela lub
administratora
• Tworzymy perspektywę:
Create view avg_pensja as
select nr_departamentu, avg(pensja) srednia
from pracownik
group by nr_departamentu;
• Zapytanie główne:
select nazwisko from pracownik, avg_pensja
where pracownik.nr_departamentu=avg_pensja.nr_departamentu
and pensja<srednia;
9
10