لغة الاستعلامات الهيكلية 1

 

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

*** سلسلة دروس TSQL الموجودة في الموسوعة العربية أشمل من هذين الدرسين واللذين سيتم عرضهما هنا ، ولمزيد من التفصيل والتوضيح يفضل مراجعة هذه الدروس على هذا الرابط لمن يريد الاستزادة :

http://www.c4arab.com/showasection.php?lssid=99

لكن المطلوب منا فقط هو ما ذكر في هذه الدروس ..

استخدام لغة ( تقنية ) الإستعلامات بطريقة TSQL (1) .

هذا هو الجزء الأكثر اهمية ، حيث ان جمل الاستعلام تعمل مع جميع قواعد البيانات بصورة موحدة مع اختلافات طفيفة جداً ، كما سنستخدمها في فيجوال بيسك ومن خلال Asp أيضاً ، كما انها تستخدم مع غيرهما بنفس الطريقة تقريباً ، وسوف نتطرق هنا لأشهر هذه الجمل مع وجود غيرها ايضاً .

ما هي SQL ؟
هذه الكلمة اختصار ل Structured Query Language .
وتصلح تقنية الاستعلام للعمل مع جميع أنواع قواعد البيانات : Oracle - Access - MS sql Server وغيرها .

تقوم هذه الجملة بالبحث - كما هو شائع - إلا أنها تستخدم أيضاً في الاضافة والحذف والتعديل وانشاء الجداول وحتى قواعد البيانات . والتحكم بها والادارة وغير ذلك .

أين ستكتب جمل الإستعلام في أكسيس ؟
اختر استعلامات Quires من القائمة التي كنا تختار منها Table أو Forms .
اختر Ceate Quriry In Deign Viwe .
ستظهر لك شاشة ... اختر اغلاق - Close .
والآن من قائمة Query اخترSQL Specfic ومن ثم اختر Union وذلك بالشكل التالي :

http://www.c4arab.com/images/lessons/databases/general/cpic/44.jpg

ستظهر لك شاشة فارغة ... هذه هي الشاشة التي سنكتب فيها أوامر الإستعلام .
في أعلى الشاشة نجد رمزاً للقرص المرن وهذا الرمز يرمز إلى حفظ الإستعلام ... أيضاً علامة التعجب تعني ( نفذ الإستعلام )
سوف نقوم بكتابة الإستعلام التالي :

Select FName From Tb_Main;

لا تقلق فلسوف نشرح ماذا يعني الأمر السابق !!!

اضغط على حفظ واحفظه تحت الاسم الذي يناسبك ... وجرب تنفيذ الإستعلام بالضغط على علامة التعجب ... أيضاً أغلق الشاشة واضغط على اسم الإستعلام ... أتمنى أن تظهر لك في الحالتين شاشة شبيه بذلك :


أيضاً للعودة لشاشة التصميم ... اضغط على الاسم بزر الماوس الأيمن واختر ( عرض التصميم - Design View ) وستظهر شاشة كتابة الكود .

حتى هذه اللحظة فالتغييرات محفوظة في :

http://www.c4arab.com/images/lessons/databases/general/cpic/db6.zip

والآن سنبدأ في تفصيل جمل الاستعلام ، وسوف نتعرف أولاً على جمل البحث والتي تبدأ بـ Select . وهذه هي الصيغة العامة :

Select Colums_Name From Table_Name;

نلاحظ تكون جملة الإستعلام من أربعة أجزاء :
Select : وهي التي تميز جملة البحث عن غيرها من جمل TSQL .
Colum_Name :
اسم الحقل أو العمود الذي تريد له أن يظهر .
From :
وهي أيضاً صيغة خاصة بجملة البحث وتتغير في باقي جمل TSQL .
Table_Name :
هنا نكتب اسم الجدول .

