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

Memahami Tampilan dalam SQL

Oleh Manoj Debnath

Tabel dalam database SQL mungkin berisi sejumlah besar data, tetapi tidak selalu dalam format yang berguna untuk segera digunakan. Volume data harus disaring berdasarkan beberapa kriteria tertentu untuk penggunaan yang efisien. Karena alasan keamanan, kami mungkin ingin membuat publik hanya sejumlah data tertentu sementara sisanya mungkin dapat diakses oleh pengguna yang memiliki hak istimewa. Operasi SQL DML dapat diperluas dan digunakan untuk memfilter satu atau beberapa tabel menggunakan ekspresi kueri yang kompleks. Memanfaatkan ide tersebut, kita dapat membuat tabel virtual dari tabel dasar persisten menggunakan SQL yang akan berisi data persis yang kita butuhkan. Inilah alasan standar SQL:2006 memperkenalkan penggunaan tabel tampilan, atau tampilan. Definisi tampilan atau tabel virtual ada sebagai objek skema. Artikel ini memperkenalkan konsep view dalam SQL, cara kerjanya dan menunjukkan bagaimana penerapannya dengan beberapa contoh.

Pengantar Tampilan SQL

Tampilan SQL tidak lain adalah tabel virtual yang berada di memori yang berasal dari satu atau lebih tabel dasar. Tabel virtual berarti tupel dalam tampilan tidak memiliki keberadaan fisik dan tidak disimpan ke dalam database. Tupel seperti data sementara yang dibuat sebagai hasil dari kueri SQL yang biasanya menarik data yang difilter dari satu atau lebih tabel dasar. Akibatnya, ada batasan pada jenis operasi yang dapat diterapkan ke tabel tampilan. Misalnya, operasi pembaruan tidak dapat diterapkan ke semua jenis tampilan, tetapi tidak memiliki batasan untuk menerapkan kueri SQL di atasnya.

Contoh di bawah ini diuji dengan database MySQL. Mulailah dengan membuat beberapa tabel:

perusahaan_saya basis data:

CREATE DATABASE my_company;

CREATE TABLE Employee(
    empId INT(11) UNSIGNED CHECK (empId > 0),
    empName VARCHAR(20),
    birthDate DATE,
    address TEXT(128),
    gender VARCHAR(1),
    salary DECIMAL(15,2),
    managerId INT(11) UNSIGNED,
    deptId INT(11) UNSIGNED,
    PRIMARY KEY(empId)
);
 
CREATE TABLE Department(
    deptId INT(11) UNSIGNED CHECK (empId > 0),
    deptName VARCHAR(20),
    deptMgrId INT(11) UNSIGNED,
    mgrStartDate DATE,
    PRIMARY KEY(deptId)
);

CREATE TABLE Project(
    projId INT(11) UNSIGNED CHECK (empId > 0),
    projName VARCHAR(20),
    projLocation TEXT(128),
    deptId INT(11) UNSIGNED,
    PRIMARY KEY(projId)
);
 
CREATE TABLE EmpWorksOnProj(
    empId INT(11) UNSIGNED,
    projId INT(11) UNSIGNED,
    hoursWorked DECIMAL(4,2)
);  
 
ALTER TABLE Employee ADD CONSTRAINT fk_emp_mgr FOREIGN KEY(managerId) REFERENCES Employee(empId);
ALTER TABLE Employee ADD CONSTRAINT fk_emp_dept FOREIGN KEY(deptId) REFERENCES Department(deptId);
ALTER TABLE Department ADD CONSTRAINT fk_dept_mgr FOREIGN KEY(deptMgrId) REFERENCES Employee(empId);
ALTER TABLE Project ADD CONSTRAINT fk_proj_dept FOREIGN KEY(deptId) REFERENCES Department(deptId);

Tampilan dapat dianggap sebagai tabel referensi, dan kita dapat menggunakannya sesering yang kita inginkan meskipun mungkin tidak ada secara fisik. Misalnya, kami mungkin sering perlu merujuk ke perusahaan_saya database dan temukan Karyawan dan Proyek informasi. Perhatikan bahwa ada banyak ke banyak hubungan antara Karyawan dan Proyek karena satu orang dapat mengerjakan banyak proyek dan juga satu proyek memiliki banyak karyawan. Oleh karena itu, alih-alih menentukan gabungan tiga tabel:Karyawan , EmpWorksOnProj , dan Proyek setiap kali kami membutuhkan informasi kolaboratif dan mengeluarkan kueri, kami mendefinisikan tampilan yang ditentukan sebagai hasil gabungan di antara tabel-tabel ini. Tampilan membentuk tabel virtual yang dibuat dari hasil kueri. Keuntungannya adalah kueri sekarang dapat mengambil dari tabel hasil tunggal daripada harus mengambil dari tiga tabel yang digabungkan. Kumpulan tabel:Karyawan , Proyek , Departemen dll. sehingga membentuk tabel dasar atau tabel pendefinisian tampilan.

Mari kita buat beberapa tampilan berdasarkan skema yang diberikan di atas.

CREATE VIEW V1
AS
SELECT
   empName, projName, hoursWorked
FROM
   Employee, Project, EmpWorksOnProj
WHERE
   Employee.empId=EmpWorksOnProj.empId
AND
   Project.projId=EmpWorksOnProj.projId;
 

Cara menentukan kueri SQL pada tampilan atau tabel virtual sama dengan menentukan kueri yang melibatkan tabel dasar. Anda dapat menggunakan SQL SELECT pada tampilan untuk mendapatkan data sebagai berikut:

PILIH * DARI V1;

NamaEmp

ProjName

Jam Kerja

Miki Tikus

ClubHouse

6.50

Donal Bebek

Bertani

7.0

Berikut ini membuat tampilan kedua:

