SQL-näkymä on tallennettu SQL-kysely, joka toimii virtuaalisena taulukkona. Toisin kuin tavalliset taulukot, näkymät eivät tallenna tietoja itse. Sen sijaan ne luovat dynaamisesti tietoja suorittamalla näkymässä määritellyn SQL-kyselyn joka kerta, kun sitä käytetään.
Se voi hakea tietoja yhdestä tai useammasta taulukosta ja esittää ne mukautetussa muodossa, jolloin kehittäjät voivat:
- Yksinkertaista monimutkaisia kyselyitä: Kapseloi monimutkaiset liitokset ja ehdot yhdeksi objektiksi.
- Paranna turvallisuutta: Rajoita pääsyä tiettyihin sarakkeisiin tai riveihin.
- Esitä tiedot joustavasti: Tarjoa räätälöityjä datanäkymiä eri käyttäjille.
Käytämme näitä kahta SQL-taulukkoa esimerkkeinä.
Opiskelijatiedot:
-- 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');
Lähtö:
S_ID | Nimi | Osoite |
|---|---|---|
1 | Kovaa | Kolkata |
2 | Ashish | Durgapur |
3 | Harjoitella | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
Opiskelijamerkit:
-- 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);
Lähtö:
ID | Nimi | Marks | Ikä |
|---|---|---|---|
1 | Kovaa | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Harjoitella | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
LUO NÄKYMÄT SQL:ssä
Voimme luoda näkymän käyttämällä CREATE VIEW -käskyä. Näkymä voidaan luoda yhdestä taulukosta tai useista taulukoista.
Syntaksi:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Tärkeimmät ehdot:
- näkymän_nimi : Näkymän nimi
- taulukon_nimi : Taulukon nimi
- kunto : Rivien valinnan ehto
Esimerkki 1: Yksinkertaisen näkymän luominen yhdestä taulukosta
Esimerkki 1.1: Tässä esimerkissä luomme näkymän nimeltä DetailsView taulukosta StudentDetails.
Kysely:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Käytä alla olevaa kyselyä hakeaksesi tiedot tästä näkymästä
SELECT * FROM DetailsView;Lähtö:
Nimi | Osoite |
|---|---|
Kovaa | Kolkata |
Ashish | Durgapur |
Harjoitella | Delhi |
Dhanraj | Bihar |
Esimerkki 1.2: Tässä luodaan StudentNames-niminen näkymä StudentDetails-taulukosta.
Kysely:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Jos nyt kysytään näkymää muodossa
SELECT * FROM StudentNames;
Lähtö:
S_ID | Nimi |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Kovaa |
3 | Harjoitella |
5 | Ram java sopimusten nimeäminen |
Esimerkki 2: Näkymän luominen useista taulukoista
Tässä esimerkissä luomme View MarksView -näkymän, joka yhdistää tiedot molemmista StudentDetails- ja StudentMarks-taulukoista. Jos haluat luoda näkymän useista taulukoista, voimme yksinkertaisesti sisällyttää useita taulukoita VALITSE lausunto.
Kysely:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Näytä MarksView-näkymän tiedot:
SELECT * FROM MarksView;Lähtö:
Nimi | Osoite | Marks |
|---|---|---|
Kovaa | Kolkata | 90 |
Harjoitella | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Näkymien hallinta: Tietojen päivittäminen ja poistaminen
1. Tietokannan kaikkien näkymien luettelointi
Voimme listata kaikki tietokannan näkymät käyttämällä SHOW FULL TABLES -käskyä tai kyselemällä information_schema-taulukoita.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Tietojen_skeeman käyttö
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äkymän poistaminen
SQL mahdollistaa olemassa olevan näkymän poistamisen. Voimme poistaa tai pudota Näytä DROP-käskyn avulla.
Syntaksi:
DROP VIEW view_name;Esimerkki: Tässä esimerkissä poistamme View MarksView -näkymän.
DROP VIEW MarksView;3. Näkymän määritelmän päivittäminen
Jos haluamme päivittää näkymän olemassa olevat tiedot, käytä PÄIVITTÄÄ lausunto.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Jos haluat päivittää näkymän määritelmän vaikuttamatta tietoihin, käytä CREATE OR REPLACE VIEW -käskyä. Lisätään esimerkiksiAgesarakkeeseenMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Huomautus: Kaikkia näkymiä ei voi päivittää UPDATE-käskyn avulla.
Säännöt näkymien päivittämiseen SQL:ssä:
Tiettyjen ehtojen on täytyttävä näkymän päivittämiseksi. Jos jokin näistä ehdoista on ei täyttyi näkymää ei voi päivittää.
- Näkymän luomiseen käytettävä SELECT-käsky ei saa sisältää GROUP BY -lausetta tai TILAA lauseke.
- SELECT-lauseessa ei pitäisi olla ERITTÄVÄ avainsana.
- Näkymässä tulee olla kaikki NOT NULL -arvot.
- Näkymää ei saa luoda käyttämällä sisäkkäisiä tai monimutkaisia kyselyitä.
- Näkymä tulee luoda yhdestä taulukosta. Jos näkymä luodaan käyttämällä useita taulukoita, emme saa päivittää näkymää.
Kehittyneet tekniikat näkymin
1. Tietojen päivittäminen näkymien kautta
Voimme käyttää CREATE OR REPLACE VIEW -käskyä lisätäksesi tai korvataksemme kenttiä näkymästä. Jos haluamme päivittää MarksView-näkymän ja lisätä kentän AGE tähän näkymään StudentMarks-taulukosta, voimme tehdä tämän seuraavasti:
Esimerkki:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Jos haemme kaikki tiedot MarksView'sta nyt seuraavasti:
SELECT * FROM MarksView;Lähtö:
Nimi | Osoite | Marks | Ikä |
|---|---|---|---|
Kovaa | Kolkata | 90 | 19 |
Harjoitella | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
Voimme lisätä rivin näkymään samalla tavalla kuin taulukkoon. Voimme käyttää INSERT INTO SQL-käsky lisätäksesi rivin näkymään. Alla olevassa esimerkissä lisäämme uuden rivin View DetailsView -näkymään, jonka loimme edellä esimerkissä "Näkymien luominen yhdestä taulukosta".
Esimerkki:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Jos haemme kaikki tiedot DetailsView'sta nyt nimellä
usa kaupungin nimi
SELECT * FROM DetailsView;Lähtö:
Nimi | Osoite |
|---|---|
Kovaa | Kolkata |
Ashish | Durgapur |
Harjoitella | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Rivin poistaminen näkymästä
Rivien poistaminen näkymästä on myös yhtä helppoa kuin rivien poistaminen taulukosta. Voimme käyttää SQL:n DELETE-käskyä rivien poistamiseen näkymästä. Myös rivin poistaminen näkymästä poistaa ensin rivin varsinaisesta taulukosta ja muutos näkyy sitten näkymässä. Tässä esimerkissä poistamme viimeisen rivin DetailsView-näkymästä, jonka juuri lisäsimme yllä olevaan rivien lisäämisen esimerkkiin.
Esimerkki:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Jos haemme kaikki tiedot DetailsView'sta nyt nimellä
SELECT * FROM DetailsView;Lähtö:
Nimi | Osoite |
|---|---|
Kovaa | Kolkata |
Ashish | Durgapur |
Harjoitella | Delhi |
Dhanraj | Bihar |
4. CHECK OPTION -lausekkeella
SQL:n WITH CHECK OPTION -lause on erittäin hyödyllinen lauseke näkymille. Se koskee päivitettävää näkymää. Sitä käytetään estämään tietojen muuttaminen (käyttäen INSERT tai UPDATE), jos CREATE VIEW -käskyn WHERE-lauseen ehto ei täyty.
Jos olemme käyttäneet WITH CHECK OPTION -lausetta CREATE VIEW -käskyssä ja jos UPDATE- tai INSERT-lause ei täytä ehtoja, ne palauttavat virheilmoituksen. Alla olevassa esimerkissä luomme View SampleView -näkymän StudentDetails-taulukosta, jossa on WITH CHECK OPTION -lause.
Esimerkki:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Jos yritämme tässä näkymässä nyt lisätä uuden rivin nolla-arvolla NIMI-sarakkeeseen, se antaa virheen, koska näkymä luodaan NIMI-sarakkeen ehdolla NOT NULL. Esimerkiksi vaikka näkymä on päivitettävissä, myös alla oleva kysely tälle näkymälle ei ole kelvollinen:
INSERT INTO SampleView(S_ID)Luo tietokilpailu
VALUES(6);