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 ایجاد میشود که در شکل ۸۳-۳ این موضوع را مشاهده میکنید.
شکل ۸۳-۳ ایجاد 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 ، عبارت جستجو را آزمایش کنید و بهتر است ببینید آیا پرسشی چیزی را برمیگرداند؛ برای اینکه یک قسمت از دستور در خروجی اجرا کنید باید بهمانند شکل ۸۴-۳ دستور مورد نظر را انتخاب کنید و بعد، کلیک راست و گزینهی Execute را انتخاب کنید که نتیجهی آن مشخص خواهد شد؛ از آنجایی که جداول مقدار ندارند، یک جدول خالی را در شکل ۸۴-۳ مشاهده میکنید.
شکل ۸۴-۳ خروجی دستور
برای اینکه مقداری را در جداول وارد کنیم، میتوانیم از دستورات زیر استفاده کنیم:
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, ۲, ۲, '۰۴/۲۳/۲۰۱۶');
در خط اول دستور باید نام دیتابیسی که جداول در آن قرار دارند را وارد کنید، یعنی بهجای B22، نام دیتابیس خود را بنویسید.
در ادامه برای تست موضوع باید دوباره قسمت SELECT را بهمانند شکل ۸۵-۳ انتخاب کنید و دستور Execute را اجرا کنید؛ توجه داشته باشید در دستورات از DISTINCT برای جلوگیری از نمایش سوابق تکراری در خروجی استفاده کردیم.
شکل ۸۵-۳ خروجی دستور
بعد از اینکه View را ایجاد کردید، میتوانید بهمانند شکل ۸۶-۳ از سمت چپ وارد قسمت Views شوید و نمای مورد نظر که ایجاد کردید را مشاهده کنید؛ با دستور زیر میتوانید خروجی این View را مشاهده کنید:
SELECT * FROM [dbo].[ViewEmployeesWithSales];
توجه داشته باشید به جای اینکه در دستور بالا، نام View را بنویسید، میتوانید View مورد نظر را بکشید و در دستور رها کنید تا خودش نوشته شود.
شکل ۸۶-۳ خروجی View
در ادامه برای اینکه ارتباط بین جداول را در View مورد نظر بهصورت گرافیکی مشاهده کنید باید بهمانند شکل ۸۷-۳ بر روی View مورد نظر کلیک راست کنید و گزینهی Design را انتخاب کنید؛ توجه داشته باشید که شما میتوانستید بهجای وارد کردن دستورات از همین قسمت با انتخاب New View، نمای مورد نظر خود را انتخاب کنید.
شکل ۸۷-۳ بررسی دستور Design
همان طور که در شکل ۸۸-۳ مشاهده میکنید، این صفحه از چهار قسمت تشکیل شده است؛ در قسمت شمارهی نمای کلی، دو جدول را مشاهده میکنید؛ در قسمت شمارهی دو طبق ستونهایی که در دستور قبلی وارد کردیم، ستونهای مورد نظر تیک خورده شدند؛ در قسمت سوم دستور خروجی SELECT را که قبلاً وارد کردیم را مشاهده میکنید؛ کلاً در قسمت شمارهی یک، اگر هر یک از ستونها را انتخاب کنید در قسمت شمارهی سه دستوارت تغییر خواهد کرد؛ در قسمت شمارهی چهار نیز خروجی دستور شمارهی سوم را مشاهده میکنید، البته باید دستور شمارهی سوم را انتخاب و کلیک راست کنید و گزینهی Execute را انتخاب کنید؛ توجه داشته باشید در قسمت شمارهی یک، پیوند بین جدول اول و دوم ایجاد شده است که آن نیز به دلیل دستور dbo.Employees.EmployeeID = dbo.Sales.EmployeeID که در قسمت شمارهی سوم وارد کردید، است؛ به جای = اگر <> قرار دهید شکل آن در قسمت شمارهی یک تغییر خواهد کرد.
شکل ۸۸-۳ ایجاد VIEW
اگر بخواهید از طریق محیط گرافیکی، View ایجاد کنید باید بهمانند شکل ۸۹-۳ بر روی View کلیک راست کنید و گزینهی New View را انتخاب کنید.
شکل ۸۹ -۳ ایجاد View
بعد از ورود، شکل ۹۰- ۳ ظاهر خواهد شد که باید انتخاب کنید که از چه جداولی میخواهید خروجی بگیرید؛ در این قسمت، هر سه جدول را انتخاب میکنیم، البته میتوانیم از تب View نیز استفاده کنیم.
شکل ۹۰ – ۳ ایجاد view
در شکل ۹۱ – ۳ و در قسمت اول میتوانید ستونهایی که قرار است در خروجی چاپ شود را انتخاب کنید؛ به این نکته توجه کنید که انتخاب باید به ترتیب باشد، چون هر انتخابی که در جداول انجام میدهید، در قسمت دوم ردیف آن مشخص میشود و در قسمت سوم نیز دستورات آن بهصورت اتوماتیک نوشته خواهد شد؛ کلاً View همان دستور SELECT است که قبلاً با هم روی آن کار کردیم.
شکل ۹۱ – ۳ ایجاد View
برای اینکه بتوانیم شرط در این دستورات قرار دهیم، میتوانیم بهمانند شکل ۹۲ – ۳ در قسمت دوم و در ستون فیلتر، شرط خود را وارد کنیم که در اینجا >1 وارد شده است، یعنی اینکه در خروجی کار سطرهایی که EmployeeID آنها بزرگتر از ۱ باشد در خروجی چاپ خواهد شد؛ توجه کنید زمانی که در قسمت فیلتر، شرط مورد نظر خود را وارد میکنید، بعد از خروج از آن، قسمت دستور آن در قسمت شمارهی سوم نوشته میشود که در شکل ۹۲ -۳ مشخص شده است.
برای اینکه دستوری که ایجاد شده را اجرا کنیم باید آن را اجرا کنیم و کلیک راست کنیم و گزینهی Execute SQL را انتخاب کنیم تا در قسمت چهارم، خروجی مشخص شود که همان طور که گفتیم خروجی برای EmployeeIDهایی که بزرگتر از دو باشد، مشخص شده است.
در ستونهای Sort نیز میتوانید مشخص کنید که خروجی به چه صورت تنظیم شود.
شکل ۹۲ – ۳ اجرای دستور