Wat is een MySQL-weergave?
Een MySQL-view is gewoon een gewoon databaseobject dat bij correct gebruik de schrijvers van SQL-query's veel tijd kan besparen. Een weergave is een opgeslagen query waarnaar een gebruiker kan verwijzen, net als een tabel. Vaak zullen gebruikers dezelfde basisquery steeds opnieuw gebruiken om meerdere problemen op te lossen. Weergaven zijn een manier om die zoekopdracht snel op te slaan en er later naar te verwijzen.
Wat zijn de voordelen van het gebruik van weergaven?
Uitzichten hebben verschillende voordelen. Ten eerste verschijnen weergaven voor de MySQL-gebruiker net als een tabel. De SELECT-component kan op dezelfde manier verwijzen naar een weergave als naar een tabel. Een ander voordeel is dat wanneer de onderliggende tabellen waarnaar wordt verwezen door een weergave veranderen, de resultaten van de weergave ook veranderen. Een derde voordeel is dat een view zeer weinig ruimte inneemt op de server. De SQL-resultaten van de weergave worden elke keer dat deze wordt geopend berekend, dus ze worden pas op de server opgeslagen als ze worden geopend.
Tabellen voor deze oefening
Voor dit artikel wordt een database gemaakt met informatie over een fictief autoraceseizoen met drie coureurs, vier circuits en één race op elk circuit. In deze database zijn er vier tabellen.
- Stuurprogramma's
- Tracks
- Rassen
- Eindigt
De structuur voor de tabellen is zoals hieronder beschreven.
create table drivers
(
id int auto_increment,
name varchar(64) not null,
car_number int not null,
constraint drivers_pk
primary key (id)
);
create table tracks
(
id int auto_increment,
name varchar(64) not null,
location varchar(64) not null,
constraint track_pk
primary key (id)
);
create table races
(
id int auto_increment,
name varchar(64) not null,
track int not null,
distance int not null,
constraint races_pk
primary key (id)
);
create table finishes
(
id int auto_increment,
driver int not null,
race int not null,
position int not null,
constraint finishes_pk
primary key (id)
);
Stuurprogramma's
Nu, in onze volgende stap, zullen we drie chauffeurs en hun bedrijfsnummers in een tabel invoegen.
- Buddy Baker 28
- Dale Earnhardt Jr. 8
- Ricky Rudd 88
insert into drivers (name,car_number) values
('Buddy Baker',28),
('Dale Earnhardt Jr.',8),
('Ricky Rudd',88);
Onze resultaten laten nu de volgende uitvoer zien.
ID | Naam | Autonummer |
1 | Buddy Baker | 28 |
2 | Dale Earnhardt Jr. | 8 |
3 | Ricky Rudd | 88 |
Racebanen
Vervolgens voegen we vier circuits en hun locatie toe.
- Talladega Superspeedway - Lincoln, AL
- Daytona International Speedway - Daytona Beach, FL
- Indianapolis Motor Speedway - Speedway, IN
- Michigan International Speedway - Brooklyn, MI
insert into tracks (name,location) values
('Talladega Superspeedway','Lincoln, AL'),
('Daytona International Speedway','Daytona Beach, FL'),
('Indianapolis Motor Speedway','Speedway, IN'),
('Michigan International Speedway','Brooklyn, MI');
Onze resultaten laten nu de volgende uitvoer zien.
ID | Naam | Locatie |
1 | Talladega Superspeedway | Lincoln, AL |
2 | Daytona International Speedway | Daytona Beach, FL |
3 | Indianapolis Motor Speedway | Speedway, IN |
4 | Michigan International Speedway | Brooklyn, MI |
Rassen
Nu zijn er vier races, samen met de afstand voor elk, ingeschreven.
- Daytona 500, 2500
- Talladega 500,1500
- Brickyard 400,3, 400
- Michigan 400 ,4, 400
insert into races (name,track,distance) values
('Daytona 500',2,500),
('Talladega 500',1,500),
('Brickyard 400',3,400),
('Michigan 400',4,'400');
Onze resultaten laten nu de volgende uitvoer zien.
ID | Naam | Track | Afstand |
1 | Talladega 500 | 2 | 500 |
2 | Daytona 500 | 1 | 500 |
3 | Brickyard 400 | 3 | 400 |
4 | Michigan 400 | 4 | 400 |
Resultaten
Eindelijk zijn nu de tabellen voor het begin van het seizoen gemaakt.
In de eerste race op de Daytona 500:
- Ricky Rudd eindigt als eerste
- Dale Earnhardt Jr eindigt als tweede
- Buddy Baker wordt derde.
insert into finishes (driver, race, position) values
(1,1,3),
(2,1,2),
(3,1,1);
Gecompileerde gegevens
Eerste gegevensinvoer
Nu zijn er feitelijke gegevens om op te vragen. Als we een query uitvoeren om alle coureursresultaten te bekijken met de bijbehorende circuits en races, is het een beetje ingewikkeld omdat er meerdere joins zijn.
select d.name as driver,
r.name as race,
t.name as track,
t.location as location,
f.position as position
from finishes f
left join races r
on f.race = r.id
left join tracks t
on r.track = t.id
left join drivers d
on d.id = f.driver;
Onze resultaten laten nu de volgende output zien.
Stuurprogramma | Race | Track | Locatie | Positie |
Buddy Baker | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 3 |
Dale Earnhardt Jr. | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 2 |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Tweede gegevensinvoer
Als de tweede race, de Talladega 500, gegevens worden toegevoegd, kan de query opnieuw worden geschreven, hetzelfde als de eerdere query. In deze race wordt Dale Earnhardt eerste en Buddy Baker tweede.
insert into finishes (driver, race, position) values
(1,2,2),
(2,2,1),
(3,2,3);
De resultaten van de bovenstaande zoekopdracht zien er als volgt uit.
Stuurprogramma | Race | Track | Locatie | Positie |
Buddy Baker | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 3 |
Dale Earnhardt Jr. | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 2 |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Buddy Baker | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 2 |
Dale Earnhardt, Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Ricky Rudd | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 3 |
Weergave maken
Nu er meerdere races in de database staan, zijn er nieuwe manieren om naar de resultaten te kijken. Query's kunnen worden geschreven voor "Beste afwerking ” en “Meeste overwinningen .” Deze zoekopdrachten zouden allemaal beginnen met dezelfde onderliggende gegevens van wat coureurs op de positie van elke race hebben geëindigd. Om het proces van het ontwikkelen van deze query's te vereenvoudigen, kan een weergave worden gemaakt met de clausule "weergave maken of vervangen als". Deze clausule wordt gevolgd door de SQL die moet worden opgeslagen. In dit geval wordt het toegevoegd vóór de vorige zoekopdracht die we hierboven lieten zien.
create or replace view all_finishes as
select d.name as driver,
r.name as race,
t.name as track,
t.location as location,
f.position as position
from finishes f
left join races r
on f.race = r.id
left join tracks t
on r.track = t.id
left join drivers d
on d.id = f.driver;
Het resultaat is een krachtige functie van SQL. Dit resultaat is nu iets dat eruitziet als een tabel, maar zal veranderen wanneer nieuwe informatie wordt toegevoegd aan een onderliggende tabel. Laten we deze zoekopdracht uitvoeren.
select * from all_finishes;
Stuurprogramma | Race | Track | Locatie | Positie |
Buddy Baker | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 3 |
Dale Earnhardt Jr. | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 2 |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Buddy Baker | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 2 |
Dale Earnhardt, Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Ricky Rudd | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 3 |
De resultaten zijn identiek aan de laatste keer dat we deze zoekopdracht uitvoerden:
Het verschil is dat de weergave nu als een tabel kan worden opgevraagd. Een zoekopdracht die de winnaars van elke race laat zien.
select * from all_finishes where position = 1;
De zoekopdracht levert deze resultaten op.
Stuurprogramma | Race | Track | Locatie | Positie |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Dale Earnhardt, Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Er kan ook een query worden geschreven om de leider weer te geven op basis van het gemiddelde resultaat.
select avg(position) as finish,
driver
from all_finishes
group by driver
order by finish;
Wat laat zien dat Dale Earnhardt tot nu toe aan de leiding staat voor het seizoen:
Voltooien | Stuurprogramma |
1,5 | Dale Earnhardt, Jr. |
2.0 | Ricky Rudd |
2,5 | Buddy Baker |
Omdat weergaven kunnen verwijzen naar andere weergaven, kunnen met deze zoekopdrachten uitgebreidere weergaven worden gemaakt.
create view standings_leader as
select avg(position) as finish,
driver
from all_finishes
group by driver
order by finish;
De resultaten van de bovenstaande zoekopdracht zien er als volgt uit.
Voltooien | Stuurprogramma |
1,5 | Dale Earnhardt, Jr. |
2.0 | Ricky Rudd |
2,5 | Buddy Baker |
Evenals:
create view race_winners as
select * from all_finishes where position = 1;
Wat ons dezelfde resultaten oplevert.
Stuurprogramma | Race | Track | Locatie | Positie |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Dale Earnhardt, Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Gegevens toevoegen
Het meest krachtige deel van de weergaven is dat wanneer we meer gegevens toevoegen, zoals deze race-afwerkingen waarbij Buddy Baker de Brickyard 400 en de Michigan 400 wint, we gewoon onze opvattingen kunnen opvragen om dezelfde resultaten te krijgen.
insert into finishes (driver, race, position) values
(1,3,1),
(2,3,3),
(3,3,2);
insert into finishes (driver, race, position) values
(1,4,1),
(2,4,2),
(3,4,3);
Nu kunnen we alle afwerkingen met deze zoekopdracht zien.
select * from all_finishes;\
De resultaten van de bovenstaande zoekopdracht zien er als volgt uit.
Stuurprogramma | Race | Track | Locatie | Positie |
Buddy Baker | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 3 |
Dale Earnhardt Jr. | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 2 |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Buddy Baker | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 2 |
Dale Earnhardt Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Ricky Rudd | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 3 |
Buddy Baker | Brickyard 400 | Indianapolis Motor Speedway | Speedway, IN | 1 |
Dale Earnhardt Jr. | Brickyard 400 | Indianapolis Motor Speedway | Speedway, IN | 3 |
Ricky Rudd | Brickyard 400 | Indianapolis Motor Speedway | Speedway, IN | 2 |
Buddy Baker | Michigan 400 | Michigan International Speedway | Brooklyn, MI | 1 |
Dale Earnhardt Jr. | Michigan 400 | Michigan International Speedway | Brooklyn, MI | 2 |
Ricky Rudd | Michigan 400 | Michigan International Speedway | Brooklyn, MI | 3 |
We kunnen ook uitvoeren:
select * from race_winners;
Dat geeft ons:
Stuurprogramma | Race | Track | Locatie | Positie |
Ricky Rudd | Daytona 500 | Daytona International Speedway | Daytona Beach, FL | 1 |
Dale Earnhardt Jr. | Talladega 500 | Talladega Superspeedway | Lincoln, AL | 1 |
Buddy Baker | Brickyard 400 | Indianapolis Motor Speedway | Speedway, IN | 1 |
Buddy Baker | Michigan 400 | Michigan International Speedway | Brooklyn, MI | 1 |
Dit resulteert ook in de seriekampioen:
select * from standings_leader;
Wat resulteert in:
Voltooien | Stuurprogramma |
2 | Buddy Baker |
2 | Dale Earnhardt, Jr. |
2 | Ricky Rudd |
Conclusie
Wanneer we een zoekopdracht opslaan in onze databaseserver (meer specifiek in de databasecatalogus) en deze een naam geven, wordt deze nieuw benoemde zoekopdracht een databaseweergave genoemd, of, eenvoudiger, een weergave. MySQL-weergaven zijn een krachtige manier om vitale en herbruikbare zoekopdrachten op te slaan die ons kunnen helpen het ophalen van belangrijke informatie te versnellen. Omdat deze opgeslagen weergaven kunnen verwijzen naar andere weergaven, kunnen met deze substantiële zoekopdrachten meer gedetailleerde weergaven worden gemaakt.
Beoordeel ons!
We zijn er trots op de meest behulpzame mensen in Hosting™ te zijn!
Onze ondersteuningsteams zijn gevuld met ervaren Linux-technici en getalenteerde systeembeheerders die een grondige kennis hebben van meerdere webhostingtechnologieën, vooral de technologieën die in dit artikel worden besproken.
Mocht u vragen hebben over deze informatie, dan zijn wij altijd beschikbaar om al uw vragen met betrekking tot dit artikel te beantwoorden, 24 uur per dag, 7 dagen per week 365 dagen per jaar.
Als u een volledig beheerde VPS-server, Cloud Dedicated, VMWare Private Cloud, Private Parent-server, Managed Cloud Servers of een Dedicated server-eigenaar bent en u zich niet op uw gemak voelt bij het uitvoeren van een van de beschreven stappen, is bereikbaar via telefoon @800.580.4985, een chat- of supportticket om u bij dit proces te helpen.