ولنلق نظرة قبل البدء على ما يمكن تسميته ( القواعد النحوية ) Syntex :
* لا يوجد أي فرق بين الأحرف الكبيرة والصغيرة .
*
مسافة = مسافتان = عشرة أسطر : لا يعترف بأكثر من مسافة .
*
تنتهي جميع جمل الإستعلام بفاصلة منقوطة ; إلا أننا في الفيجوال بيسك وفي بعض البرامج الأخرى لا نحتاج إليها .

لنلق نظرة على المثال السابق

SELECT FName FROM Tb_Main;

لاحظ أننا استخدمنا جملة Select لاستخراج الاسم الأول من الجدول Tb_Main .

وبهذه الصورة يمكننا استخراج مواقع الأصدقاء وذلك بالشكل التالي

SELECT Site FROM Tb_Main;

وهكذا مع الباقي .
وإذا كنا نريد استخراج أكثر من عمود فيمكننا وضعهم بالتوالي وتفصل بينهم الفاصلة ، فمثلاً لاستخراج الإسم الأول والإسم الأخير :

SELECT FName,LName FROM Tb_Main;

ومثلاً لاستخراج الإسم الأول والعمر والبريد الإلكتروني :

SELECT FName, Age,EMail FROM Tb_Main;

ولاستخراج جميع البيانات فإننا نضع * محل اسماء الحقول وذلك بالشكل التالي :

SELECT* FROM Tb_Main;

ولاستخراج البيانات ولكن بدون تكرار نستخدم DISTINCT ... فمثلاً لاستخراج الإسم الأول مع حذف التكرار :

SELECT DISTINCT FNAme FROM Tb_Main;

أيضاً لترتيب البيانات المخرجة تصاعدياً أو تنازلياً نستخدم الأمر :
ORDER BY colum
أو للتصاعدي
ORDER BY colum DESC
فمثلاً لاستخراج جمع البيانات مع الترتيب التصاعدي حسب الإسم الأول :

SELECT * FROM Tb_Main ORDER BY FName DESC;

ويمكننا عمل مستويين للترتيب - كما هو شائع - وذلك باستخدام الفاصلة ، فمثلاً للترتيب حسب الإسم الأول ومن ثم الإسم الأخير ولكن تنازلياً هذه المرة :

SELECT * FROM Tb_Main ORDER BY FName,Lname ;

أيضاً لاستخراج الإسم الأول تحت مسمى MyName فإننا نستخدم As وذلك بالشكل التالي :

Select Fname as MyName From Tb_Main;

وسنستفيد من As لاحقاً في عمليات الاستعلام باستخدام الدوال .

يمكننا أيضاً اجراء العمليات البسيطة على جمل البحث ، فمثلاً لاستخراج أعمار الأصدقاء بزيادة عشرة سنوات :

SELECT Fname,Age+10 as Age2 FROM Tb_Main;

لاحظ أنك تضطر إلى اعادة تسمية الحقل الناتج وإلا فإن Access سوف يضع له اسماً من عنده .

ومثلاً لدمج الإسم الأول مع الإسم الأخير :

SELECT Fname+ " " + LName As CName FROM Tb_Main;

استخدام الجمل الشرطية مع أوامر الإستعلام
استخدام معامل المساواة والمعاملات الرياضية .

تأخذ صيغة استخدام المساواة كشرط في عملية الإستعلام الصيغة التالية :

Select * From Tb_Main Where Field = Value;

ويمكننا استخدام > أو < أو => أو =< أو <> وطبعاً = .
وأخيراً معاملين جدد سنشرحهم بإذن الله لاحقاً وهما Like و Between .

فمثلاً للاستعلام عن الأصدقاء الذي تساوي أعمارهم 18 سنة :

SELECT * FROM tb_Main WHERE age = 18;

ولعرض أسماء من هم أصغر من 50 سنة :

SELECT FName,LName FROM tb_Main where age < 50;

