Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Widoki (views) - Perspektywy:

Podobne prezentacje


Prezentacja na temat: "Widoki (views) - Perspektywy:"— Zapis prezentacji:

1 Widoki (views) - Perspektywy:
Perspektywa – dynamicznie obliczany wynik jednej lub wielu operacji relacyjnych tworzących nową relację (tabelę) z relacji bazowych. Perspektywa jest relacją wirtualną, która nie musi fizycznie istnieć w bazie danych, ale może być wyliczona w każdej chwili na żądanie użytkownika. Składnia polecenia: CREATE [OR REPLACE] VIEW nazwa_perspektywy [(lista_kolumn)] AS SELECT zapytanie [WITH [CASCADED | LOCAL] CHECK OPTION]

2 Jeżeli w poleceniu pominięta jest lista kolumn, to każda z kolumn perspektywy będzie miała taką samą nazwę, jak odpowiednia kolumna w wyniku zapytania SELECT.  Lista kolumn powinna być podana, jeśli istnieją jakiekolwiek niejasności dotyczące nazw kolumn (np. dla kolumn wyliczanych lub, gdy w wyniku złączenia powstają dwie kolumny o identycznych nazwach).

3 Usuwanie perspektywy:
DROP VIEW [IF EXISTS] nazwa_perspektywy [, nazwa_perspektywy] ... [RESTRICT | CASCADE] Modyfikowanie perspektywy: ALTER VIEW nazwa_perspektywy [(lista_kolumn)] AS SELECT zapytanie [WITH [CASCADED | LOCAL] CHECK OPTION]

4 Rodzaje perspektyw: Utworzenie perspektywy poziomej:
mysql> CREATE VIEW _11_biuro_B003 AS SELECT personelnr, imie, nazwisko, stanowisko, pensja FROM personel WHERE biuronr='B003'; mysql> SELECT * FROM _11_biuro_B003; | personelnr | imie | nazwisko | stanowisko | pensja | | SB | Sabina | Bober | dyrektor | | | SB | Daniel | Frankowski | kierownik | | | SB | Małgorzata | Kowalska | asystent | | | SB | Anna | Biały | asystent | |

5 Utworzenie perspektywy pionowej:
mysql> CREATE VIEW _10_dyrektorzy AS SELECT personelnr, pensja FROM personel WHERE stanowisko='dyrektor'; mysql> SELECT * FROM _10_dyrektorzy; | personelnr | pensja | | SB | | | SB | | | SG | | | SL | |

6 Perspektywy oparte na grupowaniu:
mysql> CREATE VIEW srednie AS SELECT uczen, przedmiot, AVG(ocena) AS srednia FROM oceny GROUP BY uczen, przedmiot; mysql> SELECT* FROM srednie; | uczen | przedmiot | srednia | | | biologia | | | | matematyka | | | | polski | | | | biologia | | | | matematyka | | | | polski | |

7 Podaj nieruchomości, które były wynajmowane częściej niż średnio
Pierwszy etap: Policz ile razy była wynajmowana każda nieruchomość: mysql> CREATE VIEW ilosc AS SELECT count(*) AS ile FROM wynajecie GROUP BY nieruchomoscnr; mysql> SELECT * FROM ilosc; | ile | | 3 | | 4 | | 2 |

8 Wyświetl, które nieruchomości były wynajmowane częściej niż średnio:
Drugi etap: Wyświetl, które nieruchomości były wynajmowane częściej niż średnio: mysql> CREATE VIEW srednio AS SELECT n.nieruchomoscnr, miasto, n.czynsz, count(*) FROM nieruchomosc n, wynajecie w WHERE w.nieruchomoscnr = n.nieruchomoscnr GROUP BY nieruchomoscnr HAVING count(*)>=(SELECT AVG(ile) FROM ilosc); mysql> SELECT * FROM srednio; | nieruchomoscNr | miasto | czynsz | count(*) | | A | Augustów | | | | B | Białystok | | |

9 Wartość średnia wyniosła:
SELECT AVG(ile) AS srednia FROM ilosc; mysql> SELECT AVG(ile) AS srednia FROM ilosc; | srednia | | |

10 Zadanie bez stosowania perspektyw:
SELECT n.nieruchomoscnr, miasto, n.czynsz, count(*) FROM nieruchomosc n, wynajecie w WHERE w.nieruchomoscnr = n.nieruchomoscnr GROUP BY nieruchomoscnr HAVING count(*)>=(SELECT AVG(ile) FROM (SELECT count(*) AS ile FROM wynajecie w GROUP BY nieruchomoscnr) tmp); | nieruchomoscNr | miasto | czynsz | count(*) | | A | Augustów | | | | B | Białystok | | |

