Di SQL Server, Anda dapat membuat kueri sebagai tampilan. Tampilan bermanfaat karena berbagai alasan, termasuk keamanan, kegunaan, dan kenyamanan.
Di SQL Server, tampilan adalah tabel virtual yang isinya ditentukan oleh kueri. Ini pada dasarnya adalah kueri yang telah ditulis sebelumnya yang disimpan di database.
Tampilan terdiri dari SELECT
pernyataan, dan saat Anda menjalankan kueri terhadap tampilan, Anda melihat hasilnya seperti saat membuka tabel. Tampilan disebut sebagai tabel virtual karena dapat mengumpulkan data dari beberapa tabel, serta data agregat, dan menyajikannya seolah-olah itu adalah satu tabel.
Manfaat Tampilan
Tampilan dapat berguna ketika ada beberapa pengguna dengan tingkat akses yang berbeda, yang semuanya perlu melihat sebagian data dalam database (tetapi tidak harus semua data). Tampilan dapat melakukan hal berikut:
- Batasi akses ke baris tertentu dalam tabel
- Batasi akses ke kolom tertentu dalam tabel
- Gabung kolom dari beberapa tabel dan tampilkan seolah-olah mereka adalah bagian dari satu tabel
- Menyajikan informasi agregat (seperti hasil
COUNT()
fungsi)
Cara Membuat Tampilan
Anda membuat tampilan dengan menggunakan CREATE VIEW
pernyataan, diikuti oleh SELECT
pernyataan.
CREATE VIEW ViewName AS SELECT ...
Sekarang kita akan membuat tampilan dari kueri sebelumnya.
-
Desain Tampilan
Ambil kueri dari contoh kami sebelumnya, dan awali dengan CREATE VIEW RecentAlbums AS .
Hapus juga
ORDER BY
klausa, karena tampilan tidak mendukung klausa ini (kecualiTOP
,OFFSET
atauFOR XML
juga ditentukan).Tambahkan juga titik koma di akhir pernyataan, sebagai terminator pernyataan (lebih lanjut tentang itu di bawah).
Contoh Kode
Di bawah ini adalah kode dari contoh kita, dengan
ORDER BY
klausa dihapus, dan titik koma ditambahkan sebagai terminator pernyataan.Saya juga telah memformat ulang sedikit agar lebih mudah dibaca).
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
Dalam contoh ini saya menambahkan titik koma ke akhir tampilan. Perancang Kueri tidak menyertakan ini, tetapi praktik yang baik adalah menyertakannya.
Titik koma adalah bagian dari standar ANSI SQL-92. Ini adalah karakter terminator pernyataan.
Selain itu, Microsoft telah mengumumkan bahwa pernyataan Transact-SQL yang diakhiri dengan titik koma tidak digunakan lagi di SQL Server 2016, dan pernyataan tersebut tidak akan didukung di versi mendatang (SQL Server secara historis menggunakan
GO
kata kunci sebagai terminator pernyataan, bukan titik koma). -
Jalankan Tampilan
Sekarang jalankan tampilan sama seperti Anda menjalankan kueri lainnya.
Klik Jalankan pada bilah alat.
Anda sekarang dapat menavigasi ke tampilan di Object Explorer. Perluas dan Anda akan melihat kolom serta tipe data dan propertinya — seolah-olah itu adalah tabel.
-
Kueri Tampilan
Sekarang setelah tampilan dibuat, Anda dapat mengkueri tampilan dengan menjalankan
SELECT
pernyataan menentangnya.Jadi Anda dapat menanyakan tampilan baru kami yang dibuat dengan menggunakan
SELECT * FROM RecentAlbums;
. -
Filter Tampilan
Salah satu hal baik tentang tampilan adalah, Anda dapat menerapkan kriteria pemfilteran Anda sendiri terhadapnya — memfilter hasil lebih lanjut.
Misalnya, Anda dapat menambahkan
WHERE Genre = 'Pop'
, sehingga tampilan hanya mengembalikan pop album dari 10 tahun terakhir.
Mengubah Tampilan
Anda dapat mengubah tampilan Anda dengan menggunakan ALTER VIEW
pernyataan alih-alih CREATE VIEW
pernyataan.
-
Desain Tampilan yang Diubah
Di sini kami akan mengubah pandangan kami untuk mengembalikan album selama 20 tahun terakhir, bukan hanya 10.
Ini adalah koleksi sekolah yang cukup tua, jadi album apa pun yang dirilis dalam 20 tahun terakhir diklasifikasikan sebagai "baru-baru ini" :)
Kami juga akan mengembalikan kolom lain:Artists.ActiveFrom
Contoh Kode
Berikut kode yang kami gunakan untuk contoh:
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
Kueri Tampilan
Sekarang, menanyakan tampilan akan mengembalikan album senilai 20 tahun. Ini juga akan menampilkan tanggal artis tersebut aktif.