Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tampilan di SQL Server

Pengantar

Tampilan di SQL Server adalah struktur seperti tabel virtual berdasarkan kumpulan hasil dari pernyataan SQL. Di permukaan, tampilan mirip dengan tabel dengan struktur khas baris dan kolom. Namun, baris dan kolom ini berasal dari tabel yang dirujuk dalam kueri, yang mendefinisikan Tampilan.

Kami menggunakan Tampilan untuk fokus pada kolom konkret untuk tujuan pembuatannya. Tampilan juga dapat berfungsi untuk alasan keamanan. Mereka memfilter kolom di tabel yang mendasarinya yang tidak ingin dilihat oleh pengguna tertentu. Menampilkan kolom filter seperti klausa WHERE memfilter baris.

Alasan lain untuk Tampilan adalah kesederhanaan. Mereka menggabungkan kolom dari beberapa tabel berbeda dan membuat tampilan umum yang terlihat seperti satu tabel.

Jenis Tampilan

Tampilan dasar yang ditentukan pengguna mudah dibuat. Prosesnya mirip dengan menulis kueri yang mereferensikan satu atau lebih tabel.

  • Tampilan yang Diindeks adalah yang telah terwujud atau disimpan seperti tabel. Tampilan Terindeks dapat meningkatkan kinerja kueri yang menggabungkan banyak baris. Namun, mereka tidak cocok jika tabel yang mendasarinya sering diperbarui.
  • Tampilan yang Dipartisi menggabungkan data yang dipartisi secara horizontal dari tabel secara lokal (dalam instance yang sama) atau di banyak tempat, menggunakan Server Tertaut.
  • Tampilan Sistem adalah struktur umum yang digunakan SQL Server untuk mengekspos metadata katalog. Tampilan Sistem adalah sebagian besar dari struktur yang satu kueri untuk kinerja pemecahan masalah atau menyelidiki contoh SQL Server.

Membuat Tampilan dari Satu Tabel

Lihat contoh di Listing 1. Pernyataan pertama mengembalikan SEMUA record dalam tabel Purchase.PurchaseOrders (1a), sedangkan kueri kedua hanya mengembalikan beberapa kolom (1b).

Menggunakan kueri kedua, kita dapat membuat Tampilan yang mengembalikan set hasil yang sama seperti (1b). Ketika kami melakukan ini, kami dapat meminta Tampilan untuk mendapatkan output yang diinginkan. Jadi, kami menyederhanakan kueri untuk pengguna akhir.

-- Listing 1: Creating a Basic User-Defined View
-- 1a

SELECT * FROM
  Purchasing.PurchaseOrders;

-- 1b
SELECT 
  PurchaseOrderID
  , SupplierID
  , OrderDate
  , ExpectedDeliveryDate
  FROM Purchasing.PurchaseOrders;

-- 1c
CREATE VIEW Purchasing.QuickOrders 
  AS
SELECT 
  PurchaseOrderID
  , SupplierID
  , OrderDate
  , ExpectedDeliveryDate
  FROM Purchasing.PurchaseOrders;

-- 1d
SELECT * FROM Purchasing.QuickOrders ;

Membuat Tampilan dari Dua Tabel

Dengan menggunakan JOIN, kita dapat mengambil data dari dua atau lebih tabel yang memiliki hubungan. Dengan menggunakan Tampilan, kami dapat menyederhanakan pengaksesan data tersebut.

Daftar 2 (2a) menunjukkan GABUNG antara Purchasing.PurchaseOrders dan Purchasing.PurchaseOrderLines. Kita dapat membuat View dari JOIN ini, dan ini akan memungkinkan kita untuk mengambil data yang sama menggunakan kueri, seperti yang ditunjukkan pada (2c).

-- Listing 2: Creating a View from Two Tables
-- 2a
  SELECT 
  po.PurchaseOrderID
  , po.SupplierID
  , po.OrderDate
  , po.ExpectedDeliveryDate
    , pol.Description
    , pol.ExpectedUnitPricePerOuter
  FROM Purchasing.PurchaseOrders po
  INNER JOIN Purchasing.PurchaseOrderLines pol
  ON po.PurchaseOrderID=pol.PurchaseOrderID;

-- 2b
  CREATE VIEW Purchasing.DetailedOrders
    AS
  SELECT 
  po.PurchaseOrderID
  , po.SupplierID
  , po.OrderDate
  , po.ExpectedDeliveryDate
    , pol.Description
    , pol.ExpectedUnitPricePerOuter
  FROM Purchasing.PurchaseOrders po
  INNER JOIN Purchasing.PurchaseOrderLines pol
  ON po.PurchaseOrderID=pol.PurchaseOrderID;

-- 2c
  SELECT * FROM Purchasing.DetailedOrders;

