Pogled u SQL-u je spremljeni SQL upit koji djeluje kao virtualna tablica. Za razliku od običnih tablica, pogledi sami ne pohranjuju podatke. Umjesto toga, oni dinamički generiraju podatke izvršavanjem SQL upita definiranog u prikazu svaki put kada mu se pristupi.
Može dohvatiti podatke iz jedne ili više tablica i predstaviti ih u prilagođenom formatu omogućujući programerima da:
- Pojednostavite složene upite: Enkapsulirajte složene spojeve i uvjete u jedan objekt.
- Poboljšajte sigurnost: Ograničite pristup na određene stupce ili retke.
- Fleksibilno prezentirajte podatke: Osigurajte prilagođene prikaze podataka za različite korisnike.
Za primjere ćemo koristiti ove dvije SQL tablice.
Podaci o studentu:
-- Create StudentDetails table
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY
NAME VARCHAR(255)
ADDRESS VARCHAR(255)
);
INSERT INTO StudentDetails (S_ID NAME ADDRESS)
VALUES
(1 'Harsh' 'Kolkata')
(2 'Ashish' 'Durgapur')
(3 'Pratik' 'Delhi')
(4 'Dhanraj' 'Bihar')
(5 'Ram' 'Rajasthan');
Izlaz:
S_ID | Ime | Adresa |
|---|---|---|
1 | Oštro | Kolkata |
2 | Pepeljast | Durgapur |
3 | Praksa | Delhi |
4 | Dhanraj | Bihar |
5 | Ovan | Rajasthan |
Ocjene učenika:
-- Create StudentMarks table
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY
NAME VARCHAR(255)
Marks INT
Age INT
);
INSERT INTO StudentMarks (ID NAME Marks Age)
VALUES
(1 'Harsh' 90 19)
(2 'Suresh' 50 20)
(3 'Pratik' 80 19)
(4 'Dhanraj' 95 21)
(5 'Ram' 85 18);
Izlaz:
ID | Ime | Oznake | Dob |
|---|---|---|---|
1 | Oštro | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Praksa | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ovan | 85 | 18 |
STVARAJTE PRIKAZE u SQL-u
Pogled možemo kreirati pomoću naredbe CREATE VIEW. Prikaz se može stvoriti iz jedne tablice ili više tablica.
Sintaksa:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Ključni pojmovi:
- naziv_pogleda : naziv za pogled
- naziv_tablice : naziv tablice
- stanje : Uvjet za odabir redaka
Primjer 1: Stvaranje jednostavnog prikaza iz jedne tablice
Primjer 1.1: U ovom primjeru stvorit ćemo pogled pod nazivom DetailsView iz tablice StudentDetails.
Upit:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Upotrijebite upit u nastavku da biste dohvatili podatke iz ovog prikaza
SELECT * FROM DetailsView;Izlaz:
Ime | Adresa |
|---|---|
Oštro | Kolkata |
Pepeljast | Durgapur |
Praksa | Delhi |
Dhanraj | Bihar |
Primjer 1.2: Ovdje ćemo stvoriti pogled pod nazivom StudentNames iz tablice StudentDetails.
Upit:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Ako sada upitamo pogled kao
SELECT * FROM StudentNames;
Izlaz:
S_ID | Ime |
|---|---|
2 | Pepeljast |
4 | Dhanraj |
1 | Oštro |
3 | Praksa |
5 | Ovan brzina prijenosa u arduinu |
Primjer 2: Stvaranje prikaza iz više tablica
U ovom primjeru stvorit ćemo View MarksView koji kombinira podatke iz obje tablice StudentDetails i StudentMarks. Za izradu prikaza iz više tablica možemo jednostavno uključiti više tablica u ODABERI izjava.
Upit:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Za prikaz podataka View MarksView:
SELECT * FROM MarksView;Izlaz:
Ime | Adresa | Oznake |
|---|---|---|
Oštro | Kolkata | 90 |
Praksa | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ovan | Rajasthan | 85 |
Upravljanje prikazima: Ažuriranje i brisanje popisa
1. Ispisivanje svih prikaza u bazi podataka
Možemo ispisati sve poglede u bazi podataka pomoću naredbe SHOW FULL TABLES ili postavljanjem upita tablicama information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Korištenje sheme_informacija
SELECT table_name
FROM information_schema.views
WHERE table_schema = 'database_name';
OR
SELECT table_schema table_name view_definition
FROM information_schema.views
WHERE table_schema = 'database_name';
2. Brisanje prikaza
SQL nam omogućuje brisanje postojećeg prikaza. možemo izbrisati ili ispustite View pomoću naredbe DROP.
Sintaksa:
DROP VIEW view_name;Primjer: U ovom primjeru brišemo View MarksView.
DROP VIEW MarksView;3. Ažuriranje definicije pogleda
Ako želimo ažurirati postojeće podatke unutar prikaza, upotrijebimo AŽURIRATI izjava.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Ako želite ažurirati definiciju pogleda bez utjecaja na podatke koristite naredbu CREATE OR REPLACE VIEW. Na primjer, dodajmoAgestupac naMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Bilješka: Ne mogu se svi pogledi ažurirati pomoću izjave UPDATE.
Pravila za ažuriranje prikaza u SQL-u:
Za ažuriranje pogleda moraju biti zadovoljeni određeni uvjeti. Ako bilo koji od ovih uvjeta jest ne met pogled ne može se ažurirati.
- Izjava SELECT koja se koristi za stvaranje prikaza ne bi trebala uključivati klauzulu GROUP BY ili NARUČI PO klauzula.
- Naredba SELECT ne bi trebala imati DISTINKTAN ključna riječ.
- Pogled bi trebao imati sve NOT NULL vrijednosti.
- Prikaz se ne bi trebao stvarati pomoću ugniježđenih upita ili složenih upita.
- Prikaz treba izraditi iz jedne tablice. Ako je prikaz stvoren korištenjem više tablica, tada nam neće biti dopušteno ažurirati prikaz.
Napredne tehnike s prikazima
1. Ažuriranje podataka putem prikaza
Možemo upotrijebiti naredbu CREATE OR REPLACE VIEW za dodavanje ili zamjenu polja iz pogleda. Ako želimo ažurirati pogled MarksView i dodati polje AGE ovom prikazu iz StudentMarks tablice, to možemo učiniti na sljedeći način:
Primjer:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Ako sada dohvatimo sve podatke iz MarksViewa kao:
SELECT * FROM MarksView;Izlaz:
Ime | Adresa | Oznake | Dob |
|---|---|---|---|
Oštro | Kolkata | 90 | 19 |
Praksa | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ovan | Rajasthan | 85 | 18 |
Možemo umetnuti red u View na isti način kao što to radimo u tablici. Možemo koristiti UMETNI U izraz SQL za umetanje retka u prikaz. U donjem primjeru umetnut ćemo novi redak u View DetailsView koji smo stvorili iznad u primjeru 'stvaranje pogleda iz jedne tablice'.
Primjer:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Ako sada dohvatimo sve podatke iz DetailsView kao
SELECT * FROM DetailsView;Izlaz:
Ime | Adresa |
|---|---|
Oštro | Kolkata |
Pepeljast | Durgapur |
Praksa | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Brisanje retka iz prikaza
Brisanje redaka iz prikaza također je jednostavno kao brisanje redaka iz tablice. Možemo koristiti naredbu DELETE SQL-a za brisanje redaka iz prikaza. Isto tako, brisanje retka iz prikaza najprije briše redak iz stvarne tablice, a promjena se zatim odražava u prikazu. U ovom primjeru ćemo izbrisati zadnji red iz prikaza DetailsView koji smo upravo dodali u gornjem primjeru umetanja redaka.
Primjer:
što je računalo
DELETE FROM DetailsView
WHERE NAME='Suresh';
Ako sada dohvatimo sve podatke iz DetailsView kao
SELECT * FROM DetailsView;Izlaz:
Ime | Adresa |
|---|---|
Oštro | Kolkata |
Pepeljast | Durgapur |
Praksa | Delhi |
Dhanraj | Bihar |
4. S CHECK OPCIJOM klauzulom
Klauzula WITH CHECK OPTION u SQL-u vrlo je korisna klauzula za poglede. Primjenjuje se na prikaz koji se može ažurirati. Koristi se za sprječavanje modifikacije podataka (koristeći INSERT ili UPDATE) ako uvjet u klauzuli WHERE u naredbi CREATE VIEW nije zadovoljen.
Ako smo upotrijebili klauzulu WITH CHECK OPTION u naredbi CREATE VIEW i ako klauzula UPDATE ili INSERT ne zadovoljava uvjete, vratit će pogrešku. U donjem primjeru stvaramo View SampleView iz tablice StudentDetails s klauzulom WITH CHECK OPTION.
Primjer:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
U ovom prikazu, ako sada pokušamo umetnuti novi redak s null vrijednošću u stupac NAME, to će dati pogrešku jer je pogled stvoren s uvjetom za stupac NAME kao NOT NULL. Na primjer, iako se pogled može ažurirati, ni upit u nastavku za ovaj prikaz nije valjan:
INSERT INTO SampleView(S_ID)Napravi kviz
VALUES(6);