Az SQL-nézet egy mentett SQL-lekérdezés, amely virtuális táblaként működik. A hagyományos táblázatokkal ellentétben a nézetek nem tárolják magukat az adatokat. Ehelyett dinamikusan generálnak adatokat a nézetben definiált SQL-lekérdezés végrehajtásával minden alkalommal, amikor hozzáférnek.
Lekérheti az adatokat egy vagy több táblából, és testreszabott formátumban jelenítheti meg, amely lehetővé teszi a fejlesztők számára:
- Az összetett lekérdezések egyszerűsítése: Az összetett csatlakozásokat és feltételeket egyetlen objektumba foglalhatja.
- A biztonság fokozása: A hozzáférés korlátozása adott oszlopokra vagy sorokra.
- Rugalmas adatszolgáltatás: Testreszabott adatnézeteket biztosít a különböző felhasználók számára.
Példákként ezt a két SQL táblát fogjuk használni.
Tanulói részletek:
-- 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');
Kimenet:
S_ID | Név | Cím |
|---|---|---|
1 | Durva | Kolkata |
2 | Ashish | Durgapur |
3 | Gyakorlat | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Diákjegyek:
-- 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);
Kimenet:
ID | Név | Marks | Kor |
|---|---|---|---|
1 | Durva | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Gyakorlat | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
NÉZETEK LÉTREHOZÁSA SQL-ben
Nézetet létrehozhatunk a CREATE VIEW utasítással. Egy nézet egyetlen táblából vagy több táblából is létrehozható.
Szintaxis:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Főbb feltételek:
- view_name : Nézet neve
- táblázat_neve : A táblázat neve
- állapot : A sorok kiválasztásának feltétele
1. példa: Egyszerű nézet létrehozása egyetlen táblázatból
1.1. példa: Ebben a példában egy DetailsView nevű nézetet fogunk létrehozni a StudentDetails táblázatból.
Lekérdezés:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Használja az alábbi lekérdezést az adatok lekéréséhez ebből a nézetből
SELECT * FROM DetailsView;Kimenet:
Név | Cím |
|---|---|
Durva | Kolkata |
Ashish | Durgapur |
Gyakorlat | Delhi |
Dhanraj | Bihar |
1.2. példa: Itt létrehozunk egy StudentNames nevű nézetet a StudentDetails táblázatból.
Lekérdezés:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Ha most lekérdezzük a nézetet mint
SELECT * FROM StudentNames;
Kimenet:
S_ID | Név |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Durva |
3 | Gyakorlat |
5 | Ram scan.nextstring java |
2. példa: Nézet létrehozása több táblából
Ebben a példában egy View MarksView-t fogunk létrehozni, amely a StudentDetails és a StudentMarks táblák adatait egyesíti. Ha több táblázatból szeretne nézetet létrehozni, egyszerűen több táblát is beilleszthetünk a KIVÁLASZTÁS nyilatkozat.
Lekérdezés:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
A View MarksView adatainak megjelenítése:
SELECT * FROM MarksView;Kimenet:
Név | Cím | Marks |
|---|---|---|
Durva | Kolkata | 90 |
Gyakorlat | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Nézetek kezelése: Listázás frissítése és törlése
1. Az összes nézet listázása egy adatbázisban
Egy adatbázisban lévő összes nézetet listázhatjuk a SHOW FULL TABLES utasítással vagy az information_schema táblák lekérdezésével.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Az információs_séma használata
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. Nézet törlése
Az SQL lehetővé teszi egy meglévő nézet törlését. Megtehetjük töröl vagy dobja el a Nézetet a DROP utasítással.
Szintaxis:
DROP VIEW view_name;Példa: Ebben a példában a MarksView nézetet töröljük.
DROP VIEW MarksView;3. Nézetdefiníció frissítése
Ha frissíteni szeretnénk a nézeten belüli meglévő adatokat, használjuk a FRISSÍTÉS nyilatkozat.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Ha az adatok befolyásolása nélkül szeretné frissíteni a nézetdefiníciót, használja a CREATE OR REPLACE VIEW utasítást. Például adjuk hozzá aAgeoszlopba aMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Jegyzet: Nem minden nézet frissíthető az UPDATE utasítással.
A nézetek frissítésének szabályai SQL-ben:
A nézet frissítéséhez bizonyos feltételeknek teljesülniük kell. Ha ezen feltételek bármelyike fennáll nem met a nézet nem frissíthető.
- A nézet létrehozásához használt SELECT utasítás nem tartalmazhat GROUP BY vagy záradékot MEGRENDELÉS záradék.
- A SELECT utasítás nem tartalmazhatja a KÜLÖNBÖZŐ kulcsszó.
- A Nézetnek minden NEM NULL értékkel kell rendelkeznie.
- A nézetet nem szabad beágyazott vagy összetett lekérdezések használatával létrehozni.
- A nézetet egyetlen táblázatból kell létrehozni. Ha a nézet több tábla használatával jön létre, akkor nem frissíthetjük a nézetet.
Fejlett technikák kilátással
1. Adatok frissítése nézeteken keresztül
Használhatjuk a CREATE OR REPLACE VIEW utasítást mezők hozzáadására vagy cseréjére egy nézetből. Ha frissíteni akarjuk a MarksView nézetet, és hozzá szeretnénk adni az AGE mezőt ehhez a nézethez a StudentMarks Table-ból, ezt a következőképpen tehetjük meg:
Példa:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Ha most az összes adatot lekérjük a MarksView-ból:
SELECT * FROM MarksView;Kimenet:
Név | Cím | Marks | Kor |
|---|---|---|---|
Durva | Kolkata | 90 | 19 |
Gyakorlat | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
Nézetbe ugyanúgy beszúrhatunk egy sort, mint egy táblázatba. Használhatjuk a INSERT INTO SQL utasítás egy sor beszúrásához egy nézetbe. Az alábbi példában egy új sort szúrunk be a View DetailsView-ba, amelyet fent hoztunk létre a „Nézetek létrehozása egyetlen táblázatból” példában.
Példa:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Ha az összes adatot lekérjük a DetailsView-ból most mint
SELECT * FROM DetailsView;Kimenet:
Név | Cím |
|---|---|
Durva | Kolkata |
Ashish | Durgapur |
Gyakorlat | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Sor törlése nézetből
A sorok törlése a nézetből szintén olyan egyszerű, mint a sorok törlése egy táblázatból. Az SQL DELETE utasítását használhatjuk sorok törlésére a nézetből. Szintén egy sor törlése a nézetből először törli a sort a tényleges táblából, majd a változás megjelenik a nézetben. Ebben a példában töröljük az utolsó sort a DetailsView nézetből, amelyet a fenti sorok beszúrási példájában adtunk hozzá.
Példa:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Ha az összes adatot lekérjük a DetailsView-ból most mint
SELECT * FROM DetailsView;Kimenet:
Név javascript window.open | Cím |
|---|---|
Durva | Kolkata |
Ashish | Durgapur |
Gyakorlat | Delhi |
Dhanraj | Bihar |
4. AZ ELLENŐRZÉS LEHETŐSÉGÉVEL
A WITH CHECK OPTION záradék az SQL-ben egy nagyon hasznos záradék a nézetek számára. Frissíthető nézetre vonatkozik. Az adatok módosításának megakadályozására szolgál (az INSERT vagy az UPDATE használatával), ha a CREATE VIEW utasítás WHERE záradékában szereplő feltétel nem teljesül.
Ha a CREATE VIEW utasításban a WITH CHECK OPTION záradékot használtuk, és ha az UPDATE vagy INSERT záradék nem felel meg a feltételeknek, akkor hibát adnak vissza. Az alábbi példában egy View SampleView-t hozunk létre a StudentDetails táblából egy WITH CHECK OPTION záradékkal.
Példa:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Ebben a nézetben, ha most megpróbálunk beszúrni egy új sort null értékkel a NÉV oszlopba, akkor az hibát ad, mert a nézet a NÉV oszlop feltételével NOT NULL értékű lesz. Például bár a nézet frissíthető, az alábbi lekérdezés ehhez a nézethez sem érvényes:
INSERT INTO SampleView(S_ID)Kvíz létrehozása
VALUES(6);