logo

SQL rodiniai

SQL rodinys yra išsaugota SQL užklausa, kuri veikia kaip virtuali lentelė. Skirtingai nuo įprastų lentelių rodinių patys duomenys nesaugo. Vietoj to, jie dinamiškai generuoja duomenis vykdydami rodinyje apibrėžtą SQL užklausą kiekvieną kartą, kai ji pasiekiama.

Jis gali gauti duomenis iš vienos ar kelių lentelių ir pateikti juos tinkintu formatu, leidžiančiu kūrėjams:

  • Supaprastinkite sudėtingas užklausas: Sudėkite sudėtingas jungtis ir sąlygas į vieną objektą.
  • Padidinkite saugumą: Apriboti prieigą prie konkrečių stulpelių ar eilučių.
  • Lanksčiai pateikite duomenis: Pateikite pritaikytus duomenų rodinius skirtingiems naudotojams.

Pavyzdžiams naudosime šias dvi SQL lenteles.



Mokinio informacija:

-- 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');

Išvestis:

S_ID

Vardas

Adresas

1

Griežtas

Kolkata

2

Ashish

Durgapuras

3

Praktika

Delis

4

Dhanraj

Biharas

5

Ram

Radžastanas

Studentų ženklai:

-- 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);

Išvestis:

ID

Vardas

Ženklai

Amžius

1

Griežtas

90

19

2

Suresh

50

20

3

Praktika

80

19

4

Dhanraj

95

21

5

Ram

85

18

KURTI VAIZDUS SQL

Vaizdą galime sukurti naudodami CREATE VIEW teiginį. Rodinį galima sukurti iš vienos lentelės arba iš kelių lentelių.

Sintaksė:

CREATE VIEW view_name AS  
SELECT column1 column2.....
FROM table_name
WHERE condition;

Pagrindinės sąlygos:

  • rodinio_pavadinimas : Rodinio pavadinimas
  • lentelės_pavadinimas : lentelės pavadinimas
  • sąlyga : Sąlyga norint pasirinkti eilutes

1 pavyzdys: paprasto vaizdo kūrimas iš vienos lentelės

1.1 pavyzdys: Šiame pavyzdyje sukursime rodinį pavadinimu DetailsView iš lentelės StudentDetails.

Užklausa:

CREATE VIEW DetailsView AS  
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;

Norėdami gauti duomenis iš šio rodinio, naudokite toliau pateiktą užklausą

SELECT * FROM DetailsView;

Išvestis: 

Vardas

Adresas

Griežtas

Kolkata

Ashish

Durgapuras

Praktika

Delis

Dhanraj

Biharas

1.2 pavyzdys: Čia mes sukursime rodinį pavadinimu StudentNames iš lentelės StudentDetails.

Užklausa:

CREATE VIEW StudentNames AS  
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;

Jei dabar užklaustume rodinio kaip

    SELECT    *     FROM    StudentNames;

Išvestis: 

S_ID

Vardas

2

Ashish

4

Dhanraj

1

Griežtas

3

Praktika

5

Ram

išmokti seleno

2 pavyzdys: Vaizdo kūrimas iš kelių lentelių

Šiame pavyzdyje sukursime rodinį MarksView, kuris sujungs duomenis iš abiejų lentelių StudentDetails ir StudentMarks. Norėdami sukurti rodinį iš kelių lentelių, galime tiesiog įtraukti kelias lenteles PASIRINKTI pareiškimas.

Užklausa:

CREATE VIEW MarksView AS  
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;

Norėdami rodyti „View MarksView“ duomenis:

SELECT * FROM MarksView;

Išvestis:

Vardas

Adresas

Ženklai

Griežtas

Kolkata

90

Praktika

Delis

80

Dhanraj

Biharas

95

Ram

Radžastanas

85

Rodinių tvarkymas: sąrašo atnaujinimas ir trynimas

1. Visų rodinių sąrašas duomenų bazėje

Visus rodinius duomenų bazėje galime surašyti naudodami teiginį SHOW FULL TABLES arba užklausę informacijos_schemos lenteles.

USE 'database_name';  
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';

Naudojant informacijos_schemą

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. Rodinio ištrynimas

SQL leidžia ištrinti esamą rodinį. Mes galime ištrinti arba nuleiskite rodinį naudodami DROP teiginį.

Sintaksė:

DROP VIEW view_name;

Pavyzdys: Šiame pavyzdyje mes ištriname „View MarksView“.

DROP VIEW MarksView;

3. Rodinio apibrėžimo atnaujinimas

Jei norime atnaujinti esamus duomenis rodinyje, naudokite  ATNAUJINTI  pareiškimas.

UPDATE view_name  
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];

Jei norite atnaujinti rodinio apibrėžimą nepaveikdami duomenų, naudokite teiginį CREATE OR REPLACE VIEW. Pavyzdžiui, pridėkimeAgestulpelį įMarksView:

CREATE OR REPLACE VIEW view_name AS  
SELECT column1 column2 ...
FROM table_name
WHERE condition;

