(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