logo

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

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

  1. 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.
  2. A SELECT utasítás nem tartalmazhatja a KÜLÖNBÖZŐ kulcsszó.
  3. A Nézetnek minden NEM NULL értékkel kell rendelkeznie.
  4. A nézetet nem szabad beágyazott vagy összetett lekérdezések használatával létrehozni.
  5. 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)  
VALUES(6);
Kvíz létrehozása