Membuat Tampilan di Seluruh Basis Data

Menggunakan penamaan multi-bagian, kita dapat mereferensikan tabel dalam database yang berbeda. Oleh karena itu, kita dapat melakukan JOIN di seluruh database dan membuat Tampilan yang menjangkau database. Sangat membantu untuk aplikasi tertentu yang menyebarkan datanya ke seluruh database dalam contoh SQL Server yang sama.

Listing 3 menunjukkan kasus yang sama seperti Listing 2, tetapi dengan perbedaan:kita menambahkan tabel ketiga ke query JOIN dari database yang berbeda. Perhatikan bahwa kita harus menggunakan LEFT OUTER JOIN karena tidak ada hubungan nyata antara tabel di kedua database. Di sini, kami menggunakannya hanya untuk mengilustrasikan pembuatan VIEW yang mencakup database yang berbeda.

Kami telah memperkenalkan alias dalam pernyataan CREATE VIEW, karena kami memiliki kolom dari dua tabel berbeda dengan nama yang sama. Kita harus membedakan kolom tersebut dalam kasus seperti itu.

  -- Listing 3: Creating a View Across Databases
  -- 3a
  SELECT 
  po.PurchaseOrderID
  ,po.SupplierID
  ,po.OrderDate
  ,po.ExpectedDeliveryDate
    ,pol.Description
    ,pol.ExpectedUnitPricePerOuter
    ,so.orderid
    ,so.custid
    ,so.orderdate
  FROM Purchasing.PurchaseOrders po
  INNER JOIN Purchasing.PurchaseOrderLines pol
  ON po.PurchaseOrderID=pol.PurchaseOrderID
  LEFT OUTER JOIN TSQLV4.Sales.Orders so
  ON po.PurchaseOrderID=so.orderid;

-- 3b
  CREATE VIEW Purchasing.DetailedOrdersDistributed
    AS
  SELECT 
  po.PurchaseOrderID
  ,po.SupplierID
  ,po.OrderDate
  ,po.ExpectedDeliveryDate
    ,pol.Description
    ,pol.ExpectedUnitPricePerOuter
    ,so.orderid
    ,so.custid
    ,so.orderdate AS OrdersOrderDate
  FROM Purchasing.PurchaseOrders po
  INNER JOIN Purchasing.PurchaseOrderLines pol
  ON po.PurchaseOrderID=pol.PurchaseOrderID
  LEFT OUTER JOIN TSQLV4.Sales.Orders so
  ON po.PurchaseOrderID=so.orderid;

-- 3c
  SELECT * FROM Purchasing.DetailedOrdersDistributed;

Lihat Gambar 1. Ini menunjukkan hasil eksekusi Listing 3(3c). Perhatikan bahwa tiga kolom terakhir kosong, karena TSQLV4.Sales.Orders tabel tidak memiliki baris yang cocok dengan kondisi GABUNG.

Membuat Tampilan di Seluruh Instance

Kita dapat memperluas pernyataan terakhir dengan memperkenalkan tabel yang hidup di instance lain sepenuhnya.

Untuk mencapai ini, pertama-tama kita harus membuat Server Tertaut. Kami melakukannya dengan kode yang mirip dengan yang ditunjukkan pada Listing 4.

-- Listing 4: Linked Server

USE [master]
GO

EXEC master.dbo.sp_addlinkedserver @server = N'IGIRI01\SQLEXPRESS', @srvproduct=N'SQL Server'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'IGIRI01\SQLEXPRESS',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO

Perhatikan bagaimana kita menangani tabel eksternal menggunakan nama empat bagian:

-- Listing 5: Creating a View Across Instances
-- 5a

CREATE VIEW Purchasing.DetailedOrdersExternal
    AS
  SELECT 
  po.PurchaseOrderID
  ,po.SupplierID
  ,po.OrderDate
  ,po.ExpectedDeliveryDate
    ,pol.Description
    ,pol.ExpectedUnitPricePerOuter
    ,ipol.StockItemID
    ,ipol.LastEditedWhen
  FROM Purchasing.PurchaseOrders po
  INNER JOIN Purchasing.PurchaseOrderLines pol
  ON po.PurchaseOrderID=pol.PurchaseOrderID
  INNER JOIN [IGIRI01\SQLEXPRESS].[WWI].[Purchasing].[PurchaseOrderLines] ipol
  ON po.PurchaseOrderID=ipol.PurchaseOrderID;

-- 5b
SELECT * FROM Purchasing.DetailedOrdersExternal;

Menyertakan Fungsi dalam Tampilan

Karena Tampilan pada dasarnya adalah kueri, kami dapat menerapkannya pada hampir semua hal yang kami lakukan dengan kueri biasa. Kami dapat menyertakan fungsi, klausa WHERE, ekspresi CASE, alias, dll.

