SQL - CREATE VIEW Izjava


Stvaranje pogleda za pojednostavljivanje pristupa tablici

Pogled je virtualna tabela čija se definicija pohranjuje u bazu podataka. Ali, za razliku od tabele, prikazi zapravo ne sadrže nikakve podatke. Umjesto toga, pruža način za pohranu često korištenih složenih upita u bazu podataka. Međutim, možete koristiti pogled u SQL SELECT izrazu za pristup podacima baš kao što biste koristili normalnu ili osnovnu tabelu.

Pogledi se takođe mogu koristiti kao sigurnosni mehanizam dopuštajući korisnicima pristup podacima putem pogleda, umjesto da im daju direktan pristup cijelim osnovnim tabelama.


Sintaksa

Pogledi se kreiraju pomoću izraza CREATE VIEW.

CREATE VIEW view_name AS select_statement;

Da bismo to jasno razumjeli, pogledajmo sljedeće tabele zaposlenih i odjela.



Pretpostavimo da želite dohvatiti ID i ime zaposlenih zajedno sa imenom njihovog odjela, a zatim trebate izvršiti operaciju lijevog spajanja. Pogedajmo primjer:

SELECT t1.emp_id, t1.emp_name, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;

Jednom kada izvršite gornji upit, dobit ćete otprilike ovako prikaz:



Ali, kad god želite pristupiti ovom zapisu, trebate ponovo upisati cijeli upit. Ako takve operacije izvodite prilično često, postaje zaista nezgodno i dosadno. U takvoj situaciji možete stvoriti prikaz kako biste olakšali pristup rezultatima upita. Pogedajmo primjer:

Pokušajte ovaj kod »
CREATE VIEW emp_dept_view AS
SELECT t1.emp_id, t1.emp_name, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;

Sada istim zapisima možete pristupiti pomoću pogleda emp_dept_view, ovako:

SELECT * FROM emp_dept_view;

Kao što vidite koliko vremena i truda možete uštedjeti pomoću pogleda.



Zamjena postojećeg pogleda

U MySQL-u, ako želite ažurirati ili zamijeniti postojeći pogled, možete ga ispustiti i stvoriti novi ili jednostavno koristiti klauzulu OR REPLACE u izrazu CREATE VIEW. Pogledajmo primjer:

CREATE OR REPLACE VIEW view_name AS select_statement;

Sljedeći SQL izraz zamijeniće ili promijeniti definiciju postojećeg pogleda emp_dept_view dodavanjem nove plate u kolonu.

-- Sintaksa za MySQL Database 
CREATE OR REPLACE VIEW emp_dept_view AS
SELECT t1.emp_id, t1.emp_name, t1.salary, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;

Nakon ažuriranja prikaza, ako izvršite sljedeću izjavu:

SELECT * FROM emp_dept_view ORDER BY emp_id;

U prikazanom rezultatu vidjet ćete još jednu platu u koloni. Pogledajmo primjer:





Ažuriranje podataka kroz pogled

Teoretski, možete izvršiti INSERT, UPDATE i DELETE na pogledima uz naredbu SELECT. Međutim, nisu svi pogledi ažurirani, tj. sposobni su modifikovati podatke osnovne izvorne tabele. Postoje neka ograničenja u pogledu nadogradnje. Generalno se prikaz ne može ažurirati ako sadrži bilo šta od sljedećeg:

  • Klauzule DISTINCT, GROUP BY ili HAVING.
  • Skupne funkcije kao što su AVG(), COUNT(), SUM(), MIN(), MAX() i tako dalje.
  • UNION, UNION ALL, CROSSJOIN, OSIM ili INTERSECT operateri.
  • Podupit u klauzuli WHERE koja se odnosi na tabelu u klauzuli FROM.

Ako pogled zadovoljava ove uslove, možete izmijeniti izvornu tabelu pomoću tog pogleda. Sljedeća izjava ažurirat će platu zaposlenih čiji je emp_id jednak 1.

UPDATE emp_dept_view SET salary = '6000' 
WHERE emp_id = 1;


Ispuštanje pogleda (View)

Slično tome, ako vam više nije potreban pogled (View), možete upotrijebiti izraz DROP VIEW da biste ga spustili iz baze podataka, kao što je prikazano u sljedećoj sintaksi:

DROP VIEW view_name;

Sljedeća naredba ispustit će prikaz emp_dept_view iz baze podataka.

DROP VIEW emp_dept_view;