Przykład użycia widoku (perspektywy):
CREATE OR REPLACE VIEW student_view AS SELECT s.first_name AS imie, s.last_name AS nazwisko, u.name AS nazwa_uczelni FROM student s, uczelnie u WHERE s.ucz_id = u.ucz_id;
Przebieg ćwiczeń
1. Zdefiniować perspektywę o nazwie region_pracownik_view
opartą na tabelach region
, dept
, emp
, która będzie wyświetlać następujące dane: nazwę regionu, nazwę departamentu, imię, nazwisko, stanowisko i wynagrodzenia pracowników. Dane posortować rosnąco według nazw regionów, nazw departamentów, stanowisk, nazwisk, imion. Wyświetlić zawartość utworzonego widoku.
CREATE OR REPLACE VIEW region_pracownik_view AS SELECT R.name AS region_name, D.name AS dept_name, E.title AS emp_title, E.first_name AS emp_first_name, E.last_name AS emp_last_name, E.salary AS emp_salary FROM region R, dept D, emp E WHERE R.id=D.region_id AND D.id=E.dept_id ORDER BY region_name, dept_name, emp_title, emp_last_name, emp_first_name; SELECT * FROM region_pracownik_view;
2. Zdefiniować widok produkt_info_view
oparty na tabelach item
, product
, inventory
, który będzie pobierał z nich następujące informacje: nazwa produktu, sugerowana cena, cena sprzedaży, ilość w magazynie. Dane posortować rosnąco wg nazw towarów. Wyświetlić zawartość utworzonego widoku.
CREATE VIEW produkt_info_view AS SELECT P.name, P.suggested_price, It.price, Inv.amount_in_stock FROM product P, item It, inventory Inv WHERE P.id=It.product_id AND P.id=Inv.product_id ORDER BY P.name;
3. Korzystajac ze zdefiniowanego widoku, wyswietlić nazwę produktu, sugerowana cenę sprzedaży, ilość w magazynie. Uwzględnić tylko te produkty, ktorych ilość >= 100
.
SELECT name, suggested_price, amount_in_stock FROM produkt_info_view WHERE amount_in_stock >= 100;
4. Z bazy danych pobrać następujące informacje: imię, nazwisko, stanowisko pracownika oraz imię i nazwisko jego managera. Dane posortować wg nazwisk i imion managera. Uwzględnić także tych pracowników, którzy nie mają managera. Odwołanie do tej samej tabeli.
SELECT CONCAT (E.first_name, ' ', E.last_name, ', ', E.title) AS employee, CONCAT (M.first_name, ' ', M.last_name, ', ', M.title) AS manager FROM emp E LEFT JOIN emp M ON E.manager_id = M.id WHERE (E.manager_id = M.id) OR (E.manager_id IS NULL);