sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear y usar vistas MySQL

¿Qué es una vista MySQL?

Una vista de MySQL es simplemente un objeto de base de datos ordinario que puede ahorrar mucho tiempo a los escritores de consultas SQL cuando se usa correctamente. Una vista es una consulta almacenada a la que un usuario puede hacer referencia como una tabla. Muchas veces los usuarios se encontrarán usando la misma consulta base una y otra vez para resolver múltiples problemas. Las vistas son una forma de guardar rápidamente esa consulta y hacer referencia a ella más tarde.

¿Cuáles son las ventajas de usar vistas?

Las vistas tienen varias ventajas. Primero, las vistas aparecen para el usuario de MySQL como una tabla. La cláusula SELECT puede hacer referencia a una vista exactamente como lo haría con una tabla. Otra ventaja es que cuando cambian las tablas subyacentes a las que hace referencia una vista, los resultados de la vista también cambian. Una tercera ventaja es que una vista ocupa muy poco espacio en el servidor. Los resultados SQL de la vista se calculan cada vez que se accede a ella, por lo que no se almacenan en el servidor hasta que se accede a ellos.

Tablas para este ejercicio

Para este artículo, se creará una base de datos que contenga información sobre una temporada ficticia de carreras de autos con tres pilotos, cuatro pistas y una carrera en cada pista. En esta base de datos hay cuatro tablas.

  • Conductores
  • Pistas
  • Carreras
  • Acabados    

La estructura de las tablas se describe a continuación.

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

Conductores

Ahora, en nuestro próximo paso, insertaremos tres conductores y sus números de auto en una tabla.

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

Nuestros resultados ahora mostrarán el siguiente resultado.

ID Nombre Número de coche
1 Buddy Baker 28
2 Dale Earnhardt Jr. 8
3 Ricky Rudd 88

Pistas de carreras

A continuación, agregamos cuatro pistas de carreras y su ubicación.

  • Pista de carreras de Talladega - Lincoln, AL
  • Autopista internacional de Daytona - Daytona Beach, Florida
  • Pista de carreras de Indianápolis - Speedway, IN
  • Pista de carreras internacional de Michigan - 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');

Nuestros resultados ahora mostrarán el siguiente resultado.

ID Nombre Ubicación
1 Superpista de Talladega Lincoln, AL
2 Autopista Internacional de Daytona Daytona Beach, FL
3 Pista de carreras de Indianápolis Speedway, IN
4 Michigan International Speedway Brooklyn, MI

Carreras

Ahora, se ingresan cuatro carreras, junto con la distancia de cada una.

  • 500 Millas de Daytona, 2500
  • Talladega 500,1,500
  • Ladrillera 400,3, 400
  • Míchigan 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');

Nuestros resultados ahora mostrarán el siguiente resultado.

ID Nombre Rastrear Distancia
1 Talladega 500 2 500
2 500 Millas de Daytona 1 500
3 Ladrillera 400 3 400
4 Michigan 400 4 400

Resultados

Finalmente, ya están creadas las tablas para el comienzo de la temporada.

En la primera carrera de las 500 Millas de Daytona:

  • Ricky Rudd termina primero
  • Dale Earnhardt Jr finaliza segundo 
  • Buddy Baker termina tercero.
insert into finishes (driver, race, position) values
  (1,1,3),
  (2,1,2),
  (3,1,1);

Datos compilados

Primera entrada de datos

Ahora hay datos reales para consultar. Si ejecutamos una consulta para ver todos los resultados de los pilotos con sus correspondientes pistas y carreras, es un poco complicado ya que hay varias combinaciones.

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;

Nuestros resultados ahora muestran el siguiente resultado.

Driver Carrera Rastrear Ubicación Posición
Buddy Baker 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 3
Dale Earnhardt Jr. 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 2
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 1

Segunda entrada de datos

A medida que se agregan los datos de la segunda carrera, las 500 Millas de Talladega, la consulta podría volver a escribirse, igual que la consulta anterior. En esta carrera, Dale Earnhardt llega primero y Buddy Baker llega segundo.

insert into finishes (driver, race, position) values
  (1,2,2),
  (2,2,1),
  (3,2,3);

Los resultados de la consulta anterior se verían así.

Controlador Carrera Rastrear Ubicación Posición
Buddy Baker 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 3
Dale Earnhardt Jr. 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 2
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 1
Buddy Baker Talladega 500 Superpista de Talladega Lincoln, AL 2
Dale Earnhardt, Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1
Ricky Rudd Talladega 500 Superpista de Talladega Lincoln, AL 3

Crear vista

Ahora que hay varias carreras en la base de datos, hay nuevas formas de ver los resultados. Se pueden escribir consultas para "Mejor acabado ” y “Más victorias .” Todas estas consultas comenzarían con los mismos datos subyacentes de qué pilotos terminaron en la posición de cada carrera. Para simplificar el proceso de desarrollo de estas consultas, se puede crear una vista con la cláusula "crear o reemplazar vista como". Esta cláusula va seguida del SQL que se va a guardar. En este caso, se añade antes de la consulta anterior que mostramos arriba.

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;

