Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Membuat dan Menggunakan Tampilan MySQL

Apa itu Tampilan MySQL?

Tampilan MySQL hanyalah objek database biasa yang dapat menghemat banyak waktu bagi penulis kueri SQL bila digunakan dengan benar. Tampilan adalah kueri tersimpan yang dapat dirujuk pengguna seperti tabel. Banyak kali pengguna akan menemukan diri mereka menggunakan kueri dasar yang sama berulang-ulang untuk memecahkan banyak masalah. Tampilan adalah cara cepat menyimpan kueri itu dan merujuknya nanti.

Apa Keuntungan Menggunakan Tampilan?

Tampilan memiliki beberapa keunggulan. Pertama, tampilan muncul ke pengguna MySQL seperti tabel. Klausa SELECT dapat mereferensikan tampilan persis seperti tabel. Keuntungan lain adalah ketika tabel yang mendasari yang direferensikan oleh tampilan berubah, hasil tampilan juga berubah. Keuntungan ketiga adalah tampilan hanya membutuhkan sedikit ruang di server. Hasil SQL tampilan dihitung setiap kali diakses, sehingga tidak disimpan di server sampai diakses.

Tabel untuk Latihan ini

Untuk artikel ini, database akan dibuat berisi informasi tentang musim balap mobil fiksi yang menampilkan tiga pembalap, empat trek, dan satu balapan di setiap trek. Dalam database ini, ada empat tabel.

  • Pengemudi
  • Trek
  • Balapan
  • Selesai    

Struktur tabel seperti yang dijelaskan di bawah ini.

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

Pengemudi

Sekarang, pada langkah selanjutnya, kita akan memasukkan tiga pengemudi dan nomor mobil mereka ke dalam tabel.

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

Hasil kami sekarang akan menampilkan output berikut.

ID Nama Nomor Mobil
1 Buddy Baker 28
2 Dale Earnhardt Jr. 8
3 Ricky Rudd 88

Lintasan Balap

Selanjutnya, kami menambahkan empat arena pacuan kuda dan lokasinya.

  • Talladega Superspeedway - Lincoln, AL
  • Daytona International Speedway - Pantai Daytona, 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');

Hasil kami sekarang akan menampilkan output berikut.

ID Nama Lokasi
1 Talladega Superspeedway Lincoln, AL
2 Daytona International Speedway Pantai Daytona, FL
3 Jalur Balap Motor Indianapolis Speedway, IN
4 Michigan International Speedway Brooklyn, MI

Balapan

Sekarang, empat balapan, bersama dengan jarak untuk masing-masing, diikutsertakan.

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

Hasil kami sekarang akan menampilkan output berikut.

ID Nama Lacak Jarak
1 Talladega 500 2 500
2 Daytona 500 1 500
3 Brickyard 400 3 400
4 Michigan 400 4 400

Hasil

Akhirnya, tabel untuk awal musim sekarang dibuat.

Pada balapan pertama di Daytona 500:

  • Ricky Rudd finis pertama
  • Dale Earnhardt Jr finis kedua 
  • Buddy Baker finis ketiga.
insert into finishes (driver, race, position) values
  (1,1,3),
  (2,1,2),
  (3,1,1);

Data Terkompilasi

Masukan Data Pertama

Sekarang ada data aktual untuk kueri. Jika kami menjalankan kueri untuk melihat semua hasil pembalap dengan trek dan balapan yang sesuai, ini agak rumit karena ada beberapa gabungan.

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;

Hasil kami sekarang menunjukkan output berikut.

Driver Balapan Lacak Lokasi Posisi
Buddy Baker Daytona 500 Daytona International Speedway Pantai Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Pantai Daytona, FL 2
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, FL 1

Masukan Data Kedua

Saat balapan kedua, Talladega 500, data ditambahkan, kueri dapat ditulis lagi, sama seperti kueri sebelumnya. Dalam perlombaan ini, Dale Earnhardt berada di urutan pertama, dan Buddy Baker berada di urutan kedua.

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

Hasil query di atas akan terlihat seperti ini.

Driver Balapan Lacak Lokasi Posisi
Buddy Baker Daytona 500 Daytona International Speedway Pantai Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Pantai Daytona, FL 2
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, 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

Buat Tampilan

Sekarang ada banyak balapan di database, ada cara baru untuk melihat hasilnya. Kueri dapat ditulis untuk “Penyelesaian Terbaik ” dan “Kemenangan Terbanyak .” Kueri ini semuanya akan dimulai dengan data dasar yang sama tentang apa yang diselesaikan pembalap di setiap posisi balapan. Untuk menyederhanakan proses pengembangan kueri ini, tampilan dapat dibuat dengan klausa "buat atau ganti tampilan sebagai". Klausa ini diikuti oleh SQL yang akan disimpan. Dalam hal ini, itu ditambahkan sebelum kueri sebelumnya yang kami tunjukkan di atas.

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;

Hasilnya adalah fitur yang kuat dari SQL. Hasil ini sekarang menjadi sesuatu yang tampak seperti tabel tetapi akan berubah ketika informasi baru ditambahkan ke tabel yang mendasarinya. Ayo jalankan kueri ini.

