أهلاً بك! اليوم راح نتكلم عن حاجة مهمة ومفيدة جداً في SQL وهي العروض (Views). لو كنت تتعامل مع قواعد بيانات كبيرة ومعقدة، الـ Views راح تسهل عليك شغلك كثير.
إيش هي الـ View؟
ببساطة، الـ View هي جدول افتراضي. يعني مو جدول حقيقي يخزن بيانات بنفسه، لكنه نتيجة استعلام (SQL query) محفوظة. كل مرة تستدعي الـ View، يقوم السيرفر بتنفيذ الاستعلام اللي معرف فيها ويعرض لك النتيجة كأنها جدول عادي.
ملاحظة: الـ
Viewما تخزن بياناتها الخاصة. هي مجرد "نافذة" على بيانات موجودة في جداول أخرى.
ليش نستخدم الـ Views؟ (الفوائد)
- تبسيط الاستعلامات المعقدة: لو عندك استعلامات تجمع بيانات من 5-6 جداول مع بعض، تقدر تحفظ الاستعلام هذا كـ
View، وبعدين تستخدم الـViewهذي كأنها جدول واحد بسيط. - الأمان: تقدر تمنح المستخدمين صلاحية الوصول لـ
Viewمعينة فقط، بدل ما تعطيهم صلاحية على الجداول الأساسية كلها. كذا تقدر تخفي أعمدة معينة أو صفوف معينة عنهم. - تجريد البيانات (Data Abstraction): لو تغيرت بنية الجداول الأساسية (مثلاً، غيرت اسم عمود)، تقدر تعدل الـ
Viewبدون ما تحتاج تعدل كل الاستعلامات اللي تستخدم الـViewهذي. - إعادة استخدام الكود: تكتب الاستعلام مرة وحدة وتحفظه، وتستخدمه في أي مكان.
كيف تنشئ View؟ (CREATE VIEW)
إنشاء الـ View سهل جداً. كل اللي تحتاجه هو استعلام SELECT.
الصيغة العامة:
CREATE VIEW اسم_العرض AS
SELECT عمود1, عمود2, ...
FROM جدول1
WHERE شرط;
مثال 1: View بسيطة
تخيل عندنا جدول اسمه Employees فيه معلومات الموظفين. نبغى View تعرض بس الموظفين النشطين وأسمائهم وإيميلاتهم.
CREATE VIEW ActiveEmployees AS
SELECT EmployeeID, FirstName, LastName, Email
FROM Employees
WHERE IsActive = 1;
الآن، كل ما تحتاج تشوف الموظفين النشطين، ما يحتاج تكتب جملة WHERE IsActive = 1 كل مرة. بس تستدعي الـ View.
مثال 2: View مع JOINs
لو عندنا جدول Orders وجدول Customers، ونبغى View تعرض معلومات الطلبات مع اسم العميل.
CREATE VIEW CustomerOrders AS
SELECT
o.OrderID,
c.FirstName AS CustomerFirstName,
c.LastName AS CustomerLastName,
o.OrderDate,
o.TotalAmount
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE o.OrderDate >= '2023-01-01';
هذي الـ View تجمع البيانات من جدولين وتفلترها كمان. صارت أسهل بكثير في الاستخدام.
مثال 3: View مع أعمدة محسوبة
نقدر نضيف أعمدة جديدة محسوبة داخل الـ View.
CREATE VIEW ProductSalesSummary AS
SELECT
ProductName,
SUM(Quantity) AS TotalQuantitySold,
SUM(Quantity * Price) AS TotalRevenue
FROM OrderItems
GROUP BY ProductName;
هنا أنشأنا View تلخص مبيعات المنتجات، وفيها أعمدة محسوبة مثل TotalQuantitySold و TotalRevenue.
كيف تستخدم الـ View؟
تتعامل معاها كأنها جدول عادي تماماً في استعلامات SELECT.
SELECT * FROM ActiveEmployees;
SELECT OrderID, CustomerFirstName
FROM CustomerOrders
WHERE TotalAmount > 1000;
SELECT ProductName, TotalRevenue
FROM ProductSalesSummary
ORDER BY TotalRevenue DESC;
ملاحظة: بعض قواعد البيانات تسمح لك بتحديث أو حذف أو إدخال بيانات في الـ
Views(Updatable Views) لكن بشروط معينة، مثلاً: ما تكونViewمعقدة فيهاJOINsأو دوال تجميع (Aggregate Functions). الأفضل دائماً التعامل مع الجداول الأساسية مباشرة لعملياتINSERT,UPDATE,DELETE.
تعديل الـ View (CREATE OR REPLACE VIEW)
لو حبيت تغير تعريف الـ View (تعدل الاستعلام اللي داخلها)، تقدر تستخدم CREATE OR REPLACE VIEW.
CREATE OR REPLACE VIEW ActiveEmployees AS
SELECT EmployeeID, FirstName, LastName, Email, PhoneNumber -- أضفنا عمود جديد
FROM Employees
WHERE IsActive = 1 AND DepartmentID = 5; -- غيرنا الشرط
هذا الأمر راح يعدل الـ View الموجودة بنفس الاسم، أو ينشئها لو ما كانت موجودة أصلاً.
حذف الـ View (DROP VIEW)
إذا ما عاد تحتاج الـ View، تقدر تحذفها بكل سهولة.
DROP VIEW ActiveEmployees;
نصيحة أخيرة
الـ Views أداة قوية جداً لترتيب شغلك وتبسيطه. استخدمها بحكمة، خصوصاً لما تكون عندك استعلامات تتكرر كثير، أو تحتاج تحد من وصول المستخدمين لبيانات معينة. بس انتبه لأداء الـ View، خصوصاً لو كانت مبنية على استعلامات معقدة جداً، ممكن تأثر على سرعة الاستعلام.
أتمنى يكون الشرح واضح ومفيد!