Pogled v SQL je shranjena poizvedba SQL, ki deluje kot navidezna tabela. Za razliko od navadnih tabel pogledi sami ne shranjujejo podatkov. Namesto tega dinamično ustvarijo podatke z izvajanjem poizvedbe SQL, definirane v pogledu, vsakič, ko se do nje dostopa.
Lahko pridobi podatke iz ene ali več tabel in jih predstavi v prilagojeni obliki, ki razvijalcem omogoča:
- Poenostavite zapletene poizvedbe: Enkapsulirajte kompleksne spoje in pogoje v en sam objekt.
- Izboljšajte varnost: Omejite dostop do določenih stolpcev ali vrstic.
- Prilagodljivo predstavljanje podatkov: Zagotovite prilagojene poglede podatkov za različne uporabnike.
Za primere bomo uporabili ti dve tabeli SQL.
Podrobnosti študenta:
-- 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');
Izhod:
S_ID | Ime | Naslov |
|---|---|---|
1 | Hudo | Kolkata |
2 | Ashish | Durgapur |
3 | Vadite | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Študentske ocene:
-- 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);
Izhod:
ID | Ime | Znamke | Starost |
|---|---|---|---|
1 | Hudo | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Vadite | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
USTVARJANJE POGLEDOV v SQL
Pogled lahko ustvarimo s stavkom CREATE VIEW. Pogled je mogoče ustvariti iz ene tabele ali več tabel.
Sintaksa:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Ključni pojmi:
- ime_pogleda : ime za pogled
- ime_tabele : Ime tabele
- stanje : Pogoj za izbiro vrstic
Primer 1: Ustvarjanje enostavnega pogleda iz ene tabele
Primer 1.1: V tem primeru bomo ustvarili pogled z imenom DetailsView iz tabele StudentDetails.
poizvedba:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Za pridobitev podatkov iz tega pogleda uporabite spodnjo poizvedbo
SELECT * FROM DetailsView;Izhod:
Ime | Naslov |
|---|---|
Hudo | Kolkata |
Ashish | Durgapur |
Vadite | Delhi |
Dhanraj | Bihar |
Primer 1.2: Tukaj bomo ustvarili pogled z imenom StudentNames iz tabele StudentDetails.
poizvedba:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Če zdaj povprašamo po pogledu kot
SELECT * FROM StudentNames;
Izhod:
S_ID | Ime |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Hudo |
3 | Vadite |
5 | Ram css spreminjanje velikosti slike |
Primer 2: Ustvarjanje pogleda iz več tabel
V tem primeru bomo ustvarili View MarksView, ki združuje podatke iz obeh tabel StudentDetails in StudentMarks. Če želite ustvariti pogled iz več tabel, lahko preprosto vključimo več tabel v IZBERI izjava.
poizvedba:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Za prikaz podatkov View MarksView:
SELECT * FROM MarksView;Izhod:
Ime | Naslov | Znamke |
|---|---|---|
Hudo | Kolkata | 90 |
Vadite | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Upravljanje pogledov: posodabljanje in brisanje seznamov
1. Seznam vseh pogledov v zbirki podatkov
Vse poglede v zbirki podatkov lahko navedemo z uporabo izjave SHOW FULL TABLES ali s poizvedovanjem po tabelah information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Uporaba informacijske_sheme
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 pogleda
SQL nam omogoča brisanje obstoječega pogleda. Mi lahko izbrisati ali spustite Pogled s stavkom DROP.
Sintaksa:
DROP VIEW view_name;primer: V tem primeru brišemo View MarksView.
DROP VIEW MarksView;3. Posodabljanje definicije pogleda
Če želimo posodobiti obstoječe podatke v pogledu, uporabimo POSODOBITEV izjava.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Če želite posodobiti definicijo pogleda, ne da bi to vplivalo na podatke, uporabite stavek CREATE OR REPLACE VIEW. Na primer, dodamoAgestolpec zaMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Opomba: Vseh pogledov ni mogoče posodobiti s stavkom UPDATE.
Pravila za posodobitev pogledov v SQL:
Za posodobitev pogleda morajo biti izpolnjeni nekateri pogoji. Če je kateri od teh pogojev ne met pogled ni mogoče posodobiti.
- Stavek SELECT, ki se uporablja za ustvarjanje pogleda, ne sme vsebovati klavzule GROUP BY oz NAROČI PO klavzula.
- Stavek SELECT ne sme imeti RAZLIČNA ključna beseda.
- Pogled mora imeti vse vrednosti NOT NULL.
- Pogled ne bi smel biti ustvarjen z uporabo ugnezdenih poizvedb ali kompleksnih poizvedb.
- Pogled je treba ustvariti iz ene same tabele. Če je pogled ustvarjen z uporabo več tabel, nam ne bo dovoljeno posodobiti pogleda.
Napredne tehnike s pogledi
1. Posodabljanje podatkov prek pogledov
Za dodajanje ali zamenjavo polj iz pogleda lahko uporabimo stavek CREATE OR REPLACE VIEW. Če želimo posodobiti pogled MarksView in temu pogledu dodati polje AGE iz tabele StudentMarks, lahko to storimo tako:
primer:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Če zdaj pridobimo vse podatke iz MarksView kot:
SELECT * FROM MarksView;Izhod:
Ime | Naslov | Znamke | Starost |
|---|---|---|---|
Hudo | Kolkata | 90 | 19 |
Vadite | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
V Pogled lahko vstavimo vrstico na enak način kot v tabelo. Lahko uporabimo VSTAVITE V stavek SQL za vstavljanje vrstice v pogled. V spodnjem primeru bomo vstavili novo vrstico v View DetailsView, ki smo ga ustvarili zgoraj v primeru 'ustvarjanja pogledov iz ene tabele'.
primer:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Če zdaj pridobimo vse podatke iz DetailsView kot
SELECT * FROM DetailsView;Izhod:
Ime | Naslov |
|---|---|
Hudo | Kolkata |
Ashish koliko tipk imajo tipkovnice | Durgapur |
Vadite | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Brisanje vrstice iz pogleda
Brisanje vrstic iz pogleda je prav tako preprosto kot brisanje vrstic iz tabele. Za brisanje vrstic iz pogleda lahko uporabimo stavek DELETE SQL. Tudi brisanje vrstice iz pogleda najprej izbriše vrstico iz dejanske tabele in sprememba se nato odraža v pogledu. V tem primeru bomo izbrisali zadnjo vrstico iz pogleda DetailsView, ki smo jo pravkar dodali v zgornjem primeru vstavljanja vrstic.
primer:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Če zdaj pridobimo vse podatke iz DetailsView kot
SELECT * FROM DetailsView;Izhod:
Ime | Naslov |
|---|---|
Hudo | Kolkata |
Ashish | Durgapur |
Vadite | Delhi |
Dhanraj | Bihar |
4. S klavzulo CHECK OPTION
Klavzula WITH CHECK OPTION v SQL je zelo uporabna klavzula za poglede. Velja za pogled, ki ga je mogoče posodobiti. Uporablja se za preprečevanje spreminjanja podatkov (z uporabo INSERT ali UPDATE), če pogoj v klavzuli WHERE v stavku CREATE VIEW ni izpolnjen.
Če smo uporabili klavzulo WITH CHECK OPTION v stavku CREATE VIEW in če klavzula UPDATE ali INSERT ne izpolnjujeta pogojev, bosta vrnila napako. V spodnjem primeru ustvarjamo View SampleView iz tabele StudentDetails s klavzulo WITH CHECK OPTION.
primer:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Če v tem pogledu zdaj poskušamo v stolpec NAME vstaviti novo vrstico z ničelno vrednostjo, bo to povzročilo napako, ker je pogled ustvarjen s pogojem za stolpec NAME NOT NULL. Na primer, čeprav je pogled mogoče posodobiti, tudi spodnja poizvedba za ta pogled ni veljavna:
INSERT INTO SampleView(S_ID)Ustvari kviz
VALUES(6);