وسنضع Value بين علامتي تنصيص مفردة في حالة كانت نصوصاً وذلك بالشكل التالي - للبحث عن الأشخاص والذين لهم الإسم ( أحمد ) :

SELECT * FROM tb_Main WHERE Fname = 'ahmed';

كما سنضع علامتي # عند البحث عن تواريخ ، ولا توجد أمثلة لتاريخ في قاعدة البيانات ، لكنها تأخذ صيغة شبيهه بالتالي :

Select * Form Table1 Where Date > #12/03/04#;

والآن لندمج بعض ما تعملناه في جملة واحدة :
لاستخراج الإسم الأول والأخير من الجدول بترتيب تنازلياً ومدمجة سوياً تحت اسم Name والتي تحقق شرط أن العمر أكبر من 17 :

SELECT Fname & " " & Lname AS MyName FROM tb_Main WHERE age > 17 ORDER BY FNAME, LName DESC;

والآن : ماذا لو أردنا البحث بتحقيق مجموعة شروط أو أحدها أو تحقيق شرط مع انتفاء آخر ؟
من أجل هذا الغرض نستخدم المعاملات المنطقية البسيطة .


لدينا نوعين من المعاملات المنطقية البسيطة الأكثر استخداماً :
And : تعطي قيمة صحيحة True في حالة كان الطرفين صحيحاً والباقي false .
Or :
تعطي قيمة صحيحة True في حالة كان أحد الطرفين صحيحاً وإلا فإنه يعطي false .

والآن إلى مثال سريع ، سنبحث عن الأشخاص الذين يكبر عمرهم عن 17 بشرط ألا يكونوا متزوجين :

Select Fname from tb_main where age > 17 and marry = false;

لنفترض أيضاً أننا نريد معرفة الأشخاص الذين تزيد أعمارهم عن 17 سنة وليس لديهم بريد الكتروني :
قبل أن تجرب المثال قم بتشغيل قاعدة البيانات وقم بحذف البريد الإلكتروني لبعض الأشخاص ، واكتب للبعض كلمة No Mail وللآخرين No .
الآن انظر الأمر التالي :

SELECT * FROM Tb_Main WHERE age>17 And (Email='No' or Email='No Mail');

سنفصل الآن هذه الجملة :
* الشرط الأول : Age > 17 : العمر أكبر من 17 .
*
الشرط الثاني : Email = 'No' : البريد الإلكتروني يحتوي على كلمة No .
*
الشرط الثالث : Email = 'No Mail' : البريد الإلكتروني يحتوي على كلمة No Mail .

واستخدمنا نوعين من المعاملات المنطقية And و Or .
متى تحقق الشرط الأول ( العمر أكبر من 17 ) فإنه ينتظر تحقيق أحد الشرطين الذين تدمج بينهم Or .
وعندها يعرض السجل الذي يحقق قيمة True لهذا التعبير .

قبل النهاية كن حذراً عند استخدام And مع Or في جملة واحدة ، وذلك عن طريق ترتيب الأقواس بطريقة صحيحة .

استخدام المعامل Like .

نستخدم المعامل Like للبحث عن الكلمات المشابهه لتعبير معين ...
ونستخدم للمعامل Like الصيغة التالية :

Select * From Table Where Field Like '*Name*';

نستخدم * للدلالة على وجود أحرف ما ... وقد نستخدمها في البداية ، أو النهاية ، أو كليهما . وسيتضح الأمر في الأمثلة :
لعرض الأشخاص الذين قد تحتوي أسماءهم الأولى على hm ... لذا سنستخدم جملة استعلام بهذا الشكل :


SELECT * FROM Tb_Main WHERE FName like '*hm*';

أما لو أردنا البحث عن الأشخاص الذين تبدأ أسماءهم بحرف A لذا لن نضع * قبل كلمة البحث :

SELECT * FROM Tb_Main WHERE FName like 'A*';

ولو أردنا البحث عن الأشخاص الذين ينتهي اسمهم بحرف معين سنضع * في البداية دون النهاية .