11 Bez warunku WHERE Wszystkie 7 nieruchomości i wszystkie 17 wynajęć
mysql> SELECT n.nieruchomoscnr, miasto, n.czynsz, count(*) FROM nieruchomosc n, wynajecie w GROUP BY nieruchomoscnr HAVING count(*)>=(SELECT AVG(ile) FROM (SELECT count(*) AS ile FROM wynajecie GROUP BY nieruchomoscnr) tmp); | nieruchomoscNr | miasto | czynsz | count(*) | | A | Augustów | | | | B | Białystok | | | | B | Białystok | | | | B | Białystok | | | | B | Białystok | | | | G | Grajewo | | | | L | Łomża | | | Wszystkie 7 nieruchomości i wszystkie 17 wynajęć

12 Przykłady: mysql> CREATE TABLE test (ilosc INT, cena INT);
mysql> INSERT INTO test VALUES(3, 50); mysql> CREATE VIEW w AS SELECT ilosc, cena, ilosc*cena AS wartosc FROM test; mysql> SELECT * FROM w; | ilosc | cena | wartosc | | | 50 | |

13 mysql> CREATE VIEW roczna AS SELECT personelNr, stanowisko, pensja, pensja*12 AS pensja_roczna FROM personel; mysql> SELECT * FROM roczna; | personelNr | stanowisko | pensja | pensja_roczna | | SE | dyrektor | | | | SE | kierownik | | | | SE | asystent | | | | SE | asystent | | | | SF | dyrektor | | | | SL | kierownik | | | | SL | asystent | | | | SL | asystent | | | | SL | dyrektor | | | | SL | asystent | | | | SL | kierownik | | |

14 Przykłady wprowadzania danych przez widoki:
mysql> CREATE TABLE t1 (a INT); mysql> CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2 WITH CHECK OPTION; mysql> CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0 WITH LOCAL CHECK OPTION; mysql> CREATE VIEW v3 AS SELECT * FROM v1 WHERE a > 0 WITH CASCADED CHECK OPTION; mysql> INSERT INTO v1 VALUES (2); ERROR 1369 (HY000): CHECK OPTION failed 'biuro.v1' mysql> INSERT INTO v2 VALUES (2); mysql> select * from t1; | a | | 2 |

15 mysql> INSERT INTO v3 VALUES (2);
ERROR 1369 (HY000): CHECK OPTION failed 'biuro.v3‘ mysql> INSERT INTO v1 VALUES (1); mysql> select * from t1; | a | | 2 | | 1 | mysql> select * from v1; /* podobnie v2, v3) */

16 Przykłady wprowadzania danych w bazie biuro:
mysql> CREATE VIEW _10_dyrektorzy AS SELECT personelnr, nazwisko, imie, stanowisko, pensja,biuroNr FROM personel WHERE stanowisko='dyrektor' AND pensja >= 2500 WITH CHECK OPTION; mysql> SELECT * FROM _10_dyrektorzy2; | personelnr| nazwisko | imie | stanowisko| pensja | biuroNr | | SB | Michalska | Katarzyna | dyrektor | | B | | SL | Wiśniewski | Jan | dyrektor | | B | mysql> INSERT INTO _10_dyrektorzy (personelNr, nazwisko, imie, stanowisko,pensja, biuroNr) VALUES ('SA10', 'Biedak', 'Jan', 'dyrektor', 2000,'B007'); ERROR 1369 (HY000): CHECK OPTION failed 'biuro._10_dyrektorzy'

17 mysql> SELECT * FROM _10_dyrektorzy;
mysql> INSERT INTO _10_dyrektorzy (personelNr, nazwisko, imie, stanowisko, pensja, biuroNr) VALUES ('SF10','Bogacz','Jan', 'dyrektor', 5000, 'B001'); mysql> SELECT * FROM _10_dyrektorzy; | personelnr| nazwisko | imie | stanowisko| pensja | biuroNr | | SB | Michalska | Katarzyna | dyrektor | | B | | SF | Bogacz | Jan | dyrektor | | B | | SL | Wiśniewski | Jan | dyrektor | | B |


Pobierz ppt "Widoki (views) - Perspektywy:"

Podobne prezentacje


Reklamy Google