Namun, klausa ORDER BY tidak diperbolehkan, kecuali Anda menggunakan "TOP 100 hack". Daftar 6 hingga 9 mengilustrasikan penggunaan klausa tersebut di Views.

-- Listing 6: Creating a View with a Function
CREATE VIEW Purchasing.DetailedOrdersComplex
    AS
  SELECT 
  ipol.PurchaseOrderID
  ,ipol.Description
  ,ipol.ExpectedUnitPricePerOuter
  ,ipol.StockItemID
  ,CONVERT(VARCHAR, LastEditedWhen, 113) AS LastEditedLongDate
  FROM [IGIRI01\SQLEXPRESS].[WWI].[Purchasing].[PurchaseOrderLines] ipol
-- Listing 7: Creating a View with a WHERE Clause
  CREATE VIEW Purchasing.DetailedOrdersComplexFilt
    AS
  SELECT 
  ipol.PurchaseOrderID
  ,ipol.Description
  ,ipol.ExpectedUnitPricePerOuter
  ,ipol.StockItemID
  ,CONVERT(VARCHAR, LastEditedWhen, 113) AS LastEditedLongDate
  FROM [IGIRI01\SQLEXPRESS].[WWI].[Purchasing].[PurchaseOrderLines] ipol
    WHERE   ipol.PurchaseOrderID<10;
  -- Listing 8: Creating a View a TOP Clause
  CREATE VIEW Purchasing.DetailedOrdersComplexTop
    AS
  SELECT TOP 10
  ipol.PurchaseOrderID
  ,ipol.Description
  ,ipol.ExpectedUnitPricePerOuter
  ,ipol.StockItemID
  ,CONVERT(VARCHAR, LastEditedWhen, 113) AS LastEditedLongDate
  FROM [IGIRI01\SQLEXPRESS].[WWI].[Purchasing].[PurchaseOrderLines] ipol
      -- Listing 9: Creating a View with a CASE Expression
  CREATE VIEW Purchasing.DetailedOrdersComplexTop
    AS
  SELECT TOP 10
    CASE 
  ipol.PurchaseOrderID
    WHEN 1 THEN 'First Order'
    WHEN 2 THEN 'Second Order'
    END PurchaseOrder
  ,ipol.Description
  ,ipol.ExpectedUnitPricePerOuter
  ,ipol.StockItemID
  ,CONVERT(VARCHAR, LastEditedWhen, 113) AS LastEditedLongDate
  FROM [IGIRI01\SQLEXPRESS].[WWI].[Purchasing].[PurchaseOrderLines] ipol

Tampilan Terindeks

Kami merujuk ke Tampilan Terindeks di awal artikel. Tampilan Terindeks dapat meningkatkan kinerja, kecuali untuk kasus di mana tabel yang mendasarinya intensif menulis. SQL Server memerlukan opsi SET tertentu yang diaktifkan sebelum membuat Tampilan Terindeks atau melakukan operasi tertentu pada mereka.

Klausa WITH SCHEMABINDING harus digunakan saat membuat Tampilan untuk meletakkan indeks di atasnya. Klausa ini mengaitkan View dengan objek yang mendasarinya secara ketat. Dengan demikian, benda tersebut tidak dapat dijatuhkan.

-- Listing 10: Creating an Indexed View
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON;

  CREATE VIEW Purchasing.DetailedOrdersIndexed
    WITH SCHEMABINDING
    AS
  SELECT 
  po.PurchaseOrderID
  ,po.SupplierID
  ,po.OrderDate
  ,po.ExpectedDeliveryDate
  FROM Purchasing.PurchaseOrders po;

CREATE UNIQUE CLUSTERED INDEX IX_ID
   ON Purchasing.DetailedOrdersIndexed (PurchaseOrderID);

Kesimpulan

Dalam artikel ini, kami telah memeriksa pandangan pada beberapa tingkat detail. Kami membahas secara singkat jenis Tampilan dan memberikan beberapa contoh tampilan yang ditentukan pengguna dan bagaimana kami menggunakan GABUNG untuk mewujudkan tampilan yang bergantung pada banyak tabel. Kami juga membahas tampilan kompleks yang menyertakan fungsi serta tampilan yang diindeks.

Referensi

  1. Tampilan
  2. Tampilan Terindeks
  3. Buat Tampilan Terindeks di SQL Server

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengubah Nomor Urutan Akun Email Database dalam Profil di SQL Server (T-SQL)

  2. Pemeriksaan Kesehatan SQL Server Proaktif, Bagian 1:Ruang Disk

  3. Bagaimana cara mendapatkan perbedaan antara dua baris untuk bidang kolom?

  4. Kiat untuk Mengurangi Kompleksitas SQL Server Anda

  5. Peningkatan tempdb di SQL Server 2019