* في MS SQL Server نستخدم % بدلاً من * .

مما سبق نستنتج أن * تعني أي عدد من الحروف ، لكن ماذا لو أردنا تحديد عدد الحروف ؟
في هذه الحالو نستخدم "؟" والتي ذكرناها في درس البحث في البداية .

إذن : ماذا لو أردنا أن نبحث عن الأشخاص الذين تبدأ أسماءهم بحرف A بشرط أن يكون عدد حروفهم 3 فقط
.


SELECT * FROM Tb_Main WHERE FName like 'A??';

والآن إلى مثال واقعي نسبياً . جرب تعديل حقل العنوان Address للأشخاص بحيث يحتوي على أكثر من معلومة اضافة للمدينة .
في هذه الحالة نستطيع استخراج الأشخاص الذين يسكنون مدينة واحدة عن طريق الشرط Like . هل تعرف كيف ؟؟؟

استخدام المعامل Between .

نستخدم هذا المعامل للبحث ضمن نطاق معين ، وأشهر استعمال لهذا المعامل هو استخدامه في البحث ضمن التواريخ .
يأخذ البحث باستخدام between الصيغة التالية :


SELECT colum FROM table WHERE field BETWEEN v1 AND v2;

فمثلاً لاستخراج الأشخاص الذين تترواح أعمارهم بين 20 و 60 :


SELECT *
FROM tb_main
WHERE age between 20 and 60;


ويمكن استخدام نفس الطريقة مع الأسماء ، والتواريخ بطبيعة الحال .

 

 


 

ا .

استخدام لغة ( تقنية ) الإستعلامات بطريقة TSQL (2) .

سنبعد في درسنا هذا عن TSQL مؤقتاً عن جو البحث وسنتحدث عن اضافة وحذف الجداول في قواعد البيانات .

سنبدأ أولاً بصيغة انشاء جدول وذلك بالشكل التالي :

CREATE TABLE tb1 ( colum type, colum type,........);

 

وكمثال على ذلك ... لننشئ جدولاً تحت اسم Tb2 يحتوي على حقلين : الإسم Name من نوع ( نص - String ) والآخر Age من نوع Number :

CREATE TABLE tb1 (name text,age number );

 

إذن ماذا لو أردنا أن نحدد حجم حقل العمر Name بخمس خانات فقط ... إذن ضع عدد الخانات بين قوسين مع تعيين نوع بيانات الاسم ك Text وذلك بالشكل التالي :

CREATE TABLE tb1 (name text(6),age number );

 

آخر نقطة سأشرحها في انشاء الجداول هي كيف نجعل الحقل لا يقبل فراغ - Null ... ولنجرب هذا المثال مع الإسم أيضاً :

CREATE TABLE tb1 (name text(6) Not Null,age number );

 

ولكن ماذا عن الحذف ... في الواقع هذا الكود يقوم بحذف الجدول الذي قمنا بإنشاءه تواً :

DROP Table tb1;

 

ولو كان هذا الجدول مرتبطاً بعلاقات فلا بد من تحديثها باضافة CASCADE إلى آخر الكود وذلك بالشكل التالي :

DROP Table tb1 CASCADE;

 

لا تنسى أن تنشأ الجدول بعد حذفه لأننا سوف نعمل عليه مجدداً .

والآن سنبدأ في اضافة حقول إليه وذلك بعد عملية الانشاء - أعتقد أن الفرق بين الجدول وقاعدة البيانات والحقول أصبح واضحاً - .

نستطيع اضافة الحقول بصيغة عامة بالطريقة التالية :

ALTER TABLE tb1 ADD colum type;

 

فلنضف حقلين جديدين : الأول هو تاريخ الميلاد ، والثاني النوع ( ذكر - أنثى ) .

ALTER TABLE tb1 ADD birth_Date date,Gender Text;

 