select * from all_finishes;
Driver Balapan Lacak Lokasi Posisi
Buddy Baker Daytona 500 Daytona International Speedway Pantai Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Pantai Daytona, FL 2
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, 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

Hasilnya identik dengan terakhir kali kami menjalankan kueri ini:

Perbedaannya adalah sekarang tampilan dapat di-query seperti tabel. Kueri yang menunjukkan pemenang setiap balapan.

select * from all_finishes where position = 1;

Kueri memberikan hasil ini.

Driver Balapan Lacak Lokasi Posisi
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, FL 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Kueri juga dapat ditulis untuk menampilkan pemimpin berdasarkan penyelesaian rata-rata.

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

Yang menunjukkan Dale Earnhardt memimpin sejauh ini untuk musim ini:

Selesai Driver
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

Karena tampilan dapat mereferensikan tampilan lain, tampilan yang lebih luas dapat dibuat dengan kueri ini.

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

Hasil query di atas akan terlihat seperti ini.

Selesai Driver
1.5 Dale Earnhardt, Jr.
2.0 Ricky Rudd
2.5 Buddy Baker

Serta:

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

Yang memberi kami hasil yang sama.

Driver Balapan Lacak Lokasi Posisi
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, FL 1
Dale Earnhardt, Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1

Menambahkan Data

Bagian yang paling kuat dari tampilan adalah ketika kita menambahkan lebih banyak data seperti balapan ini selesai di mana Buddy Baker memenangkan Brickyard 400 dan Michigan 400, kita bisa menanyakan pandangan kita untuk mendapatkan hasil yang sama.

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

Sekarang kita bisa melihat semua selesai dengan kueri ini.

select * from all_finishes;\

Hasil query di atas akan terlihat seperti ini.

Driver Balapan Lacak Lokasi Posisi
Buddy Baker Daytona 500 Daytona International Speedway Pantai Daytona, FL 3
Dale Earnhardt Jr. Daytona 500 Daytona International Speedway Pantai Daytona, FL 2
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, 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 Jalur Balap Motor Indianapolis Speedway, IN 1
Dale Earnhardt Jr. Brickyard 400 Jalur Balap Motor Indianapolis Speedway, IN 3
Ricky Rudd Brickyard 400 Jalur Balap Motor Indianapolis 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

Kami juga dapat menjalankan:

select * from race_winners;

Yang memberi kita:

Driver Balapan Lacak Lokasi Posisi
Ricky Rudd Daytona 500 Daytona International Speedway Pantai Daytona, FL 1
Dale Earnhardt Jr. Talladega 500 Talladega Superspeedway Lincoln, AL 1
Buddy Baker Brickyard 400 Jalur Balap Motor Indianapolis Speedway, IN 1
Buddy Baker Michigan 400 Michigan International Speedway Brooklyn, MI 1

Juga, ini menghasilkan juara seri:

select * from standings_leader;

Yang menghasilkan:

Selesai Driver
2 Buddy Baker
2 Dale Earnhardt, Jr.
2 Ricky Rudd

Kesimpulan

Saat kami menyimpan kueri di server basis data kami (lebih khusus lagi di katalog basis data) dan memberinya nama, kueri yang baru dinamai ini disebut tampilan basis data, atau, lebih sederhana, tampilan. Tampilan MySQL adalah cara yang ampuh untuk menyimpan kueri penting dan dapat digunakan kembali yang dapat membantu kami mempercepat pengambilan informasi penting. Karena tampilan simpan ini dapat mereferensikan tampilan lain, tampilan yang lebih detail dapat dibuat dengan kueri substansial ini.

Beri Nilai Kami!

Kami bangga menjadi Manusia Paling Bermanfaat di Hosting™!

Tim Dukungan kami diisi dengan teknisi Linux berpengalaman dan administrator sistem berbakat yang memiliki pengetahuan mendalam tentang berbagai teknologi hosting web, terutama yang dibahas dalam artikel ini.

Jika Anda memiliki pertanyaan tentang informasi ini, kami selalu tersedia untuk menjawab pertanyaan apa pun dengan masalah yang terkait dengan artikel ini, 24 jam sehari, 7 hari seminggu, 365 hari setahun.

Jika Anda adalah server VPS yang Dikelola Sepenuhnya, Cloud Dedicated, VMWare Private Cloud, server Private Parent, Server Cloud Terkelola, atau pemilik server Dedicated dan Anda tidak nyaman melakukan salah satu langkah yang diuraikan, kami dapat dihubungi melalui telepon @800.580.4985, chat atau tiket dukungan untuk membantu Anda dalam proses ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pesan tabel MySQL dengan dua kolom

  2. mysql pilih int sebagai mata uang atau konversi int ke format mata uang?

  3. Bagaimana mengelola database MySQL, pengguna, dan tabel dari baris perintah

  4. Bagaimana Fungsi REGEX_REPLACE() Bekerja di MySQL

  5. Pencarian Teks Lengkap dengan InnoDB