Pastaba: Ne visi rodiniai gali būti atnaujinami naudojant teiginį UPDATE.

Rodinių atnaujinimo SQL taisyklės:

Norint atnaujinti rodinį, turi būti įvykdytos tam tikros sąlygos. Jei kuri nors iš šių sąlygų yra ne atitiko rodinio atnaujinti negalima.

  1. Teiginyje SELECT, kuris naudojamas kuriant rodinį, neturėtų būti sąlygos GROUP BY arba UŽSAKYTI PAGAL sąlyga.
  2. SELECT sakinyje neturėtų būti ATSKIRTI raktažodį.
  3. Rodinyje turi būti visos NOT NULL reikšmės.
  4. Rodinys neturėtų būti kuriamas naudojant įdėtas arba sudėtingas užklausas.
  5. Vaizdas turi būti sukurtas iš vienos lentelės. Jei rodinys sukurtas naudojant kelias lenteles, mums nebus leista atnaujinti rodinio.

Pažangios technikos su vaizdais

1. Duomenų atnaujinimas naudojant rodinius

Norėdami pridėti arba pakeisti rodinio laukus, galime naudoti teiginį CREATE OR REPLACE VIEW. Jei norime atnaujinti rodinį MarksView ir pridėti lauką AGE prie šio rodinio iš StudentMarks lentelės, tai galime padaryti taip:

Pavyzdys:

CREATE OR REPLACE VIEW MarksView AS  
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;

Jei dabar gausime visus duomenis iš MarksView kaip:

SELECT * FROM MarksView;

Išvestis:

Vardas

Adresas

Ženklai

Amžius

Griežtas

Kolkata

90

19

Praktika

Delis

80

19

Dhanraj

Biharas

95

21

Ram

Radžastanas

85

18

Rodinyje eilutę galime įterpti taip pat, kaip ir lentelėje. Mes galime naudoti INSERT INTO SQL sakinį, kad įterptumėte eilutę rodinyje. Toliau pateiktame pavyzdyje įterpsime naują eilutę į rodinio išsamios informacijos rodinį, kurį sukūrėme aukščiau kaip „vaizdų kūrimo iš vienos lentelės“ pavyzdyje.

Pavyzdys:

INSERT INTO DetailsView(NAME ADDRESS)  
VALUES('Suresh''Gurgaon');

Jei gausime visus duomenis iš „DetailsView“ dabar kaip

SELECT * FROM DetailsView;

Išvestis:

Vardas

Adresas

Griežtas

Kolkata

Ashish

Durgapuras

Praktika

Delis

Dhanraj

Biharas

Suresh

Gurgaonas

3. Eilutės ištrynimas iš rodinio

Ištrinti eilutes iš rodinio taip pat paprasta, kaip ištrinti eilutes iš lentelės. Norėdami ištrinti eilutes iš rodinio, galime naudoti SQL teiginį DELETE. Taip pat ištrynus eilutę iš rodinio pirmiausia ištrinama eilutė iš tikrosios lentelės, o po to pakeitimas atsispindi rodinyje. Šiame pavyzdyje ištrinsime paskutinę eilutę iš rodinio DetailsView, kurią ką tik įtraukėme aukščiau pateiktame eilučių įterpimo pavyzdyje.

Pavyzdys:

DELETE FROM DetailsView  
WHERE NAME='Suresh';

Jei gausime visus duomenis iš „DetailsView“ dabar kaip

SELECT * FROM DetailsView;

Išvestis: 

Vardas

Adresas

Griežtas

Kolkata

Ashish

Durgapuras

Praktika

java skaityti csv failą

Delis

Dhanraj

Biharas

4. SU PATIKRINIMO OPTION sąlyga

SQL sąlyga WITH CHECK OPTION yra labai naudinga sąlyga rodiniams. Tai taikoma atnaujinamam rodiniui. Jis naudojamas siekiant užkirsti kelią duomenų keitimui (naudojant INSERT arba UPDATE), jei netenkinama sąlyga WHERE sakinyje CREATE VIEW.

Jei sakinyje CREATE VIEW panaudojome sąlygą WITH CHECK OPTION ir jei sąlyga UPDATE arba INSERT neatitinka sąlygų, jie grąžins klaidą. Žemiau esančiame pavyzdyje mes sukuriame View SampleView iš StudentDetails lentelės su sąlyga WITH CHECK OPTION.

Pavyzdys:

CREATE VIEW SampleView AS  
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;

Jei šiame rodinyje dabar bandysime įterpti naują eilutę su nuline reikšme stulpelyje PAVADINIMAS, tai duos klaidą, nes vaizdas bus sukurtas su stulpelio PAVADINIMAS sąlyga NOT NULL. Pavyzdžiui, nors rodinys yra atnaujinamas, toliau pateikta šio rodinio užklausa negalioja:

INSERT INTO SampleView(S_ID)  
VALUES(6);
Sukurti viktoriną