والآن لنحذف أحد هذه الحقول وليكن حقل Gender ... لاحظ أننا دائماً نضيف كلمة CASCADE لتحديث العلاقات - في حال وجودها - ، وذلك بالشكل التالي :

ALTER TABLE tb1 DROP gender CASCADE;

 

والآن سوف نتعلم اضافة السجلات ، وسوف نستخدم Tb_Main كجدول لنجرب أوامرنا عليه ، والآن إلى الصيغة العامة لأمر الإضافة :

INSERT INTO table VALUES (v1, v2,......);

 

لاحظ أننا سنمرر القيم واحداً وراء الثاني وتفصل بينهم فاصلة ، مع مراعاة وضع النصوص بين علامتي تنصيص "" والتواريخ بين علامتي ## .

سنمرر القيم التالية : الرقم - الإسم الأول - الإسم الأخير - رقم الهاتف - العمر - العنوان - البريد الإلكتروني - السنة - اللغة - الموقع - متزوج/لا - ملاحظات .

وذلك بالشكل التالي :

Insert into tb_main values(11,'ahmed','gamal',6666666,18,'Cairo','Hammada2091','First Year','','',false,'');

 

تواحهنا مشكلة وهو أننا جعلنا الرقم حقلاً وحيداً - لا تتكرر قيمه - لذا وجب علينا في كل مرة أن نغير الرقم ... برمجياً يمكننا ذلك ولكن من خلال الأكسيس جرب ازالة رقم 11 ووضع كلمة MyNumber بالشكل التالي :

Insert into tb_main values(MyNumber,'ahmed','gamal',6666666,18,'Cairo','Hammada2091','First Year','','',false,'');

 

جرب تنفيذ جملة الإستعلام وستظهر لك رسالة تطلب منك ادخال قيمة MyNumber . ضع قيمة بشرط ألا تكون مكررة وسوف يتم اضافتها في الجدول .

* ملاحظة :

إن هذا الجزء في الأكسيس سيقابله متغير في الفيجوال بيسك .. كذا الامر بالنسبة للبحث .

هل تتذكر جملة البحث التالية :

Select * From Tb_Main where name='ahmed';

جرب أن تزيل Ahmed وضع متغيراً MyName بالشكل التالي :

Select * From Tb_Main where name = myname;

وهذا يعطيك تحكماً فيما ترغب في البحث عنه ...

التعديل :

الصيغة العامة لتعديل بيانات سجل بالشكل التالي :

UPDATE table_name SET colum1 = v1 , colum2 = v2 WHERE colum = v;

 

سنجرب الآن مثالاً لجعل العمر = 28 والموقع = www.vb4arab.com للشخص الذي اسمه الأول ( Ahmed ) والاخير ( Gamal ) :

Update tb_main set age=25 , site='www.vb4arab.com' where fname='ahmed' and lname='Gamal';

 

ولكن ماذا لو كان الأمر يشمل أكثر من سجل . في الواقع هذا الأمر شائع ويشبهه المثال التالي :

Update tb_main set fname='Ahmad' where fname='ahmed';

 

قد يستخدم مثل هذا المثال لتوحيد الأسماء خصوصاً مع اللغة العربية ، كما يمكن أن يستخدم أيضاً لتجاهل تأثير الهمزة في عمليات البحث ، فمثلاً يصبح أحمد = احمد .

ولكن ماذا لو أردنا تعميم التغييرات ... في هذه الحالة لن نضع الشرط ، ويمكن وضع أمر شبيه بالأمر التالي لزيادة الأعمار 5 سنوات :

Update tb_main set age=age+5;

 

يعتبر هذا الأمر من أكثر الأوامر شيوعاً في قواعد بيانات الشركات ... فمثلاً يستخدم لزيادة رواتب الموظفين بنسبة معينة ( يمكن أن تكون زيادة ثابته أو نسبيه ) .

