3-1-6 کار باView در SQL
Viewها یک سری از جداول هستند که میتوانند بهصورت دقیقتر و بهتر نتیجهی دستور SELECT را در خروجی نمایش دهند، البته به این موضوع توجه کنید که VIEW شامل جداول مجازی هستند و ربطی به جدول اصلی در دیتابیس ندارند و به این دلیل هیچ چیزی را در خودشان ذخیره نمیکنند، یعنی تنها برای نمایش خروجی دستور SELECT است و اگر هم حذف شوند، تأثیری روی جداول اصلی ندارند.
برای شروع کار نیاز به جداولی داریم تا بتوانیم View را بر روی آنها پیادهسازی کنیم؛ برای این کار دستور زیر را اجرا کنید:
CREATE TABLE Employees
(EmployeeID INT NOT NULL,
FirstName NVARCHAR(50) NOT NULL,
MiddleName NVARCHAR(50) NULL,
LastName NVARCHAR(75) NOT NULL,
Title NVARCHAR(100) NULL,
HireDate DATETIME NOT NULL,
VacationHours SMALLINT NOT NULL,
Salary DECIMAL(19, 4) NOT NULL
);
GO
CREATE TABLE Products
(ProductID INT NOT NULL,
Name NVARCHAR(255) NOT NULL,
Price DECIMAL(19, 4) NOT NULL
);
GO
CREATE TABLE Sales
(SalesID UNIQUEIDENTIFIER NOT NULL,
ProductID INT NOT NULL,
EmployeeID INT NOT NULL,
Quantity SMALLINT NOT NULL,
SaleDate DATETIME NOT NULL
);
GO
با اجرای دستورات بالا، سه جدول با نامهای Employees, Products, Sales ایجاد میشود که در شکل 83-3 این موضوع را مشاهده میکنید.
شکل 83-3 ایجاد View
برای ایجاد View از دو روش میتوانیم استفاده کنیم؛ میتوانیم از دستورات T-SQL استفاده کنیم، یا اینکه از Managemennt Studio استفاده کنیم.
برای ایجاد نمای جدید میتوانیم از دستورات T-SQL زیر استفاده کنیم:
USE B22;
GO
CREATE VIEW ViewEmployeesWithSales
AS
SELECT DISTINCT
Employees.*
FROM Employees
JOIN Sales ON Employees.EmployeeID = Sales.EmployeeID;
GO
این یک نمای (view) ساده با یک عبارت ساده SELECT است که لیستی از کارمندان فروش را در جدول Employess و Sales برمیگرداند؛ در حقیقت، شما همیشه میتوانید قبل از ایجاد نمایش، تنها با اجرای قسمتSELECT ، عبارتCREATE VIEW SQL ، عبارت جستجو را آزمایش کنید و بهتر است ببینید آیا پرسشی چیزی را برمیگرداند؛ برای اینکه یک قسمت از دستور در خروجی اجرا کنید باید بهمانند شکل 84-3 دستور مورد نظر را انتخاب کنید و بعد، کلیک راست و گزینهی Execute را انتخاب کنید که نتیجهی آن مشخص خواهد شد؛ از آنجایی که جداول مقدار ندارند، یک جدول خالی را در شکل 84-3 مشاهده میکنید.
شکل 84-3 خروجی دستور
برای اینکه مقداری را در جداول وارد کنیم، میتوانیم از دستورات زیر استفاده کنیم:
USE B22;
GO
INSERT INTO Employees VALUES (1,'Ken', NULL, 'Farshid', 'IT Manager', '1/1/2016', 2080, 45000);
INSERT INTO Employees VALUES (2,'Janice', NULL, 'AZADEH', 'Sales Representative', '12/11/2016', 2080, 45000);
INSERT INTO Products VALUES (1,'Long-Sleeve Logo Jersey, S', 12.99);
INSERT INTO Products VALUES (2, 'Long-Sleeve Logo Jersey, M', 14.99);
INSERT INTO Products VALUES (3, 'Long-Sleeve Logo Jersey, L', 16.99);
INSERT INTO Products VALUES (4, 'Long-Sleeve Logo Jersey, XL', 18.99);
INSERT INTO Sales VALUES (NEWID(), 1, 1, 4, '04/15/2016');
INSERT INTO Sales VALUES (NEWID(), 2, 1, 1, '02/01/2016');
INSERT INTO Sales VALUES (NEWID(), 3, 1, 2, '03/12/2016');
INSERT INTO Sales VALUES (NEWID(), 2, 2, 2, '03/18/2016');
INSERT INTO Sales VALUES (NEWID(), 3, 2, 1, '04/16/2016');
INSERT INTO Sales VALUES (NEWID(), 4, 2, 2, '04/23/2016');
در خط اول دستور باید نام دیتابیسی که جداول در آن قرار دارند را وارد کنید، یعنی بهجای B22، نام دیتابیس خود را بنویسید.
در ادامه برای تست موضوع باید دوباره قسمت SELECT را بهمانند شکل 85-3 انتخاب کنید و دستور Execute را اجرا کنید؛ توجه داشته باشید در دستورات از DISTINCT برای جلوگیری از نمایش سوابق تکراری در خروجی استفاده کردیم.
شکل 85-3 خروجی دستور
بعد از اینکه View را ایجاد کردید، میتوانید بهمانند شکل 104-3 از سمت چپ وارد قسمت Views شوید و نمای مورد نظر که ایجاد کردید را مشاهده کنید؛ با دستور زیر میتوانید خروجی این View را مشاهده کنید:
SELECT * FROM [dbo].[ViewEmployeesWithSales];
توجه داشته باشید به جای اینکه در دستور بالا، نام View را بنویسید، میتوانید View مورد نظر را بکشید و در دستور رها کنید تا خودش نوشته شود.
شکل 104-3 خروجی View
در ادامه برای اینکه ارتباط بین جداول را در View مورد نظر بهصورت گرافیکی مشاهده کنید باید بهمانند شکل 105-3 بر روی View مورد نظر کلیک راست کنید و گزینهی Design را انتخاب کنید؛ توجه داشته باشید که شما میتوانستید بهجای وارد کردن دستورات از همین قسمت با انتخاب New View، نمای مورد نظر خود را انتخاب کنید.
شکل 105-3 بررسی دستور Design
همان طور که در شکل 106-3 مشاهده میکنید، این صفحه از چهار قسمت تشکیل شده است؛ در قسمت شمارهی نمای کلی، دو جدول را مشاهده میکنید؛ در قسمت شمارهی دو طبق ستونهایی که در دستور قبلی وارد کردیم، ستونهای مورد نظر تیک خورده شدند؛ در قسمت سوم دستور خروجی SELECT را که قبلاً وارد کردیم را مشاهده میکنید؛ کلاً در قسمت شمارهی یک، اگر هر یک از ستونها را انتخاب کنید در قسمت شمارهی سه دستوارت تغییر خواهد کرد؛ در قسمت شمارهی چهار نیز خروجی دستور شمارهی سوم را مشاهده میکنید، البته باید دستور شمارهی سوم را انتخاب و کلیک راست کنید و گزینهی Execute را انتخاب کنید؛ توجه داشته باشید در قسمت شمارهی یک، پیوند بین جدول اول و دوم ایجاد شده است که آن نیز به دلیل دستور dbo.Employees.EmployeeID = dbo.Sales.EmployeeID که در قسمت شمارهی سوم وارد کردید، است؛ به جای = اگر <> قرار دهید شکل آن در قسمت شمارهی یک تغییر خواهد کرد.
شکل 106-3 ایجاد VIEW
اگر بخواهید از طریق محیط گرافیکی، View ایجاد کنید باید بهمانند شکل 107-3 بر روی View کلیک راست کنید و گزینهی New View را انتخاب کنید.