Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar e usar exibições do MySQL

O que é uma visualização do MySQL?


Uma visão MySQL é simplesmente um objeto de banco de dados comum que pode economizar muito tempo dos escritores de consulta SQL quando usado corretamente. Uma exibição é uma consulta armazenada que um usuário pode fazer referência como uma tabela. Muitas vezes, os usuários se encontram usando a mesma consulta base repetidamente para resolver vários problemas. As visualizações são uma maneira de salvar rapidamente essa consulta e fazer referência a ela posteriormente.

Quais são as vantagens de usar visualizações?


As vistas têm várias vantagens. Primeiro, as visualizações aparecem para o usuário do MySQL como uma tabela. A cláusula SELECT pode referenciar uma visão exatamente como faria com uma tabela. Outra vantagem é que quando as tabelas subjacentes referenciadas por uma visão mudam, os resultados da visão também mudam. Uma terceira vantagem é que uma visão ocupa muito pouco espaço no servidor. Os resultados SQL da view são calculados toda vez que ela é acessada, então eles não são armazenados no servidor até serem acessados.

Tabelas para este exercício


Para este artigo, será criado um banco de dados contendo informações sobre uma temporada fictícia de corridas de carros com três pilotos, quatro pistas e uma corrida em cada pista. Neste banco de dados, existem quatro tabelas.
  • Motoristas
  • Faixas
  • Corridas
  • Termina    

A estrutura das tabelas é a descrita abaixo.
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)
);

Motoristas


Agora, em nossa próxima etapa, inseriremos três motoristas e seus números de carros em uma tabela.
  • 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);

Nossos resultados agora mostrarão a seguinte saída.
ID Nome Número do carro
1 Buddy Baker 28
2 Dale Earnhardt Jr. 8
3 Ricky Rudd 88

Pistas de corrida


Em seguida, adicionamos quatro pistas de corrida e sua localização.
  • Talladega Superspeedway - Lincoln, AL
  • Daytona International Speedway - Daytona Beach, Flórida
  • Autódromo de Indianápolis - Autódromo, 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');

Nossos resultados agora mostrarão a seguinte saída.
ID Nome Local
1 Talladega Superspeedway Lincoln, AL
2 Daytona International Speedway Daytona Beach, Flórida
3 Autódromo de Indianápolis Autódromo, IN
4 Autódromo Internacional de Michigan Brooklyn, MI

Corridas


Agora, quatro corridas, juntamente com a distância de cada uma, são inscritas.
  • Daytona 500,2.500
  • Talladega 500.1.500
  • 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');

Nossos resultados agora mostrarão a seguinte saída.
ID Nome Rastrear Distância
1 Talladega 500 2 500
2 Daytona 500 1 500
3 Brickyard 400 3 400
4 Michigan 400 4 400

Resultados


Finalmente, as tabelas para o início da temporada agora são criadas.

Na primeira corrida no Daytona 500:
  • Ricky Rudd termina em primeiro
  • Dale Earnhardt Jr termina em segundo 
  • Buddy Baker termina em terceiro.
insert into finishes (driver, race, position) values
  (1,1,3),
  (2,1,2),
  (3,1,1);

Dados compilados

Primeira entrada de dados


Agora há dados reais para consultar. Se executarmos uma consulta para ver todos os resultados dos pilotos com suas pistas e corridas correspondentes, é um pouco complicado, pois há várias junções.
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;

Nossos resultados agora mostram a seguinte saída.
Driver Corrida Rastrear Local Posição
Buddy Baker Daytona 500 Daytona International Speedway Daytona Beach, Flórida 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Daytona Beach, Flórida 2
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 1

Segunda entrada de dados


À medida que a segunda corrida, o Talladega 500, os dados são adicionados, a consulta pode ser escrita novamente, da mesma forma que a consulta anterior. Nesta corrida, Dale Earnhardt vem em primeiro e Buddy Baker em segundo.
insert into finishes (driver, race, position) values
  (1,2,2),
  (2,2,1),
  (3,2,3);

Os resultados da consulta acima ficariam assim.
Driver Corrida Rastrear Local Posição
Buddy Baker Daytona 500 Daytona International Speedway Daytona Beach, Flórida 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Daytona Beach, Flórida 2
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 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

Criar visualização


Agora que há várias corridas no banco de dados, há novas maneiras de ver os resultados. As consultas podem ser escritas para “Melhor acabamento ” e “A maioria das vitórias .” Todas essas consultas começariam com os mesmos dados subjacentes de quais pilotos terminaram na posição de cada corrida. Para simplificar o processo de desenvolvimento dessas consultas, uma visualização pode ser criada com a cláusula “criar ou substituir visualização como”. Esta cláusula é seguida pelo SQL que deve ser salvo. Nesse caso, ele é adicionado antes da consulta anterior que mostramos acima.
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;