ولكن ماذا عن الحذف ... في الواقع تتخذ جملة البحث صيغة عامة كالتالي :

DELETE FROM table WHERE colum = value;

 

ويمكن أن يكون الحذف تحت تأثير تحقق أكثر من شرط .. في المثال التالي سوف نحذف جميع الأشخاص الذين تزيد أعمارهم عن الأربعين :

Delete from tb_main where age>40;

 

ولكن ماذا عن حذف كامل محتويات جدول ما ... هذه هي الطريقة :

DELETE * FROM table;

 

الدوال في الاستعلامات .

تستخدم العديد من الدوال ضمن طيات جمل الاستعلام ، وهي شائعة الاستخدام ، ومريحة ، وتعيد قيمة وحيدة - لا تعيد جدول - سنتعرف على بعض الدوال مع بعض الأمثلة خلال هذا الدرس .

ولننظر نظرة سريعة إلى الصيغة العامة لاستخدام الدوال والتي تأخذ الشكل التالي :

SELECT func(colum) FROM table WHERE condition;

 

الدالة AVG :

تعطينا هذه الدالة متوسط حقل ما ، ولحساب متوسط الأعمار في قاعدة البيانات مثلاً نكتب أمراً كالتالي :

Select AVG(Age) from tb_main;

ولك ان تتخيل ماذا سنفعل لو لم نستخدم هذه الدالة ، كنا سندور على جميع السجلات حيث نجمع ارقام كل سجل ثم ننتقل إلى التالي وهكذا - برمجياً - .

أيضاً يمكننا استخدام الدالة بشرط ... فمثلاً لحساب متوسط أعمار الأشخاص الذين لا تزيد أعمارهم عن 25 :

SELECT AVG(Age) FROM tb_main where age < 25;

لو لاحظت لوجدت أن ناتج الدالة يظهر في حقل تحت اسم Expr100 أو ما شابه ... لذا قم - إذا كنت تريد - باعادة تسمية حقل الناتج عن طريق As كما تعلمنا سابقاً وبالشكل التالي :

SELECT AVG(Age) as AVGAGE FROM tb_main WHERE age < 25;

 

لاحظ أن الدالة سوف تتجاهل السجلات الفارغة ...

الدوال Sum,Max,Min :

تعطي هذه الدوال المجموع - الأكبر - الأصغر على التوالي ، وهذا مثال على أكبر عمر في قاعدة البيانات :

SELECT max(Age) AS mxAGE FROM tb_main;

 

لا تنس أن بإمكاننا وضع شرط لعملية الإستعلام .

الدالة Count :

وتعيد هذه الدالة عدد السجلات ولها صورتان تعمل مع أكسيس ... أما الصورة الثالثة فهي لا تعمل على الاكسيس :

الصيغة الأولى : Count(colum) ... وتعيد عدد السجلات التي لم يكن هذا الحقل فارغاً فيها .

الصيغة الثانية : Count(*) ... وتعيد عدد السجلات دون النظر إلى إذا ما كانت فارغة أم لا .

