logo

SQL Views

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ť.

  1. Príkaz SELECT, ktorý sa používa na vytvorenie zobrazenia, by nemal obsahovať klauzulu GROUP BY alebo OBJEDNAŤ PODĽA doložka.
  2. Príkaz SELECT by nemal mať ROZDIEĽNÝ kľúčové slovo.
  3. Zobrazenie by malo mať všetky hodnoty NOT NULL.
  4. Zobrazenie by sa nemalo vytvárať pomocou vnorených dopytov alebo zložitých dopytov.
  5. 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)  
VALUES(6);
Vytvoriť kvíz