SQL nézetek
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 |
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á a
Ageoszlopba 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 | 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)
VALUES(6); Kvíz létrehozása