El resultado es una poderosa característica de SQL. Este resultado ahora es algo que parece una tabla, pero cambiará cuando se agregue nueva información a cualquier tabla subyacente. Ejecutemos esta consulta.

select * from all_finishes;
Driver Carrera Rastrear Ubicación Posición
Buddy Baker 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 3
Dale Earnhardt Jr. 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 2
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 1
Buddy Baker Talladega 500 Superpista de Talladega Lincoln, AL 2
Dale Earnhardt, Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1
Ricky Rudd Talladega 500 Superpista de Talladega Lincoln, AL 3

Los resultados son idénticos a la última vez que ejecutamos esta consulta:

La diferencia es que ahora la vista se puede consultar como una tabla. Una consulta que muestra los ganadores de cada carrera.

select * from all_finishes where position = 1;

La consulta proporciona estos resultados.

Driver Carrera Rastrear Ubicación Posición
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 1
Dale Earnhardt, Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1

También se puede escribir una consulta para mostrar el líder en función del promedio de finalización.

select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

Lo que muestra a Dale Earnhardt a la cabeza en lo que va de temporada:

Finalizar Controlador
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

Debido a que las vistas pueden hacer referencia a otras vistas, se pueden crear vistas más extensas con estas consultas.

create view standings_leader as
select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

Los resultados de la consulta anterior se verían así.

Finalizar Controlador
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

Así como:

create view race_winners as
select * from all_finishes where position = 1;

Lo que nos proporciona los mismos resultados.

Driver Carrera Rastrear Ubicación Posición
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 1
Dale Earnhardt, Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1

Adición de datos

La parte más potente de las vistas es que cuando agregamos más datos como estos finales de carrera donde Buddy Baker gana la Brickyard 400 y la Michigan 400, podemos simplemente consultar nuestras vistas para obtener los mismos resultados.

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

Ahora podemos ver todos los acabados con esta consulta.

select * from all_finishes;\

Los resultados de la consulta anterior se verían así.

Driver Carrera Rastrear Ubicación Posición
Buddy Baker 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 3
Dale Earnhardt Jr. 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 2
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, FL 1
Buddy Baker Talladega 500 Superpista de Talladega Lincoln, AL 2
Dale Earnhardt Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1
Ricky Rudd Talladega 500 Superpista de Talladega Lincoln, AL 3
Buddy Baker Ladrillera 400 Pista de carreras de Indianápolis Speedway, IN 1
Dale Earnhardt Jr. Ladrillera 400 Pista de carreras de Indianápolis Speedway, IN 3
Ricky Rudd Ladrillera 400 Pista de carreras de Indianápolis 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

También podemos ejecutar:

select * from race_winners;

Lo que nos da:

Driver Carrera Rastrear Ubicación Posición
Ricky Rudd 500 Millas de Daytona Autopista Internacional de Daytona Daytona Beach, Florida 1
Dale Earnhardt Jr. Talladega 500 Superpista de Talladega Lincoln, AL 1
Buddy Baker Ladrillera 400 Pista de carreras de Indianápolis Speedway, IN 1
Buddy Baker Michigan 400 Michigan International Speedway Brooklyn, MI 1

Además, esto resulta en el campeón de la serie:

select * from standings_leader;

Lo que resulta en:

Finalizar Controlador
2 Buddy Baker
2 Dale Earnhardt, Jr.
2 Ricky Rudd

Conclusión

Cuando guardamos una consulta en nuestro servidor de base de datos (más específicamente en el catálogo de la base de datos) y le damos un nombre, esta consulta recién nombrada se denomina vista de base de datos o, más simplemente, vista. MySQL Views es una forma poderosa de guardar consultas vitales y reutilizables que pueden ayudarnos a acelerar la recuperación de información importante. Debido a que estas vistas guardadas pueden hacer referencia a otras vistas, se pueden crear vistas más detalladas con estas consultas sustanciales.

¡Califícanos!

¡Nos enorgullecemos de ser los seres humanos más serviciales en Hosting™!

Nuestros equipos de soporte están compuestos por técnicos experimentados en Linux y administradores de sistemas talentosos que tienen un conocimiento profundo de múltiples tecnologías de alojamiento web, especialmente las que se analizan en este artículo.

Si tiene alguna pregunta con respecto a esta información, siempre estamos disponibles para responder cualquier consulta con temas relacionados con este artículo, las 24 horas del día, los 7 días de la semana, los 365 días del año.

Si usted es un servidor VPS totalmente administrado, dedicado en la nube, nube privada de VMWare, servidor principal privado, servidores en la nube administrados o propietario de un servidor dedicado y no se siente cómodo con la realización de cualquiera de los pasos descritos, le se puede contactar por teléfono al 800.580.4985, un chat o un ticket de soporte para ayudarlo con este proceso.