أما الصيغة الثالثة : COUNT(DISTINCT Colum( حيث تقوم بعد السجلات مع تجاهل المكرر منها .

ولنر مثالاً على الصيغة الثانية :

Select count(*) From Tb_Main;

 

لا تنس أن بإمكانك وضع شرط لعملية العد .

كانت هذه بعض الدوال البسيطة والاكثر شهرة في TSql والآن ، ماذا لو كانت لدينا علاقات ونرغب في العمل عليها .

في مثل هذه الحالة ... نريد الحصول على معلومات البطاقة الشخصية الخاصة باسم ما وذلك من Tb_R2 - لاحظ أنه لا يوجد حقل للاسم في الجدول الثاني - .

SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from

FROM tb_main, tb_r1

WHERE tb_main.Number = tb_r1.Number;

 

دعنا الآن نلاحظ الفروق بين هذه الطريقة والطريقة السابقة :

أولاً : نقوم بكتابة اسم الجدول.اسم الحقل وذلك مهم لأننا نتعامل مع أكثر من جدول .

ثانياً : نقوم بكتابة اكثر من جدول بعد عبارة From لأننا نريد النواتج من أكثر من جدول .

ثالثاً : السطر الأخير من جملة الاستعلام هو لكي يعرض المعلومات التي تتشابه أرقامها في الجدولين سوية .

دعنا الآن نجرب مثالاً آخراً ... وذلك بالاستعلام عن كافة المعلومات التي تتعلق بالأصدقاء الذين تزيد أعمارهم عن 20 سنة .

SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from

FROM tb_main, tb_r1

WHERE tb_main.Number = tb_r1.Number and tb_main.age >25;

 

*** واجب سريع : حاول أن تنشئ جملة استعلام تقوم بعرض اسماء الطلاب + ارقام البطاقات الشخصية + فصيلة الدم + عدد الكتب الدراسية لكل صديق يحتوي اسمه على h ( لا تنسى عبارة like ) .

والآن نريد تطبيق امثلة جديدة ، ولكي نبدأ في تطبيق أمثلة هذا الدرس لا بد أن يكون بعض الأصدقاء لديهم سجلات في الجدول الثاني والبعض الآخر لا .

ومازال حديثنا حول العلاقات وما يتعلق بها ... وسنتحدث عن الدالة Join .

النوع الأول : Inner Join :

هي الطريقة العادية والتي تحدثنا عنها في الدرس السابق تعطينا النواتج في حال كان شرط العلاقة متحققاً في كلا الجدولين .

بمعنى : جرب أن تحذف بعض سجلات الأصدقاء من الجدول الثاني ، وستجد أن معلوماتهم - حتى الأساسية - لن تظهر .

هذا النوع من الربط يطلق عليه Inner Join وهو الافتراضي ... ويمكننا كتابته بالشكل التالي للتفريق بين الأنواع المختلفة :

SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from

FROM tb_main inner join tb_r1

on tb_main.Number=tb_r1.Number;

لاحظ أننا استبدلنا Where ب on كما وضعنا inner join بين اسمي الجدولين .

النوع الثاني : Left Join :

في هذا النوع يعرض جميع بيانات الجدول الأول ( على اليسار ) ومن ثم يعرض البيانات المقابلة في الجدول الثاني .

لاحظ في هذا النوع أمرين :

* إذا كانت هناك سجلات ( على اليسار ) لا تقابلها سجلات على اليمين فإن اليسار يعرض ويعرض اليمين فارغاً .

* وإذا كانت هناك سجلات ( على اليمين ) ليس لها مقابل على اليسار فإنها لا تُعرض أبداً .

مثال هذه النوعية :

SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from

FROM tb_main Left JOIN tb_r1 ON tb_main.Number=tb_r1.Number;

 

النوع الثالث : Right Join :

هو النوع العكسي تماماً للعملية السابقة ، وهذا مثال عليه :

SELECT tb_main.Fname, tb_main.lname, Tb_R1.passport, tb_r1.bclass, tb_r1.from

FROM tb_main Right JOIN tb_r1 ON tb_main.Number=tb_r1.Number;

 

في النهاية لا تنس ان تراجع سلسلة دروس TSQL لمزيد من الفائدة ، أيضاً لا تنس ان SQL لا زالت تحتوي على الكثير من الأوامر والتي يمكنك البحث في المزيد منها على الانترنت .

بهذا نكون بحمد الله قد اتممنا الجزء الأول من الدورة الكاملة ، أي الدورة الأولى، وإلى اللقاء في الدورة القادمة .


  • Currently 85/5 Stars.
  • 1 2 3 4 5
29 تصويتات / 2364 مشاهدة
نشرت فى 30 أكتوبر 2005 بواسطة mara

ساحة النقاش

عدد زيارات الموقع

946,024