poniedziałek, 3 września 2018

SQL - Korzystanie z widoków


SQL - Korzystanie z widoków

Widok to nic innego jak instrukcja SQL przechowywana w bazie danych o skojarzonej nazwie. Widok jest w rzeczywistości składem tabeli w postaci predefiniowanego zapytania SQL.
Widok może zawierać wszystkie wiersze tabeli lub wybrać określone wiersze z tabeli. Widok można utworzyć z jednej lub wielu tabel, które zależą od pisemnej kwerendy SQL w celu utworzenia widoku.
Widoki, które są rodzajem tabel wirtualnych, umożliwiają użytkownikom wykonywanie następujących czynności:
·      Dane struktury w sposób naturalny lub intuicyjny dla użytkowników lub klas użytkowników.
·      Ograniczaj dostęp do danych w taki sposób, aby użytkownik mógł zobaczyć i (czasami) zmodyfikować dokładnie to, czego potrzebuje i nic więcej.
·      Podsumuj dane z różnych tabel, które można wykorzystać do generowania raportów.

Tworzenie widoków

Widoki bazy danych są tworzone za pomocą instrukcji CREATE VIEW. Widoki można tworzyć z pojedynczej tabeli, wielu tabel lub z innego widoku.
Aby utworzyć widok, użytkownik musi mieć odpowiednie uprawnienia systemowe zgodnie z konkretną implementacją.
Podstawowa składnia CREATE VIEW wygląda następująco:
CREATE VIEW nazwa_widoku AS
SELECT kolumna1, kolumna2.....
FROM nazwa_taabeli
WHERE [warunek];
Możesz dołączyć wiele tabel do swojej instrukcji SELECT w podobny sposób, w jaki używasz ich w normalnym zapytaniu SQL SELECT.
Przykład
Rozważ tabelę KLIENCI zawierającą następujące rekordy –
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '25', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+
Poniżej znajduje się przykład tworzenia widoku z tabeli KLIENCI. Widok ten byłby używany do określania nazwy i wieku klienta z tabeli KLIENCI.
SQL > CREATE VIEW KLIENCI_WIDOK AS
SELECT nazwisko, wiek
FROM  KLIENCI;
Teraz możesz odczytać KLIENCI_WIDOK w podobny sposób, jak zapytaniem o rzeczywistą tabelę. Poniżej znajduje się przykład tego zapytania.
SQL > SELECT * FROM KLIENCI_WIDOK;
Dałoby to następujący wynik.
+----------+-----+
nazwisko,     wiek
'Zawadzki',  '32'
'Kowalczyk', '25'
'Kot',       '23'
'Kowalska',  '25'
'Sapal',     '27'
'Nowak',     '22'
'Makowska',  '24'
+----------+-----+

Klauzula WITH CHECK OPTION

Klauzula WITH CHECK OPTION to opcja instrukcji CREATE VIEW. Celem opcji WITH CHECK OPTION jest upewnienie się, że wszystkie instrukcje UPDATE i INSERT spełniają warunek (definicje) w definicji widoku.
Jeśli nie spełniają warunku, UPDATE lub INSERT zwraca błąd.
Poniższy blok kodu to przykład tworzenia tego samego widoku KLIENCI_WIDOK z opcją WITH CHECK OPTION.
CREATE VIEW KLIENCI_WIDOK AS
SELECT nazwisko, wiek
FROM  klienci
WHERE wiek IS NOT NULL
WITH CHECK OPTION;
Opcja WITH CHECK OPTION w tym przypadku powinna uniemożliwić wpisanie jakichkolwiek wartości NULL w kolumnie WIEK widoku, ponieważ widok jest zdefiniowany przez dane, które nie mają wartości NULL w kolumnie WIEK.


Aktualizowanie widoku

Widok może być aktualizowany pod pewnymi warunkami, które podano poniżej -
·      Klauzula SELECT może nie zawierać słowa kluczowego DISTINCT.
·      Klauzula SELECT nie może zawierać funkcji podsumowania.
·      Klauzula SELECT może nie zawierać ustawionych funkcji.
·      Klauzula SELECT może nie zawierać zestawów operatorów.
·      Klauzula SELECT nie może zawierać klauzuli ORDER BY.
·      Klauzula FROM nie może zawierać wielu tabel.
·      Klauzula WHERE nie może zawierać podzapytań.
·      Zapytanie może nie zawierać GROUP BY lub HAVING.
·      Obliczone kolumny nie mogą być aktualizowane.
·      Wszystkie kolumny NOT NULL z tabeli podstawowej muszą być uwzględnione w widoku, aby zapytanie INSERT mogło działać.
Jeśli więc widok spełnia wszystkie powyższe reguły, możesz zaktualizować ten widok. Poniższy blok kodu to przykład aktualizujący wiek Kowalczyka.
SQL > UPDATE KLIENCI_WIDOK
   SET WIEK = 35
   WHERE nazwisko = 'Kowalczyk';
Ostatecznie zaktualizowałoby to tabelę KLIENCI, a to samo odzwierciedliłoby w samym widoku. Teraz spróbuj zapytać o tabelę podstawową, a instrukcja SELECT wygeneruje następujący wynik.
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '35', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'6', 'Nowak',     '22', 'Blizne',      NULL
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+


Wstawianie wierszy do widoku

Rzędy danych można wstawić do widoku. Te same reguły, które mają zastosowanie do polecenia UPDATE, dotyczą również polecenia INSERT.
W tym miejscu nie możemy wstawiać wierszy w widoku KLIENCI_WIDOK, ponieważ nie uwzględniliśmy wszystkich kolumn NOT NULL w tym widoku, w przeciwnym razie można wstawiać wiersze w widoku w podobny sposób, jak wstawialiśmy je do tabeli.

Usuwanie wierszy w widoku

Wiersze danych można usunąć z widoku. Te same reguły, które mają zastosowanie do poleceń UPDATE i INSERT, dotyczą polecenia DELETE.
Poniżej znajduje się przykład usunięcia rekordu dla WIEK = 22.
SQL > DELETE FROM KLIENCI_WIDOK
   WHERE age = 22;
To ostatecznie usunie wiersz z tabeli klientów, a to samo odzwierciedli w samym widoku. Teraz spróbuj zapytać o tabelę podstawową, a instrukcja SELECT wygeneruje następujący wynik.
+----+----------+-----+-----------+----------+
 id,  nazwisko,    wiek, adres,        pensja
'1', 'Zawadzki',  '32', 'Warszawska', '2000.00'
'2', 'Kowalczyk', '35', 'Sokratesa',  '1500.00'
'3', 'Kot',       '23', 'Darwina',    '2000.00'
'4', 'Kowalska',  '25', 'Modlińska',  '6500.00'
'5', 'Sapal',     '27', 'Wspólna',    '8500.00'
'7', 'Makowska',  '24', 'Piaseczno',   NULL
+----+----------+-----+-----------+----------+

Usuwanie widoków

Oczywiście, gdy masz widok, potrzebujesz sposobu na usunięcie widoku, jeśli nie jest już potrzebny. Składnia jest bardzo prosta i jest podana poniżej -
DROP VIEW nazwa_widoku;
Poniżej znajduje się przykład usunięcia KLIENCI_WIDOK z tabeli KLIENCI.
DROP VIEW KLIENCI_WIDOK;

Brak komentarzy:

Prześlij komentarz