ربط الخداول Joins
يتم استخدام جملة Joins في
دمج السجلات من جدولين أو أكثر في قاعدة بيانات. JOIN هي
وسيلة لدمج الحقول من جدولين باستخدام القيم المشتركة لكل منهما.
بالنظر في الجدولين التاليين ، (أ) جدول العملاء على النحو التالي -
ID NAME AGE
ADDRESS SALARY
1 Ramesh
32 Ahmedabad
2000.00
2 Khilan
25 Delhi 1500.00
3 kaushik
23 Kota 2000.00
4 Chaitali
25 Mumbai 6500.00
5 Hardik 27
Bhopal 8500.00
6 Komal
22 MP 4500.00
7 Muffy
24 Indore 10000.00
(ب) جدول آخر هو المرتبات كما يلي -
OID DATE CUSTOMER_ID
AMOUNT
100 2009-10-08 00:00:00.000 3 1500.00
101 2009-11-20 00:00:00.000 2 1560.00
102 2009-10-08 00:00:00.000 3 3000.00
103 2008-05-20 00:00:00.000 4 2060.00
دعونا نضم هذين الجدولين في بيان SELECT الخاص بنا على النحو التالي :
SELECT ID, NAME,
AGE,
AMOUNT
FROM
CUSTOMERS, ORDERS
WHERE CUSTOMERS.ID =
ORDERS.CUSTOMER_ID
OR
SELECT A.ID,
A.NAME, A.AGE, B.AMOUNT
FROM
CUSTOMERS A inner join ORDERS
B on A.ID =
B.Customer_ID
سينتج الأمر أعلاه المخرجات التالية.
ID NAME AGE AMOUNT
2 Khilan
25 1560.00
3 kaushik
23 1500.00
3 kaushik
23 3000.00
4 Chaitali
25 2060.00
من الملاحظ أن الصلة يتم تنفيذها في جملة WHERE. يمكن
استخدام العديد من العوامل لربط الجداول ، مثل = و <و> و <> و <=
و> = و! = و BETWEEN و LIKE و NOT؛ يمكن
استخدامها جميعًا لضم الجداول. ومع ذلك ، فإن العامل الأكثر استخداما هو رمز يساوى
"=".
انواع الربط Joins
هناك أنواع مختلفة من ربط الجداول المتاحة في MS SQL Server -
·
INNER JOIN - إرجاع الصفوف عندما يكون هناك تطابق في كلا الجدولين.
·
LEFT JOIN - إرجاع كل الصفوف من الجدول الأيسر ، حتى إذا لم تكن هناك
تطابقات في الجدول الأيمن.
·
RIGHT JOIN - إرجاع جميع الصفوف من الجدول الأيمن ، حتى إذا لم تكن هناك
تطابقات في الجدول الأيسر.
·
FULL JOIN - إرجاع الصفوف عندما يكون هناك تطابق في أحد الجداول.
·
SELF JOIN - يستخدم هذا لضم جدول إلى نفسه كما لو كان الجدول جدولين ،
إعادة تسمية جدول واحد مؤقتًا
·
CARTESIAN JOIN - إرجاع الناتج الديكارتي لمجموعات السجلات من الجدولين أو
أكثر من الجداول المرتبطة.
↚
الاستعلامات الفرعية Sub Query
الاستعلامات الفرعية Sub Query
استعلام فرعي أو استعلام داخلي أو استعلام متداخل هو
استعلام داخل استعلام آخر ومضمّن في جملة WHERE. يتم
استخدام استعلام فرعي لإرجاع البيانات التي سيتم استخدامها في الاستعلام الرئيسي
كشرط لتقييد البيانات التي سيتم استردادها.
يمكن استخدام الاستعلامات الفرعية مع عبارات SELECT و INSERT و UPDATE و DELETE
بالإضافة إلى عوامل التشغيل مثل = و <و> و> = و <= و IN و BETWEEN وما إلى ذلك.
هناك بعض القواعد التي يجب أن تتبعها الاستعلامات الفرعية -
·
يجب عليك وضع الاستعلام فرعي بين قوسين.
·
يجب أن يتضمن الاستعلام فرعي جملة SELECT
وعبارة FROM.
·
يمكن أن يتضمن الاستعلام فرعي جملة WHERE و GROUP BY و HAVING.
·
لا يمكن أن يتضمن الاستعلام الفرعي عبارات COMPUTE أو FOR
BROWSE.
·
يمكنك تضمين جملة ORDER BY فقط عندما تستخدم جملة TOP.
·
يمكنك انشاء استعلامات فرعية متداخلة حتى 32 مستوى.
استعلامات فرعية مع عبارة SELECT
بناء الجملة
يتم استخدام الاستعلامات الفرعية بشكل متكرر مع عبارة SELECT. فيما
يلي بناء الجملة.
SELECT
column_name [, column_name ]
FROM table1 [, table2 ]
WHERE column_name OPERATOR
(SELECT column_name [, column_name ]
FROM table1 [, table2 ]
[WHERE])
مثال
يوجد فى جدول العملاء
السجلات التالية.
ID NAME AGE
ADDRESS SALARY
1 Ramesh
32 Ahmedabad
2000.00
2 Khilan
25 Delhi 1500.00
3 kaushik
23 Kota 2000.00
4 Chaitali
25 Mumbai
6500.00
5 Hardik
27 Bhopal
8500.00
6 Komal
22 MP 4500.00
7 Muffy
24 Indore
10000.00
دعونا نطبق الاستعلام الفرعي التالي مع عبارة SELECT.
SELECT *
FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS WHERE SALARY > 4500)
سينتج الأمر أعلاه المخرجات التالية.
ID NAME AGE
ADDRESS SALARY
4 Chaitali
25 Mumbai
6500.00
5 Hardik
27 Bhopal
8500.00
7 Muffy
24 Indore
10000.00
استعلامات فرعية مع جملة INSERT
يمكن أيضًا استخدام استعلامات فرعية مع عبارات INSERT. تستخدم
عبارة INSERT البيانات التي يتم
إرجاعها من الاستعلام الفرعي لإدراجها في جدول آخر. يمكن تعديل البيانات
المحددة في الاستعلام الفرعي باستخدام أي من وظائف الحرف أو التاريخ أو الرقم.
بناء الجملة
فيما يلي بناء الجملة.
INSERT
INTO table_name [ (column1 [, column2 ]) ]
SELECT [ *|column1 [, column2 ]
FROM table1 [, table2 ]
[ WHERE VALUE OPERATOR ]
مثال
النظر في جدول CUSTOMERS_BKP مع
هيكل مماثل لجدول العملاء. فيما يلي بناء الجملة لنسخ جدول العملاء الكامل في
CUSTOMERS_BKP.
INSERT INTO
CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID FROM CUSTOMERS)
استعلامات فرعية مع جملة UPDATE
يمكن استخدام الاستعلام الفرعي بالاقتران مع عبارة UPDATE. يمكن
تحديث أعمدة مفردة أو متعددة في جدول عند استخدام استعلام فرعي مع عبارة UPDATE.
بناء الجملة
فيما يلي بناء الجملة.
UPDATE
table
SET
column_name = new_value
[
WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME
FROM TABLE_NAME)
[ WHERE) ]
مثال
دعونا نفترض أن لدينا جدول CUSTOMERS_BKP متاح
وهو نسخة احتياطية من جدول العملاء.
يقوم المثال على تعديل SALARY
بمقدار 0.25 مرة في جدول العملاء لجميع العملاء الذين تبلغ أعمارهم أكبر من أو
تساوي 27.
UPDATE CUSTOMERS
SET SALARY = SALARY *
0.25
WHERE AGE IN (SELECT AGE
FROM CUSTOMERS_BKP WHERE AGE >= 27 )
سيؤثر هذا على صفين ، وأخيراً سيكون لدى جدول العملاء السجلات
التالية.
ID NAME AGE
ADDRESS SALARY
1 Ramesh
32 Ahmedabad
500.00
2 Khilan
25 Delhi 1500.00
3 kaushik
23 Kota 2000.00
4 Chaitali
25 Mumbai 6500.00
5 Hardik
27 Bhopal 2125.00
6 Komal
22 MP 4500.00
7 Muffy
24 Indore 10000.00
استعلامات فرعية مع جملة DELETE
يمكن استخدام الاستعلام الفرعي بالاقتران مع عبارة DELETE مثل
أي عبارات أخرى مذكورة أعلاه.
بناء الجملة
فيما يلي بناء الجملة.
DELETE
FROM TABLE_NAME
[
WHERE OPERATOR [ VALUE ]
(SELECT COLUMN_NAME FROM TABLE_NAME) [ WHERE) ]
مثال
دعونا نفترض أن لدينا جدول CUSTOMERS_BKP متاح
وهو نسخة احتياطية من جدول العملاء.
يؤدي المثال التالي إلى حذف السجلات من جدول العملاء لجميع العملاء
الذين تزيد أعمارهم عن 27 عامًا أو يساويها.
DELETE FROM CUSTOMERS
WHERE AGE IN (SELECT AGE
FROM CUSTOMERS_BKP WHERE AGE >=27 )
سيؤثر هذا على صفين ، وأخيراً سيكون لدى جدول العملاء السجلات
التالية.
ID NAME AGE
ADDRESS SALARY
2 Khilan
25 Delhi
1500.00
3 kaushik
23 Kota
2000.00
4 Chaitali
25 Mumbai
6500.00
6 Komal
22 MP 4500.00
7 Muffy
24 Indore
10000.00
↚
الأجراءات المخزنة Stored Procedures
يتم استخدام الإجراء المخزن Stored Procedure لتوفير الوقت لكتابة التعليمات
البرمجية مرات عديدة عن طريق تخزين التعليمات
البرمجية في قاعدة البيانات وكذلك الحصول
على النتائج المطلوب عن طريق استدعاء الإجراء المخزن وتمرير البيانات المطلوبة له
بناء
الجملة
فيما يلي بناء الجملة لإنشاء إجراء مخزّن.
Create procedure <procedure_Name>
As
Begin
<SQL Statement>
End
Go
مثال
يوجد فى جدول العملاء
السجلات التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
الأمر التالي هو مثال سيؤدي إلى جلب جميع السجلات من جدول العملاء في
قاعدة بيانات Testdb.
CREATE PROCEDURE SelectCustomerstabledata
AS
SELECT * FROM Testdb.Customers
GO
سينتج الأمر أعلاه المخرجات التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
↚
العمليات Transactions
العمليات Transactions
العمليات هي وحدة العمل التي يتم تنفيذها على قاعدة بيانات. العمليات هي وحدات أو تسلسلات للعمل المنجز بترتيب منطقي ، سواء بطريقة يدوية
من قبل المستخدم أو تلقائيًا من خلال برنامج قاعدة بيانات.
العمليات هي امر او تعليمه واحدة أو أكثر من التغييرات في قاعدة البيانات. على سبيل المثال ، إذا كنت تقوم بإنشاء سجل أو تحديث سجل أو حذف سجل
من الجدول ، فأنت تقوم بإجراء عملية على الجدول. من المهم التحكم في العمليات لضمان تكامل البيانات والتعامل مع أخطاء
قاعدة البيانات.
ستضم العديد من استعلامات SQL إلى مجموعة وستنفذها جميعًا معًا كجزء من العملية.
خصائص
العمليات
العمليات لها الخصائص الأربع القياسية التالية ، والتي يشار إليها عادةً باسم ACID -
·
التأكد Atomicity - يضمن إتمام جميع
العمليات داخل وحدة العمل بنجاح ؛ خلاف ذلك ، يتم ايقاف العمليات جميعها ، ويتم إرجاع العمليات السابقة
إلى حالتها السابقة.
·
الاتساق Consistency - يضمن تغيير قاعدة
البيانات بشكل صحيح فى حالة اتمام
العمليات بنجاح.
·
العزلة Isolation - تمكن المعاملات من العمل
بشكل مستقل عن بعضها البعض.
·
المتانة Durability - يضمن استمرار نتيجة أو
تأثير العملية حالة فشل النظام.
مراقبة
العمليات
هناك الأوامر التالية المستخدمة للتحكم في العمليات -
·
الالتزام COMMIT - لحفظ التغييرات.
·
التراجع ROLLBACK – للتراجع عن
التغييرات.
·
نقطة الحفظ SAVEPOINT - يخلق نقاط داخل
مجموعات من المعاملات التي تم عمل لها ROLLBACK.
·
انشاء عملية
SET TRACTACTION - يضع اسمًا على المعاملة.
يتم استخدام أوامر التحكم في المعاملات فقط مع أوامر DML INSERT و UPDATE و DELETE فقط. لا يمكن استخدامها أثناء إنشاء الجداول أو حذفها لأن هذه العمليات
يتم التحكم بها تلقائيًا في قاعدة البيانات.
من أجل استخدام أوامر التحكم في المعاملات في MS SQL Server ، يجب أن نبدأ المعاملة
بـ "start tran" أو start command transaction وإلا لن
تعمل هذه الأوامر.
حفظ
نتائج العمليات Commit
الأمر COMMIT هو أمر المعاملات المستخدم لحفظ التغييرات التي تستدعيها المعاملة
في قاعدة البيانات. يحفظ هذا الأمر جميع العمليات إلى قاعدة البيانات منذ آخر أمر COMMIT أو ROLLBACK.
بناء
الجملة
فيما يلي بناء جملة أمر COMMIT.
COMMIT;
مثال
يوجد جدول العملاء السجلات التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
سيؤدي مثال الأمر التالي إلى حذف السجلات من الجدول ذي العمر = 25 ،
ثم تنفيذ التغييرات في قاعدة البيانات.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT
نتيجة لذلك ، سيتم حذف صفين من الجدول وسيصدر بيان SELECT المخرجات التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
↚
الأمر
ROLLBACK
الأمر ROLLBACK هو أمر للتراجع عن العمليات التي لم يتم حفظها بالفعل في قاعدة
البيانات. يمكن استخدام هذا الأمر فقط
للتراجع عن المعاملات منذ إصدار آخر أمر COMMIT أو ROLLBACK.
بناء
الجملة
فيما يلي بناء جملة الأمر ROLLBACK.
ROLLBACK
مثال
يوجد فى جدول العملاء السجلات التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
سيؤدي مثال الأمر التالي إلى حذف السجلات من الجدول ذي العمر = 25 ثم
إعادة تشغيل التغييرات في قاعدة البيانات.
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK
نتيجة لذلك ، لن تؤثر عملية الحذف على الجدول وسيؤدي بيان SELECT إلى النتيجة التالية.
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
نقطة
الحفظ او الاسترجاع SAVEPOINT
SAVEPOINT هي نقطة في العمليات اى يمكنك إعادة العمليات إلى
نقطة معينة دون إعادة العامليات بالكامل.
بناء
الجملة
فيما يلي بناء جملة الأمر SAVEPOINT.
SAVE TRANSACTION SAVEPOINT_NAME
يستخدم هذا الأمر فقط في إنشاء SAVEPOINT بين عبارات العمليات. يتم استخدام الأمر ROLLBACK للتراجع عن مجموعة من المعاملات.
فيما يلي بناء الجملة للتراجع إلى SAVEPOINT.
ROLLBACK TO SAVEPOINT_NAME
في المثال التالي ، سنقوم بحذف ثلاثة سجلات مختلفة من جدول العملاء. سيتعين علينا إنشاء SAVEPOINT قبل كل عملية حذف ، حتى نتمكن من الرجوع إلى أي SAVEPOINT في أي وقت لإعادة
البيانات المناسبة إلى حالتها الأصلية.
مثال
النظر في جدول العملاء لديهم السجلات التالية -
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
فيما يلي سلسلة العمليات -
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
تم إجراء عمليات الحذف الثلاثة ، ومع ذلك ، فقد غيرنا رأينا وقررنا ROLLBACK إلى SAVEPOINT التي حددناها على أنها SP2. نظرًا لأنه تم إنشاء SP2 بعد الحذف الأول ، يتم التراجع عن آخر حذفين -
ROLLBACK Transaction SP2
Rollback complete.
لاحظ أنه تم إجراء الحذف الأول فقط منذ أن عدنا إلى SP2.
SELECT * FROM CUSTOMERS
تم تحديد 6 صفوف.
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
انشاء
او ضبط العمليات
يمكن استخدام أمر SET TRACTACTION لبدء العمليات على قاعدة بيانات. يستخدم هذا الأمر لتحديد خصائص المعاملة التالية.
بناء
الجملة
فيما يلي بناء جملة SET.
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>
↚
الفهارس Indexes
الفهارس Indexes
الفهارس هي
جدولة بحث خاصة يمكن أن
يستخدمها محرك بحث قاعدة البيانات لتسريع استعادة البيانات. ببساطة
، الفهرس هو مؤشر للبيانات في جدول. يشبه الفهرس الموجود في قاعدة
البيانات الفهرس في نهاية الكتاب.
على
سبيل المثال ، إذا كنت ترغب في الرجوع إلى جميع الصفحات الموجودة في كتاب يناقش
موضوعًا معينًا ، فأنت أولاً تقوم بفحص الفهرس ، الذي يسرد جميع الموضوعات أبجديًا
ثم يتم إحالته إلى رقم صفحة محدد أو أكثر.
يساعد
الفهرس على تسريع استعلامات SELECT وعبارات WHERE
، لكنه يبطئ إدخال البيانات ، باستخدام عبارات UPDATE
و INSERT. يمكن
إنشاء فهارس أو حذفها بدون أي تأثير على البيانات.
يتضمن
إنشاء فهرس عبارة CREATE INDEX ، التي تسمح لك بتسمية
الفهرس ، وتحديد الجدول وأي عمود أو أعمدة سيتم فهرسته ، والإشارة إلى ما إذا كان
الفهرس بترتيب تصاعدي أم تنازلي.
يمكن
أن تكون الفهارس فريدة من نوعها UNIQUE ، حيث يمنع الفهرس
الإدخالات المكررة في العمود أو مجموعة من الأعمدة التي يوجد بها فهرس.
إنشاء
مؤشر INDEX
فيما
يلي بناء الجملة الأساسي لـ CREATE INDEX.
بناء
الجملة
CREATE INDEX index_name ON table_name
فهارس
عمود واحد
فهرس
عمود واحد هو الذي يتم إنشاؤه استنادًا إلى عمود جدول واحد فقط. فيما
يلي بناء الجملة.
بناء
الجملة
CREATE INDEX index_name
ON table_name (column_name)
مثال
CREATE INDEX singlecolumnindex
ON customers (ID)
فهارس
فريد Indexes Unique
يتم
استخدام الفهارس الفريدة ليس فقط لتسريع
الاداء للبحث ، ولكن أيضًا لتكامل البيانات. لا
يسمح الفهرس الفريد بإدراج أي قيم مكررة في الجدول. فيما
يلي بناء الجملة.
بناء
الجملة
CREATE UNIQUE INDEX index_name
on table_name (column_name)
مثال
CREATE UNIQUE INDEX uniqueindex
on customers (NAME)
الفهارس
المركبة
فهرس
مركب هو فهرس على عمودين أو أكثر من جدول. فيما يلي بناء الجملة.
بناء
الجملة
CREATE INDEX index_name on table_name (column1, column2)
مثال
CREATE INDEX compositeindex
on customers (NAME, ID)
سواء
لإنشاء فهرس ذي عمود واحد أو فهرس مركب ، ضع في الاعتبار العمود (الأعمدة) الذي قد
تستخدمه بشكل متكرر في جملة WHERE في الاستعلام كشروط
تصفية.
في
حالة استخدام عمود واحد فقط ، يجب أن يكون الفهرس المكون من عمود واحد هو الخيار. في
حالة وجود عمودين أو أكثر يتم استخدامهما بشكل متكرر في جملة WHERE
كمرشحات ، سيكون الفهرس المركب هو الخيار الأفضل.
فهارس
ضمنية
الفهارس
الضمنية هي فهارس يتم إنشاؤها تلقائيًا بواسطة خادم قاعدة البيانات عند إنشاء
كائن. يتم
إنشاء الفهارس تلقائيًا للقيود الرئيسية الأساسية والقيود الفريدة.
حذف مؤشر INDEX
يمكن
حذف فهرس باستخدام أمر DROP. يجب
توخي الحذر عند حذف الفهرس لأن الأداء قد يتباطأ أو يتحسن.
بناء
الجملة
فيما
يلي بناء الجملة.
DROP INDEX tablename.index_name
متى
يجب تجنب الفهارس؟
على
الرغم من أن الفهارس تهدف إلى تحسين أداء قواعد البيانات ، فهناك أوقات ينبغي فيها
تجنبها. تشير
الإرشادات التالية إلى متى يجب إعادة النظر في استخدام الفهرس -
·
يجب عدم استخدام الفهارس
على الجداول الصغيرة.
·
يجب ألا تتم فهرسة
الجداول التي تحتوي على عمليات تحديث وادخال بيانات كثيرة
·
يجب عدم استخدام الفهارس
على الأعمدة التي تحتوي على عدد كبير من القيم NULL.
·
لا يجب فهرسة الأعمدة
التي يتم استخدامها بشكل متكرر.

تعليقات: 0
إرسال تعليق