CREATE VIEW V2 AS SELECT deptName, COUNT(*), SUM(salary) FROM Department, Employee WHERE Employee.deptId=Department.deptId GROUP BY deptName;

SQL SELECT menghasilkan

SELECT * FROM V1;

Nama Dept

JUMLAH(*)

SUM(gaji)

Musik

5

560000.00

Drama

2

25400.00

Perhatikan bahwa dalam tampilan V1 nama atribut diturunkan dari tabel dasar. Dalam V2 nama atribut baru secara eksplisit ditentukan menggunakan korespondensi satu-ke-satu antara atribut yang ditentukan dari klausa CREATE VIEW dan yang ditentukan dalam klausa SELECT. Klausa SELECT dengan view menentukan definisi view.

Informasi pada tampilan harus selalu up to date. Itu berarti itu harus selalu mencerminkan perubahan yang dibuat pada tabel dasar yang didefinisikan. Ini menarik, karena itu berarti bahwa tampilan tidak benar-benar terwujud pada saat mendefinisikannya, tetapi kemudian ketika kueri ditentukan di atasnya. Sistem manajemen basis data di latar belakang bertanggung jawab untuk menjaga tampilan tetap mutakhir.

PERBARUI, MASUKKAN, dan HAPUS pada tampilan

Dalam SQL, dimungkinkan untuk membuat tampilan yang dapat diperbarui yang dapat digunakan untuk mengubah data yang ada atau menyisipkan baris baru ke dalam tampilan yang pada gilirannya menyisipkan atau memodifikasi catatan di tabel dasar . Tampilan dapat diperbarui atau tidak ditentukan oleh pernyataan SELECT yang ditentukan dalam definisi tampilan. Tidak ada klausa khusus untuk menetapkan tampilan yang dapat diperbarui. Biasanya, definisi tampilan harus sederhana dan tidak boleh berisi fungsi agregat apa pun seperti SUM, AVG, MAX, MIN, COUNT. Segala jenis pengelompokan atau klausa DISTINCT atau JOIN juga membuat tampilan tidak dapat diperbarui. Lihat manual database yang relevan dari RDBMS spesifik untuk mengetahui apa yang membuat tampilan tidak dapat diperbarui.

Mari buat tampilan yang dapat diperbarui:

CREATE VIEW v3_ch_dept_name
AS
SELECT
   deptId, deptName, deptMgrId, mgrStartDate
FROM
   Department;

Kueri SELECT pada tampilan:

SELECT * FROM v3_ch_dept_name;

DeptId

Nama Dept

DeptMgrId

TanggalMgrStart

1

Musik

123456789

01-01-2020

5

Drama

987654321

03-05-2018

Sekarang perbarui tampilan dengan mengubah nama departemen (deptName).

UPDATE
   v3_ch_dept_name
SET
   deptName = 'Security'
WHERE
   deptId = 5;

Baris dapat disisipkan dalam tampilan sebagai berikut:

INSERT
   INTO v3_ch_dept_name
VALUES (7,'Logistics',666884444,'1982-07-07');

Kita juga dapat MENGHAPUS satu baris dari tampilan sebagai berikut:

DELETE FROM v3_ch_dept_name WHERE deptId = 7;

Di MySQL, Anda dapat dengan mudah menemukan tampilan dalam database yang dapat diperbarui atau tidak menggunakan perintah SELECT berikut.

SELECT
   table_name
FROM
   information_schema.views
WHERE
   is_updatable like 'YES'
AND
   table_schema like 'my_company';

LEPASKAN tampilan dari database

Tampilan selalu dapat dibuang dengan DROP VIEW perintah.

DROP VIEW V1;

Perhatikan bahwa ketika kita menjalankan perintah drop view itu menghapus definisi view. Data dasar yang disimpan dalam tabel dasar dari mana tampilan ini diturunkan tetap tidak berubah. Tampilan yang telah dihapus dapat dibuat ulang dengan nama yang sama.

Pernyataan ALTER VIEW

Tampilan umumnya tidak dapat diubah menurut standar SQL:2006, yang berarti pernyataan ALTER VIEW tidak berfungsi dengan tampilan. Namun, ada RDBMS seperti MySQL atau SQL Server yang mendukung pernyataan semacam ini. Oracle percaya dalam menjatuhkan tampilan terlebih dahulu kemudian membuatnya kembali daripada mengubahnya. Oleh karena itu, fungsi yang didukung pada tampilan oleh RDBMS bervariasi dari satu produk ke produk lainnya.

Kesimpulan

Tampilan SQL juga merupakan alat yang berguna untuk mengakses beberapa tipe data. Kueri kompleks dapat disimpan dalam definisi tampilan. Ini memanfaatkan penggunaan kembali karena kami dapat memanggil tampilan alih-alih membuat ulang kueri setiap kali kami membutuhkannya. Ini adalah cara yang nyaman untuk menyajikan informasi kepada pengguna yang menyembunyikan banyak informasi yang tidak ingin kami ungkapkan kepada semua orang. Ini penting dari perspektif keamanan juga. Struktur kompleks dapat disintesis dan disajikan dalam format yang mudah bagi pengguna akhir.

Referensi:

Elmasri, Ramez, dan Shamkant B. Navathe. Dasar-Dasar Sistem Basis Data . Pendidikan Pearson.


  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 kesalahan MySQL Syntax Operand harus berisi 1 kolom

  2. Fungsi MySQL MOD() – Melakukan Operasi Modulo di MySQL

  3. Menggunakan Workbench Untuk Terhubung ke Server MySQL Jarak Jauh Melalui SSH Tunnel

  4. Strategi Pencadangan dan Pemulihan MySQL/MariaDB yang Berhasil

  5. Cara Mendapatkan Catatan dari Hari Ini di MySQL