O resultado é um poderoso recurso do SQL. Esse resultado agora é algo que se parece com uma tabela, mas mudará quando novas informações forem adicionadas a qualquer tabela subjacente. Vamos executar esta consulta.
select * from all_finishes;
Driver Corrida Rastrear Local Posição
Buddy Baker Daytona 500 Daytona International Speedway Daytona Beach, Flórida 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Daytona Beach, Flórida 2
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 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

Os resultados são idênticos à última vez que executamos esta consulta:

A diferença é que agora a visão pode ser consultada como uma tabela. Uma consulta que mostra os vencedores de cada corrida.
select * from all_finishes where position = 1;

A consulta fornece esses resultados.
Driver Corrida Rastrear Local Posição
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Uma consulta também pode ser escrita para exibir o líder com base no acabamento médio.
select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

O que mostra Dale Earnhardt na liderança até agora para a temporada:
Concluir Driver
1,5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

Como as visualizações podem fazer referência a outras visualizações, visualizações mais extensas podem ser criadas com essas consultas.
create view standings_leader as
select avg(position) as finish,
  driver
from all_finishes
  group by driver
     order by finish;

Os resultados da consulta acima ficariam assim.
Concluir Driver
1,5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

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

O que nos fornece os mesmos resultados.
Driver Corrida Rastrear Local Posição
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Adicionando dados


A parte mais potente das visualizações é que, quando adicionamos mais dados como essas corridas terminadas em que Buddy Baker vence o Brickyard 400 e o Michigan 400, podemos apenas consultar nossas visualizações para obter os mesmos 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);

Agora podemos ver todos os acabamentos com esta consulta.
select * from all_finishes;\

Os resultados da consulta acima ficariam assim.
Driver Corrida Rastrear Local Posição
Buddy Baker Daytona 500 Daytona International Speedway Daytona Beach, Flórida 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Daytona Beach, Flórida 2
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 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 Autódromo de Indianápolis Autódromo, IN 1
Dale Earnhardt Jr. Brickyard 400 Autódromo de Indianápolis Autódromo, IN 3
Ricky Rudd Brickyard 400 Autódromo de Indianápolis Autódromo, IN 2
Buddy Baker Michigan 400 Autódromo Internacional de Michigan Brooklyn, MI 1
Dale Earnhardt Jr. Michigan 400 Autódromo Internacional de Michigan Brooklyn, MI 2
Ricky Rudd Michigan 400 Autódromo Internacional de Michigan Brooklyn, MI 3

Também podemos executar:
select * from race_winners;

O que nos dá:
Driver Corrida Rastrear Local Posição
Ricky Rudd Daytona 500 Daytona International Speedway Daytona Beach, Flórida 1
Dale Earnhardt Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Buddy Baker Brickyard 400 Autódromo de Indianápolis Autódromo, IN 1
Buddy Baker Michigan 400 Autódromo Internacional de Michigan Brooklyn, MI 1

Além disso, isso resulta no campeão da série:
select * from standings_leader;

O que resulta em:
Concluir Driver
2 Buddy Baker
2 Dale Earnhardt, Jr.
2 Ricky Rudd

Conclusão


Quando salvamos uma consulta em nosso servidor de banco de dados (mais especificamente no catálogo de banco de dados) e damos um nome a ela, essa consulta recém-nomeada é chamada de exibição de banco de dados ou, mais simplesmente, de exibição. As visualizações do MySQL são uma maneira poderosa de salvar consultas vitais e reutilizáveis ​​que podem nos ajudar a acelerar a recuperação de informações importantes. Como essas visualizações salvas podem fazer referência a outras visualizações, visualizações mais detalhadas podem ser criadas com essas consultas substanciais.

Avalie-nos!


Nós nos orgulhamos de ser os humanos mais úteis em hospedagem™!

Nossas equipes de suporte estão repletas de técnicos Linux experientes e administradores de sistema talentosos que têm conhecimento profundo de várias tecnologias de hospedagem na web, especialmente aquelas discutidas neste artigo.

Se você tiver alguma dúvida sobre essas informações, estamos sempre disponíveis para responder a quaisquer perguntas relacionadas a este artigo, 24 horas por dia, 7 dias por semana, 365 dias por ano.

Se você for um servidor VPS totalmente gerenciado, Dedicado em Nuvem, Nuvem Privada VMWare, Servidor Pai Privado, Servidores em Nuvem Gerenciado ou proprietário de um servidor Dedicado e não se sentir à vontade para executar qualquer uma das etapas descritas, nós pode ser contatado pelo telefone @800.580.4985, um chat ou ticket de suporte para ajudá-lo nesse processo.