En vy i SQL är en sparad SQL-fråga som fungerar som en virtuell tabell. Till skillnad från vanliga tabeller lagrar vyer inte data själva. Istället genererar de dynamiskt data genom att exekvera SQL-frågan som definieras i vyn varje gång den används.
Den kan hämta data från en eller flera tabeller och presentera den i ett anpassat format som tillåter utvecklare att:
- Förenkla komplexa frågor: Kapsla in komplexa kopplingar och villkor i ett enda objekt.
- Förbättra säkerheten: Begränsa åtkomsten till specifika kolumner eller rader.
- Presentera data flexibelt: Ge skräddarsydda datavyer för olika användare.
Vi kommer att använda dessa två SQL-tabeller som exempel.
Studentdetaljer:
-- 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');
Produktion:
S_ID | Namn | Adress |
|---|---|---|
1 | Hård | Kolkata |
2 | Ashish | Durgapur |
3 | Öva | Delhi |
4 | Dhanraj | Bihar |
5 | Ram | Rajasthan |
StudentMarks:
-- 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);
Produktion:
ID | Namn | Märken | Åldras |
|---|---|---|---|
1 | Hård | 90 | 19 |
2 | Suresh | 50 | 20 |
3 | Öva | 80 | 19 |
4 | Dhanraj | 95 | 21 |
5 | Ram | 85 | 18 |
SKAPA VISNINGAR i SQL
Vi kan skapa en vy med CREATE VIEW-satsen. En vy kan skapas från en enda tabell eller flera tabeller.
Syntax:
CREATE VIEW view_name AS
SELECT column1 column2.....
FROM table_name
WHERE condition;
Nyckelord:
- view_name : Namn på vyn
- tabellnamn : Namn på tabellen
- skick : Villkor för att välja rader
Exempel 1: Skapa en enkel vy från en enskild tabell
Exempel 1.1: I det här exemplet kommer vi att skapa en vy som heter DetailsView från tabellen Studentdetaljer.
Fråga:
CREATE VIEW DetailsView AS
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
Använd frågan nedan för att hämta data från denna vy
SELECT * FROM DetailsView;Produktion:
Namn | Adress |
|---|---|
Hård | Kolkata |
Ashish | Durgapur |
Öva | Delhi |
Dhanraj | Bihar |
Exempel 1.2: Här kommer vi att skapa en vy med namnet StudentNames från tabellen StudentDetails.
Fråga:
CREATE VIEW StudentNames AS
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;
Om vi nu frågar vyn som
SELECT * FROM StudentNames;
Produktion:
S_ID | Namn |
|---|---|
2 | Ashish |
4 | Dhanraj |
1 | Hård |
3 | Öva |
5 | Ram Hur man laddar ner youtube video vlc |
Exempel 2: Skapa en vy från flera tabeller
I det här exemplet kommer vi att skapa en View MarksView som kombinerar data från båda tabellerna StudentDetails och StudentMarks. För att skapa en vy från flera tabeller kan vi helt enkelt inkludera flera tabeller i VÄLJA påstående.
Fråga:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
För att visa data för View MarksView:
SELECT * FROM MarksView;Produktion:
Namn | Adress | Märken |
|---|---|---|
Hård | Kolkata | 90 |
Öva | Delhi | 80 |
Dhanraj | Bihar | 95 |
Ram | Rajasthan | 85 |
Hantera vyer: Uppdatera och ta bort listor
1. Lista alla vyer i en databas
Vi kan lista alla vyer i en databas med hjälp av SHOW FULL TABLES-satsen eller genom att fråga informationsschema-tabellerna.
USE 'database_name';
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';
Använder informationsschema
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. Ta bort en vy
SQL tillåter oss att ta bort en befintlig vy. Vi kan radera eller släpp View med DROP-satsen.
Syntax:
DROP VIEW view_name;Exempel: I det här exemplet tar vi bort View MarksView.
DROP VIEW MarksView;3. Uppdatera en vydefinition
Om vi vill uppdatera befintliga data i vyn, använd UPPDATERA påstående.
UPDATE view_name
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];
Om du vill uppdatera vydefinitionen utan att påverka data, använd CREATE OR REPLACE VIEW-satsen. Låt oss till exempel lägga tillAgekolumn tillMarksView:
CREATE OR REPLACE VIEW view_name AS
SELECT column1 column2 ...
FROM table_name
WHERE condition;
Notera: Alla vyer kan inte uppdateras med UPDATE-satsen.
Regler för att uppdatera vyer i SQL:
Vissa villkor måste vara uppfyllda för att uppdatera en vy. Om något av dessa villkor är inte träffade vyn kan inte uppdateras.
- SELECT-satsen som används för att skapa vyn bör inte innehålla GROUP BY-sats eller BESTÄLL AV klausul.
- SELECT-satsen ska inte ha DISTINKT nyckelord.
- Vyn bör ha alla INTE NULL-värden.
- Vyn ska inte skapas med kapslade frågor eller komplexa frågor.
- Vyn ska skapas från en enda tabell. Om vyn skapas med hjälp av flera tabeller kommer vi inte att tillåtas att uppdatera vyn.
Avancerade tekniker med vyer
1. Uppdatera data genom vyer
Vi kan använda CREATE OR REPLACE VIEW-satsen för att lägga till eller ersätta fält från en vy. Om vi vill uppdatera vyn MarksView och lägga till fältet AGE i denna View from StudentMarks Table kan vi göra detta genom att:
Exempel:
CREATE OR REPLACE VIEW MarksView AS
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
Om vi hämtar all data från MarksView nu som:
SELECT * FROM MarksView;Produktion:
Namn | Adress | Märken | Åldras |
|---|---|---|---|
Hård | Kolkata | 90 | 19 |
Öva | Delhi | 80 | 19 |
Dhanraj | Bihar | 95 | 21 |
Ram | Rajasthan | 85 | 18 |
Vi kan infoga en rad i en vy på samma sätt som vi gör i en tabell. Vi kan använda SÄTT IN I SQL-sats för att infoga en rad i en vy. I exemplet nedan kommer vi att infoga en ny rad i View DetailsView som vi har skapat ovan i exemplet med "skapa vyer från en enda tabell".
Exempel:
INSERT INTO DetailsView(NAME ADDRESS)
VALUES('Suresh''Gurgaon');
Om vi hämtar all data från DetailsView nu som
SELECT * FROM DetailsView;Produktion:
Namn | Adress |
|---|---|
Hård | Kolkata |
Ashish samling java | Durgapur |
Öva | Delhi |
Dhanraj | Bihar |
Suresh | Gurgaon |
3. Ta bort en rad från en vy
Att ta bort rader från en vy är också lika enkelt som att ta bort rader från en tabell. Vi kan använda SQL-satsen DELETE för att ta bort rader från en vy. Om du också tar bort en rad från en vy raderas först raden från den faktiska tabellen och ändringen återspeglas sedan i vyn. I det här exemplet kommer vi att ta bort den sista raden från vyn DetailsView som vi precis lade till i exemplet ovan med att infoga rader.
Exempel:
DELETE FROM DetailsView
WHERE NAME='Suresh';
Om vi hämtar all data från DetailsView nu som
SELECT * FROM DetailsView;Produktion:
Namn | Adress |
|---|---|
Hård | Kolkata |
Ashish | Durgapur |
Öva | Delhi |
Dhanraj | Bihar |
4. MED KONTROLLOPTION Klausul
WITH CHECK OPTION-satsen i SQL är en mycket användbar sats för vyer. Det gäller en uppdateringsbar vy. Den används för att förhindra datamodifiering (med hjälp av INSERT eller UPDATE) om villkoret i WHERE-satsen i CREATE VIEW-satsen inte är uppfyllt.
Om vi har använt WITH CHECK OPTION-satsen i CREATE VIEW-satsen och om UPDATE- eller INSERT-satsen inte uppfyller villkoren kommer de att returnera ett fel. I exemplet nedan skapar vi en View SampleView från StudentDetails-tabellen med en WITH CHECK OPTION-sats.
Exempel:
CREATE VIEW SampleView AS
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;
Om vi i denna vy nu försöker infoga en ny rad med ett nullvärde i NAME-kolumnen så kommer det att ge ett fel eftersom vyn skapas med villkoret för NAME-kolumnen som NOT NULL. Till exempel även om vyn är uppdateringsbar är inte heller nedanstående fråga för den här vyn giltig:
INSERT INTO SampleView(S_ID)Skapa frågesport
VALUES(6);