Pohľad v SQL je uložený SQL dotaz, ktorý funguje ako virtuálna tabuľka. Na rozdiel od bežných tabuliek sa v zobrazeniach neukladajú údaje. Namiesto toho dynamicky generujú údaje spustením dotazu SQL definovaného v zobrazení pri každom prístupe k nemu.
Dokáže načítať údaje z jednej alebo viacerých tabuliek a prezentovať ich v prispôsobenom formáte, ktorý umožňuje vývojárom:
- Zjednodušte zložité otázky: Zapuzdrenie zložitých spojení a podmienok do jedného objektu.
- Zvýšte bezpečnosť: Obmedzte prístup na konkrétne stĺpce alebo riadky.
- Prezentujte údaje flexibilne: Poskytujte prispôsobené zobrazenia údajov pre rôznych používateľov.
Ako príklady použijeme tieto dve SQL tabuľky.
Podrobnosti o študentovi:
-- 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');
výstup:
S_ID | Meno | Adresa |
|---|---|---|
1 | Drsné | Kalkata |
2 | Ashish | Durgapur |
3 | Prax | Dillí |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Známky študentov:
-- 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);
výstup:
ID | Meno | Marks | Vek |
|---|---|---|---|
1 | Drsné | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Prax | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
VYTVORTE ZOBRAZENIA v SQL
Pohľad môžeme vytvoriť pomocou príkazu CREATE VIEW. Pohľad možno vytvoriť z jednej tabuľky alebo viacerých tabuliek.
Syntax:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Kľúčové pojmy:
- view_name : Názov zobrazenia
- názov_tabuľky : Názov tabuľky
- stave : Podmienka výberu riadkov
Príklad 1: Vytvorenie jednoduchého zobrazenia z jednej tabuľky
Príklad 1.1: V tomto príklade vytvoríme zobrazenie s názvom DetailsView z tabuľky StudentDetails.
dotaz:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Na získanie údajov z tohto zobrazenia použite dopyt uvedený nižšie
SELECT * FROM DetailsView;výstup:
Meno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Prax | Dillí |
Dhanraj | Bihar |
Príklad 1.2: Tu vytvoríme pohľad s názvom StudentNames z tabuľky StudentDetails.
dotaz:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Ak sa teraz pýtame na pohľad ako
SELECT * FROM StudentNames;
výstup:
S_ID | Meno |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Drsné |
3 | Prax |
5 | Ram konverzia nfa na dfa |
Príklad 2: Vytvorenie pohľadu z viacerých tabuliek
V tomto príklade vytvoríme View MarksView, ktorý kombinuje údaje z oboch tabuliek StudentDetails a StudentMarks. Ak chcete vytvoriť zobrazenie z viacerých tabuliek, môžeme do nej jednoducho zahrnúť viacero tabuliek VYBRAŤ vyhlásenie.
dotaz:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Ak chcete zobraziť údaje View MarksView:
SELECT * FROM MarksView;výstup:
Meno | Adresa | Marks |
|---|---|---|
Drsné | Kalkata | 90 |
Prax | Dillí | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Správa zobrazení: Aktualizácia a odstraňovanie zoznamu
1. Zoznam všetkých pohľadov v databáze
Všetky zobrazenia v databáze môžeme zobraziť pomocou príkazu SHOW FULL TABLES alebo dotazom na tabuľky information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Pomocou information_schema
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. Odstránenie zobrazenia
SQL nám umožňuje odstrániť existujúci pohľad. Môžeme vymazať alebo zrušte View pomocou príkazu DROP.
Syntax:
DROP VIEW view_name;Príklad: V tomto príklade odstraňujeme View MarksView.
DROP VIEW MarksView;3. Aktualizácia definície pohľadu
Ak chceme aktualizovať existujúce údaje v rámci zobrazenia, použite AKTUALIZOVAŤ vyhlásenie.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Ak chcete aktualizovať definíciu zobrazenia bez ovplyvnenia údajov, použite príkaz CREATE OR REPLACE VIEW. Pridajme napríkladAgestĺpec kMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Poznámka: Nie všetky zobrazenia je možné aktualizovať pomocou príkazu UPDATE.
Pravidlá na aktualizáciu zobrazení v SQL:
Na aktualizáciu zobrazenia je potrebné splniť určité podmienky. Ak je niektorá z týchto podmienok nie splnené zobrazenie nemožno aktualizovať.
- Príkaz SELECT, ktorý sa používa na vytvorenie zobrazenia, by nemal obsahovať klauzulu GROUP BY alebo OBJEDNAŤ PODĽA doložka.
- Príkaz SELECT by nemal mať ROZDIEĽNÝ kľúčové slovo.
- Zobrazenie by malo mať všetky hodnoty NOT NULL.
- Zobrazenie by sa nemalo vytvárať pomocou vnorených dopytov alebo zložitých dopytov.
- Pohľad by mal byť vytvorený z jednej tabuľky. Ak je zobrazenie vytvorené pomocou viacerých tabuliek, nebudeme môcť zobrazenie aktualizovať.
Pokročilé techniky s pohľadmi
1. Aktualizácia údajov prostredníctvom pohľadov
Na pridanie alebo nahradenie polí zo zobrazenia môžeme použiť príkaz CREATE OR REPLACE VIEW Ak chceme aktualizovať zobrazenie MarksView a pridať pole AGE do tohto zobrazenia z tabuľky StudentMarks, môžeme to urobiť takto:
Príklad:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Ak teraz načítame všetky údaje z MarksView ako:
SELECT * FROM MarksView;výstup:
Meno | Adresa | Marks | Vek |
|---|---|---|---|
Drsné | Kalkata | 90 | 19 |
Prax | Dillí | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram entitný vzťahový | Rajasthan | 85 | 18 |
Do zobrazenia môžeme vložiť riadok rovnakým spôsobom ako do tabuľky. Môžeme použiť VLOŽIŤ DO príkaz SQL na vloženie riadku do zobrazenia. V nižšie uvedenom príklade vložíme nový riadok do View DetailsView, ktorý sme vytvorili vyššie v príklade „vytvárania pohľadov z jednej tabuľky“.
Príklad:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Ak teraz načítame všetky údaje z DetailsView ako
SELECT * FROM DetailsView;výstup:
Meno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Prax | Dillí |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Odstránenie riadku zo zobrazenia
Odstránenie riadkov zo zobrazenia je tiež také jednoduché ako odstránenie riadkov z tabuľky. Na odstránenie riadkov zo zobrazenia môžeme použiť príkaz DELETE jazyka SQL. Odstránením riadka zo zobrazenia sa tiež najprv odstráni riadok zo skutočnej tabuľky a zmena sa potom prejaví v zobrazení. V tomto príklade vymažeme posledný riadok zo zobrazenia DetailsView, ktorý sme práve pridali vo vyššie uvedenom príklade vkladania riadkov.
Príklad:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Ak teraz načítame všetky údaje z DetailsView ako
SELECT * FROM DetailsView;výstup:
Meno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Prax | Dillí |
Dhanraj | Bihar |
4. S DOložkou CHECK OPTION
Klauzula WITH CHECK OPTION v SQL je veľmi užitočná klauzula pre zobrazenia. Vzťahuje sa na aktualizované zobrazenie. Používa sa na zabránenie modifikácii údajov (pomocou INSERT alebo UPDATE), ak nie je splnená podmienka v klauzule WHERE v príkaze CREATE VIEW.
Ak sme použili klauzulu WITH CHECK OPTION v príkaze CREATE VIEW a ak klauzula UPDATE alebo INSERT nespĺňa podmienky, vrátia chybu. V nižšie uvedenom príklade vytvárame View SampleView z tabuľky StudentDetails s klauzulou WITH CHECK OPTION.
Príklad:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Ak sa v tomto zobrazení teraz pokúsime vložiť nový riadok s hodnotou null do stĺpca NAME, zobrazí sa chyba, pretože zobrazenie je vytvorené s podmienkou pre stĺpec NAME ako NOT NULL. Napríklad, aj keď je zobrazenie aktualizovať, nie je platný ani nasledujúci dotaz pre toto zobrazenie:
INSERT INTO SampleView(S_ID)Vytvoriť kvíz
VALUES(6);