Pohled v SQL je uložený SQL dotaz, který funguje jako virtuální tabulka. Na rozdíl od běžných tabulek pohledy neukládají data samy o sobě. Místo toho dynamicky generují data prováděním SQL dotazu definovaného v pohledu při každém přístupu k němu.
Může načítat data z jedné nebo více tabulek a prezentovat je v přizpůsobeném formátu, který vývojářům umožňuje:
- Zjednodušte složité dotazy: Zapouzdřte komplexní spojení a podmínky do jednoho objektu.
- Zvýšení zabezpečení: Omezte přístup na konkrétní sloupce nebo řádky.
- Prezentujte data flexibilně: Poskytujte přizpůsobené zobrazení dat pro různé uživatele.
Jako příklady použijeme tyto dvě SQL tabulky.
Podrobnosti o studentovi:
-- 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 | Jméno | Adresa |
|---|---|---|
1 | Drsné | Kalkata |
2 | Ashish | Durgapur |
3 | Praxe | Dillí |
4 | Dhanraj | Bihar |
5 | Beran | Rádžasthán |
Známky studenta:
-- 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 | Jméno | Marks | Stáří |
|---|---|---|---|
1 | Drsné | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Praxe | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Beran | 85 | 18 |
VYTVOŘTE POHLEDY v SQL
Pohled můžeme vytvořit pomocí příkazu CREATE VIEW. Pohled lze vytvořit z jedné tabulky nebo z více tabulek.
Syntax:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Klíčové pojmy:
- název_zobrazení : Název pro zobrazení
- název_tabulky : Název tabulky
- stav : Podmínka výběru řádků
Příklad 1: Vytvoření jednoduchého pohledu z jedné tabulky
Příklad 1.1: V tomto příkladu vytvoříme pohled s názvem DetailsView z tabulky StudentDetails.
Dotaz:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Pomocí níže uvedeného dotazu načtěte data z tohoto zobrazení
SELECT * FROM DetailsView;výstup:
Jméno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Praxe | Dillí |
Dhanraj | Bihar |
Příklad 1.2: Zde vytvoříme pohled s názvem StudentNames z tabulky StudentDetails.
Dotaz:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Pokud nyní dotazujeme pohled jako
SELECT * FROM StudentNames;
výstup:
S_ID | Jméno |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Drsné |
3 | Praxe |
5 | Beran java int jako řetězec |
Příklad 2: Vytvoření pohledu z více tabulek
V tomto příkladu vytvoříme View MarksView, který kombinuje data z obou tabulek StudentDetails a StudentMarks. Chcete-li vytvořit pohled z více tabulek, můžeme jednoduše zahrnout více tabulek do VYBRAT prohlášení.
Dotaz:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Chcete-li zobrazit data View MarksView:
SELECT * FROM MarksView;výstup:
Jméno | Adresa | Marks |
|---|---|---|
Drsné | Kalkata | 90 |
Praxe | Dillí | 80 |
Dhanraj | Bihar | 95 |
Beran | Rádžasthán | 85 |
Správa pohledů: Aktualizace a mazání seznamu
1. Výpis všech pohledů v databázi
Všechny pohledy v databázi můžeme vypsat pomocí příkazu SHOW FULL TABLES nebo dotazem na tabulky information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Použití 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. Odstranění pohledu
SQL nám umožňuje odstranit existující pohled. Můžeme vymazat nebo zrušte View pomocí příkazu DROP.
Syntax:
DROP VIEW view_name;Příklad: V tomto příkladu odstraňujeme View MarksView.
DROP VIEW MarksView;3. Aktualizace definice pohledu
Pokud chceme aktualizovat existující data v rámci pohledu, použijte AKTUALIZOVAT prohlášení.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Pokud chcete aktualizovat definici pohledu bez ovlivnění dat, použijte příkaz CREATE OR REPLACE VIEW. Přidejme napříkladAgesloupec kMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Poznámka: Ne všechny pohledy lze aktualizovat pomocí příkazu UPDATE.
Pravidla pro aktualizaci pohledů v SQL:
Pro aktualizaci pohledu je třeba splnit určité podmínky. Pokud je některá z těchto podmínek ne splnil pohled nelze aktualizovat.
třída vs objekt java
- Příkaz SELECT, který se používá k vytvoření pohledu, by neměl obsahovat klauzuli GROUP BY nebo OBJEDNAT PODLE doložka.
- Příkaz SELECT by neměl mít ODLIŠNÝ klíčové slovo.
- Zobrazení by mělo mít všechny hodnoty NOT NULL.
- Pohled by neměl být vytvořen pomocí vnořených dotazů nebo složitých dotazů.
- Pohled by měl být vytvořen z jedné tabulky. Pokud je pohled vytvořen pomocí více tabulek, nebudeme moci pohled aktualizovat.
Pokročilé techniky s pohledy
1. Aktualizace dat prostřednictvím pohledů
K přidání nebo nahrazení polí z pohledu můžeme použít příkaz CREATE OR REPLACE VIEW Pokud chceme aktualizovat pohled MarksView a přidat pole AGE do tohoto pohledu z tabulky StudentMarks, můžeme to udělat takto:
Příklad:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Pokud nyní načteme všechna data z MarksView jako:
SELECT * FROM MarksView;výstup:
Jméno | Adresa | Marks | Stáří |
|---|---|---|---|
Drsné | Kalkata | 90 | 19 |
Praxe | Dillí | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Beran | Rádžasthán | 85 | 18 |
Řádek do Pohledu můžeme vložit stejným způsobem jako do tabulky. Můžeme použít VLOŽIT DO příkaz SQL pro vložení řádku do pohledu. V níže uvedeném příkladu vložíme nový řádek do View DetailsView, který jsme vytvořili výše v příkladu 'vytváření pohledů z jedné tabulky'.
Příklad:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Pokud nyní načteme všechna data z DetailsView jako
SELECT * FROM DetailsView;výstup:
Jméno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Praxe | Dillí |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Odstranění řádku z pohledu
Odstranění řádků z pohledu je také stejně jednoduché jako odstranění řádků z tabulky. K odstranění řádků z pohledu můžeme použít příkaz DELETE jazyka SQL. Také odstranění řádku z pohledu nejprve odstraní řádek ze skutečné tabulky a změna se poté projeví v pohledu. V tomto příkladu odstraníme poslední řádek z pohledu DetailsView, který jsme právě přidali ve výše uvedeném příkladu vkládání řádků.
Příklad:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Pokud nyní načteme všechna data z DetailsView jako
SELECT * FROM DetailsView;výstup:
Jméno | Adresa |
|---|---|
Drsné | Kalkata |
Ashish | Durgapur |
Praxe | Dillí |
Dhanraj | Bihar |
4. S DOložkou CHECK OPTION
Klauzule WITH CHECK OPTION v SQL je velmi užitečná klauzule pro pohledy. Platí pro aktualizovatelný pohled. Používá se k zabránění úpravě dat (pomocí INSERT nebo UPDATE), pokud není splněna podmínka v klauzuli WHERE v příkazu CREATE VIEW.
Pokud jsme v příkazu CREATE VIEW použili klauzuli WITH CHECK OPTION a pokud klauzule UPDATE nebo INSERT nesplňuje podmínky, vrátí chybu. V níže uvedeném příkladu vytváříme View SampleView z tabulky StudentDetails s klauzulí WITH CHECK OPTION.
Příklad:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Pokud se v tomto zobrazení nyní pokusíme vložit nový řádek s hodnotou null do sloupce NAME, dojde k chybě, protože pohled je vytvořen s podmínkou pro sloupec NAME jako NOT NULL. Například i když je zobrazení aktualizovatelné, není platný ani níže uvedený dotaz pro toto zobrazení:
INSERT INTO SampleView(S_ID)Vytvořit kvíz
VALUES(6);