Skats SQL ir saglabāts SQL vaicājums, kas darbojas kā virtuāla tabula. Atšķirībā no parastajām tabulām skati paši neuzglabā datus. Tā vietā tie dinamiski ģenerē datus, izpildot skatā definēto SQL vaicājumu katru reizi, kad tam tiek piekļūts.
Tas var iegūt datus no vienas vai vairākām tabulām un parādīt tos pielāgotā formātā, kas ļauj izstrādātājiem:
- Sarežģītu vaicājumu vienkāršošana: Iekapsulējiet sarežģītus savienojumus un nosacījumus vienā objektā.
- Uzlabojiet drošību: Ierobežojiet piekļuvi noteiktām kolonnām vai rindām.
- Elastīgi prezentējiet datus: Nodrošiniet dažādiem lietotājiem pielāgotus datu skatus.
Mēs izmantosim šīs divas SQL tabulas kā piemērus.
Studentu informācija:
-- 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');
Izvade:
S_ID | Vārds | Adrese |
|---|---|---|
1 | Skarbi | Kolkata |
2 | Ashish | Durgapura |
3 | Prakse | Deli |
4 | Dhanraj | Bihar |
5 | Ram | Radžastāna |
Studentu atzīmes:
-- 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);
Izvade:
ID | Vārds | Marks | Vecums |
|---|---|---|---|
1 | Skarbi | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Prakse | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
IZVEIDOT SKATUS SQL
Mēs varam izveidot skatu, izmantojot CREATE VIEW priekšrakstu. Skatu var izveidot no vienas tabulas vai vairākām tabulām.
Sintakse:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Galvenie noteikumi:
- skata_nosaukums : Skata nosaukums
- tabulas_nosaukums : tabulas nosaukums
- stāvokli : nosacījums, lai atlasītu rindas
1. piemērs: vienkārša skata izveide no vienas tabulas
1.1. piemērs: Šajā piemērā mēs izveidosim skatu ar nosaukumu DetailsView no tabulas StudentDetails.
Vaicājums:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Izmantojiet tālāk norādīto vaicājumu, lai izgūtu datus no šī skata
SELECT * FROM DetailsView;Izvade:
Vārds | Adrese |
|---|---|
Skarbi | Kolkata |
Ashish | Durgapura |
Prakse | Deli |
Dhanraj | Bihar |
1.2. piemērs: Šeit mēs izveidosim skatu ar nosaukumu StudentNames no tabulas StudentDetails.
Vaicājums:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Ja tagad vaicāsim skatu kā
SELECT * FROM StudentNames;
Izvade:
S_ID | Vārds |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Skarbi |
3 | Prakse |
5 | Ram java scan.nextstring |
2. piemērs: Skata izveide no vairākām tabulām
Šajā piemērā mēs izveidosim View MarksView, kas apvieno datus no abām tabulām StudentDetails un StudentMarks. Lai izveidotu skatu no vairākām tabulām, mēs varam vienkārši iekļaut vairākas tabulas ATLASĪT paziņojums.
Vaicājums:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Lai parādītu View MarksView datus:
SELECT * FROM MarksView;Izvade:
Vārds | Adrese | Marks |
|---|---|---|
Skarbi | Kolkata | 90 |
Prakse | Deli | 80 |
Dhanraj | Bihar | 95 |
Ram | Radžastāna | 85 |
Skatu pārvaldība: saraksta atjaunināšana un dzēšana
1. Visu skatu uzskaitīšana datu bāzē
Mēs varam uzskaitīt visus skatus datu bāzē, izmantojot priekšrakstu SHOW FULL TABLES vai vaicājot tabulas information_schema.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Izmantojot informācijas_shēmu
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. Skata dzēšana
SQL ļauj dzēst esošu skatu. Mēs varam dzēst vai nometiet skatu, izmantojot DROP priekšrakstu.
Sintakse:
DROP VIEW view_name;Piemērs: Šajā piemērā mēs dzēšam View MarksView.
DROP VIEW MarksView;3. Skata definīcijas atjaunināšana
Ja vēlamies atjaunināt esošos datus skatā, izmantojiet ATJAUNINĀT paziņojums.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Ja vēlaties atjaunināt skata definīciju, neietekmējot datus, izmantojiet priekšrakstu CREATE OR REPLACE VIEW. Piemēram, pievienosimAgekolonnu uzMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Piezīme: Ne visus skatus var atjaunināt, izmantojot paziņojumu UPDATE.
Noteikumi skatu atjaunināšanai SQL:
Lai atjauninātu skatu, ir jāizpilda noteikti nosacījumi. Ja kāds no šiem nosacījumiem ir nē met skatu nevar atjaunināt.
- Skata izveidei izmantotajā priekšrakstā SELECT nedrīkst būt ietverta klauzula GROUP BY vai PASŪTĪT PĒC klauzula.
- SELECT priekšrakstā nedrīkst būt ATŠĶIRĪGI atslēgvārds.
- Skatā ir jābūt visām NOT NULL vērtībām.
- Skatu nedrīkst izveidot, izmantojot ligzdotus vaicājumus vai sarežģītus vaicājumus.
- Skats jāizveido no vienas tabulas. Ja skats ir izveidots, izmantojot vairākas tabulas, mēs nevarēsim atjaunināt skatu.
Uzlabotas metodes ar skatiem
1. Datu atjaunināšana, izmantojot skatus
Mēs varam izmantot priekšrakstu CREATE OR REPLACE VIEW, lai pievienotu vai aizstātu laukus no skata Ja mēs vēlamies atjaunināt skatu MarksView un pievienot lauku AGE šim skatam no StudentMarks tabulas, mēs to varam izdarīt šādi:
Piemērs:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Ja mēs tagad iegūsim visus datus no MarksView kā:
SELECT * FROM MarksView;Izvade:
Vārds | Adrese | Marks | Vecums |
|---|---|---|---|
Skarbi | Kolkata | 90 | 19 |
Prakse | Deli | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Radžastāna | 85 | 18 |
Rindu skatā varam ievietot tāpat kā tabulā. Mēs varam izmantot INSERT INTO SQL priekšraksts, lai skatā ievietotu rindu. Tālāk esošajā piemērā mēs ievietosim jaunu rindu View DetailsView, ko esam izveidojuši iepriekš, piemēram, “skatu izveide no vienas tabulas”.
Piemērs:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Ja mēs iegūsim visus datus no DetailsView tagad kā
SELECT * FROM DetailsView;Izvade:
Vārds | Adrese |
|---|---|
Skarbi | Kolkata |
Ashish | Durgapura |
Prakse | Deli |
Dhanraj | Bihar |
Suresh | Gurgaons |
3. Rindas dzēšana no skata
Rindu dzēšana no skata ir tikpat vienkārša kā rindu dzēšana no tabulas. Mēs varam izmantot SQL priekšrakstu DELETE, lai dzēstu rindas no skata. Dzēšot rindu no skata, vispirms tiek izdzēsta rinda no faktiskās tabulas, un pēc tam izmaiņas tiek atspoguļotas skatā. Šajā piemērā mēs izdzēsīsim pēdējo rindu no skata DetailsView, kuru tikko pievienojām iepriekš minētajā rindu ievietošanas piemērā.
Piemērs:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Ja mēs iegūsim visus datus no DetailsView tagad kā
SELECT * FROM DetailsView;Izvade:
Vārds | Adrese |
|---|---|
Skarbi | Kolkata arp komanda |
Ashish | Durgapura |
Prakse | Deli |
Dhanraj | Bihar |
4. AR PĀRBAUDES IESPĒJU klauzulu
WITH CHECK OPTION klauzula SQL ir ļoti noderīga skatiem. Tas attiecas uz atjaunināmu skatu. To izmanto, lai novērstu datu modifikāciju (izmantojot INSERT vai UPDATE), ja nosacījums WHERE klauzulā priekšrakstā CREATE VIEW nav izpildīts.
Ja priekšrakstā CREATE VIEW esam izmantojuši klauzulu WITH CHECK OPTION un ja klauzula UPDATE vai INSERT neatbilst nosacījumiem, tie atgriezīs kļūdu. Tālāk esošajā piemērā mēs izveidojam View SampleView no StudentDetails tabulas ar klauzulu WITH CHECK OPTION.
Piemērs:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Šajā skatā, ja mēs tagad mēģināsim ievietot jaunu rindu ar nulles vērtību kolonnā NAME, tiks parādīta kļūda, jo skats tiek izveidots ar nosacījumu kolonnai NOSAUKUMS kā NOT NULL. Piemēram, ja skats ir atjaunināms, arī tālāk norādītais vaicājums šim skatam nav derīgs:
INSERT INTO SampleView(S_ID)Izveidojiet viktorīnu
VALUES(6);