الجزء
التاسع: جملة الأستعلام الأنتقائية
SELECT Query Statement
في هذا الجزء سأشرح معظم استخدامات
جملة الأستعلام الSELECT:
·
استرجاع البيانات من جميع الحقول او حقل معين.
·
استرجاع سجلات متميزة اي الشبيه لا يتم اظهارها عن طريق DISTINCT
·
تصفية Filteringالبيانات المسترجعة عن طريق فقرة WHERE
·
ربط عدة شروط لتصفية البيانات المسترجعة عن طريق AND و OR
·
ترتيب السجلات عن طريق Order by
·
أختيار عدد محدد من الجدول عن طريق top
لجعل الSSMS يقوم بكتابة جملة الأستعلام الSELECT كما في الصورة ادناه, اذهب الى الجدول الذي تريد كتابة جملة الأستعلام
الSELECT له وأضغط على الزر الأيمن للماوس واختر Script Table as وبعدها اختر SELECT
To وبعدها اختر
New Query Editor Window
ستظهر لك نافة كتابة جمل الأستعلام
وبها الكود التالي:
USE [test]
GO
SELECT [ID]
,[Name]
,[Email]
,[GenderID]
,[age]
FROM [dbo].[tblPerson]
GO
ملاحظة: [dbo]هو الSchema اي الهيكلية التي تعتمدها قاعدة البيانات [test] عند انشاء جداول, وكما تلاحظ بعد كلمة FROM [dbo].[tblPerson] هذا مايسمى المسار الكامل
للجدول ماعدا اسم قاعدة البيانات تم ذكره بواسطة الكلمة المفتاحية USE ,يمكنك كتابة الكود اعلاه هكذا :
SELECT [ID]
,[Name]
,[Email]
,[GenderID]
,[age]
FROM [test].[dbo].[tblPerson]
GO
عند تنفيذ جملة الأستعلام اعلاه
سوف تسترجع كل البيانات من كل الحقول في جدول tblPerson يوجد طريقة
اخرى مختصرة لفعل ذلك عن طريق:
SELECT * FROM [test].[dbo].[tblPerson]
ملاحظة: لايفضل استعمال هذه الجملة
عند استرجاع كافة البيانات, من ناحية اداء قاعدة البيانات Performance Issue
ولكن عند التدريب لابأس بذلك (للسهولة).
ولكن عند التدريب لابأس بذلك (للسهولة).
* تعني جميع او كل
حيث بالأوامر اعلاه سوف تسترجع
كافة البيانات من كل الحقول, ولأسترجاع البيانات من حقل معين فقط قم بتحديد ذلك
الحقل الذي تريده:
SELECT [Email] FROM [test].[dbo].[tblPerson]
للعلم فقط قمت بأضافة حقل جديد لجدول tblPerson واسم هذا الحقل
city وأضفت قيد القيمة الأفتراضية له غير معرفة:
alter table [test].[dbo].[tblPerson]
add city nvarchar(20) not null
constraint DF_tblPerson_city
DEFAULT 'Not defined'
والأن السؤال هو: اذا كان في الجدول مدن متشابهَ كالأتي:
جميل وصفاء من بغداد وانا اردتُ استرجاع المدن الغير
متشابه:
يمكن ذلك بأستخدام DISTINCT امام اسم الحقل
سؤال لا تأخطأ به ابداً: اذا استرجعت اسم الشخص مع اسم
المدينة فالناتج كالأتي :
لماذا اسم المدينة تكررت على الرغم من استخدام DISTINCT ؟ الجواب هو
ان ال DISTINCT يعمل على مقارنة البيانات من كل الحقول التى تعطى اي بعبارة اخرى :
صفاء من بغداد لا يساوي جميل من بغداد لأنهما بنفس المدينة ولكن يختلفان هذه
الفكرة.
والأن كيفية استرجاع البيانات للأشخاص الذين هم من بغداد
فقط؟
الجواب هو عن طريق WHERE حيث بهذه
الفقرة سيتم فلترة البيانات.
SELECT [city],[Name]
FROM [test].[dbo].[tblPerson]
WHERE [city]='بغداد'
GO
ولكن ماذا لو اردنا ان
نسترجع بيانات الأشخاص الذين اعمارهم التي تساوي 23 او
54 او 34
الجواب هو عن طريق
استخدام OR لأننا استخدما عبارة "او"
SELECT [city],[Name]
FROM [test].[dbo].[tblPerson]
WHERE [age]=23 OR [age]=54 OR [age]=34
GO
يوجد طريقة اخرى لعمل ذلك بأستخدام ال:Operators
حيث بدل استخدام
OR عدة مرات يمكن اختصار ذلك بأستخدام IN تعمل بنفس الفكرة :
SELECT [city],[Name]
FROM [test].[dbo].[tblPerson]
WHERE [age] IN (23,54,34)
GO
ماذا لو قلنا نريد كل الأشخاص الذين اعمارهم تتراوح
مابين 23 و 50 ؟
الجواب سهل بأستخدام BETWEEN
SELECT [city],[Name]
FROM [test].[dbo].[tblPerson]
WHERE [age] BETWEEN 23 AND 50
GO
والأن اريد اسماء الأشخاص الذين اسمهم يبدأ بحرف الجيم
(ج)؟
الجواب سهل بأستخدام Like
SELECT [city],[Name]
FROM [test].[dbo].[tblPerson]
WHERE [Name] Like 'ج%'
GO
لاحظ في المثال اعلاه استخدم الرمز (%) مع ال Like حيث يرمز
الى اي سلسلة من الحروف والأرقام بعد حرف الجيم شرط ان يبدأ الأسم بحرف الجيم (ج)
سؤال اخر: اريد اسماء الأشخاص الذين يبدأون بحرف مجهول
وينتهون ب"مال" :
الجواب:
حيث رمز ال Underscore(_) يشير الى مكان واحد فقط لحروف او رقم
والناتج هو جمال لأنه يبدأ بحرف الجيم وينتهي بسلسلة "مال"
سؤال اخر: ماذا لو اردت استرجاع اسماء الأشخاص الذين
اسماءهم تبدأ بحرف الصاد(ص) والجيم(ج) والعين(ع)؟
الجواب هو بأستخدام التعبير :
Like '[ص ع ج]%'
سؤال اخر: ماذا لو اردت استرجاع اسماء الأشخاص الذين
اسماءهم لا تبدأ بحرف الصاد(ص) والجيم(ج) والعين(ع)؟
الجواب هو بأستخدام التعبير :
Like '[ص^ ع ج]%'
سؤال ماذا لو اردت ترتيب البيانات المسترجعة في حقل
الأسم حسب الحروف الأبجدية ؟
الجواب بأستخدام ORDER BY مع تحديد اسم الحقل ونوع الترتيب ASC او DESC
اخر سؤال لدرس اليوم افترض ان لدينا اعداد هائلة من
البيانات واردت ان اعرف 10% من هذه البيانات اي اريد استرجع 10% من البيانات من
ذلك الجدول؟
الجواب بأستخدام TOP Number with or without PERCENT
Comments
Post a Comment