تعرّفنا في الدروس السابقة على إنشاء الجدول في قاعدة البيانات وإضافة البيانات إليه والتعامل معها من حيث التعديل والإضافة. سوف نبدأ في هذا المقال بالتعرف على أشهر جمل لغة الاستعلام البنائية، وهي جملة الاستعلام Select Statement، حيث سنتكلم عن كيفية كتابة جملة الاستعلام، وأشكالها، وكيفية ترشيح البيانات وتحديد الأعمدة التي نريدها وغيرها من المواضيع.
جملة الاستعلام
تجلب جملة الاستعلام SELECT
بيانات جدول أو أكثر بعد الاستعلام عن وجود هذه الجداول في قاعدة البيانات، ونقصد بالاستعلام هنا ماذا نريد؟ ومن أين؟
ماذا نريد من أعمدة وسجلات، ومن أين، أي من أي الجداول نأتي بالمعلومات. البيانات الناتجة عن تنفيذ جملة الاستعلام تسمى مجموعة البيانات الناتجة Result Data-Set.
الصيغة العامة لجملة الاستعلام
SELECT column1, column2, ... FROM table_name [WHERE where_condition] [GROUP BY group_by_expression] [ORODER BY order_by_expression];
في بداية كل جملة استعلام نكتب كلمة SELECT
(جمل SQL غير حساسة لحالة الأحرف) ومن ثم نُتبعها بأسماء الأعمدة التي نريد الاستعلام عنها، أو نستبدل أسماء الأعمدة برمز *
والذي يعني كل الأعمدة، ثم نكتب كلمة From
والتي يليها اسم الجدول أو أسماء الجداول التي تحتوي على البيانات التي نريدها.
ما بين الأقواس المعكوفة هي جمل إضافية تقوم بمهام معينة في جملة الاستعلام وهي كالتالي:
-
Where
: هي جملة الشرط والتي ترشّح البيانات بناءً على الشرط الموجود بعدها. -
Group By
: تجمّع البيانات الناتجة من تنفيذ جملة الاستعلام بناءً على جملة التجميع التي تليها. -
Order By
: ترتّب البيانات تصاعديا أو تنازليا بناءً على جملة الترتيب التي تليها.
سنتطرق لتفاصيل الجمل الإضافية في هذا المقال وفي مقالات قادمة.
مثال على جملة الاستعلام
لو أردنا الاستعلام عن كافة البيانات الموجودة في جدول Persons
والذي تكلمنا عنه في المقال السابق، ننفذ الجملة التالية:
SELECT *
FROM Persons;
كما ذكرتُ سابقا، فإن *
تعني عرض جميع البيانات، حيث ستُظهر كافة الأعمدة الموجودة في الجدول والسجلات التي يحتويها. وسيكون ناتج الجملة البيانات التالية:
Person_ID | First_Name | Last_Name | Age |
101 | Ibrahim | Mohammed | 21 |
102 | Mohammed | Khaled | 25 |
103 | Saleem | Yaser | 25 |
104 | Aly | Mohammed | 25 |
105 | Reem | 25 |
لو أردنا أن نستعلم عن اسم الشخص الأول وعمره، نقوم بتنفيذ الجملة التالية:
SELECT First_Name, Age
FROM Persons;
لاحظ أننا فصلنا بين الأعمدة التي نريد إظهاراها بفاصلة عادية ,
، والعمود الأخير لا نكتب بعده فاصلة، بل كلمة From مباشر.
وسيكون ناتج الجملة البيانات التالية:
First_Name | Age |
Ibrahim | 21 |
Mohammed | 25 |
Saleem | 25 |
Aly | 25 |
Reem | 25 |
الاستعلام عن السجلات الفريدة
في بيانات الجدول، ستجد في كثير من الأحيان أن هناك تكراراً للقيم في عمود ما، وقد تحتاج إلى الاستعلام عن القيم دون تكرار، فمثلا، في جدول الأشخاص Persons
السابق، ستلاحظ أن عمود العمر Age
يحتوي على 5 قيم، ولكن توجد 4 سجلات من نفس القيمة وهي 25، وهنا يأتي دور جملة الاستعلام الفريد DISTINCT Select
.
تُرجع جملة الاستعلام عن السجلّات الفريدة سجلات دون تكرار في القيم وصيغتها العامة:
SELECT DISTINCT column1, column2, ...
FROM table_name;
لو نفذنا الجملة التالية:
SELECT Age
FROM Persons;
سيكون الناتج:
Age |
21 |
25 |
25 |
25 |
25 |
ولكن لو استخدمنا جملة الاستعلام عن السجلّات الفريدة
SELECT DISTINCT Age
FROM Persons;
ستكون النتيجة كالتالي:
Age |
21 |
25 |
ترشيح السجلات
لإجراء عملية ترشيح السجلات، سنضيف إلى جملة الاستعلام جملة شرطية تبدأ بالكلمة Where
ويتبعها الشرط (أو مجموعة الشروط) الذي نريد والذي سيُرشِّح السجلات بحيث تبقى السجلات التي تحقق الشرط في مجموعة البيانات الراجعة، وتُستبعد السجلات التي لا تحقق الشرط.
الصيغة العامة لجملة الاستعلام والتي تحتوي على شرط لترشيح السجلات:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
أمثلة على ترشيح البيانات في جدول Persons
-
الحصول على البيانات الكاملة للشخص الذي له
Person_ID
يساوي101
:
SELECT *
FROM Persons
WHERE Person_ID = 101;
- الاستعلام عن أسماء الأشخاص الذين تساوي أعمارهم 25 سنة أو تزيد عليها:
SELECT First_Name, Last_Name
FROM Persons
WHERE Age >= 25;
-
الاستعلام عن الاسم الأول والعمر للأشخاص الذين ليس لديهم قيمة للعمود
Last_Name
وأعمارهم فوق22
:
SELECT First_Name, Age
FROM Persons
WHERE Age > 22 AND Last_Name IS Null;
عمليات المقارنة في جملة Where
يلخص الجدول التالي العمليات التي من الممكن استخدامها في بناء شرط جملة Where
:
العمليّة | الوصف | مثال |
= | يساوي | Age = 20 |
<> | لا يساوي (في بعض النظم تكتب != ) | Age <> 20 |
> | أكبر من | Age > 20 |
< | أصغر من | Age < 20 |
>= | أكبر من أو يساوي | Age >= 20 |
<= | أصغر من أو يساوي | Age <= 20 |
BETWEEN … AND | بين قيمتين أو يساويهما | Age BETWEEN 20 AND 25 |
LIKE | مطابقة نمط | First_Name LIKE “%Ibr%” |
IN | يوجد ضمن قيم معينة | Age in (20,23,25) |
ملاحظة هامة: نستطيع الجمع بين أكثر من شرط في جملة Where
وذلك باستخدام العمليات المنطقية NOT
(للنفي)، AND
(وجوب تحقّق جميع الشروط) أو OR
(يكفي تحقّق شرط واحد من الشروط).
ترتيب السجلات
نستطيع الحصول على البيانات الراجعة مرتبة تصاعديا أو تنازليا بعد تنفيذ جملة الاستعلام، وذلك باستخدام جملة Order By
.
ترتّب الجملةُ السجلات تصاعديًّا وهو الخيار المبدئي، ولترتيبها تنازليًّا نستخدم الكلمة المحجوزة DESC
، كما أنه يمكن الترتيب باستخدام عمود واحد أو أكثر.
الصيغة العامة لجملة الاستعلام مع جملة الترتيب هي:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
فمثلا لو أردنا أن نستعلم عن كل البيانات من جدول Persons
بحيث تكون البيانات مرتبة ترتيبا تصاعديا حسب عمود First_Name
، نستخدم الجملة التالية:
SELECT *
FROM Persons
ORDER BY First_Name;
وستكون النتيجة:
Person_ID | First_Name | Last_Name | Age |
104 | Aly | Mohammed | 25 |
101 | Ibrahim | Mohammed | 21 |
102 | Mohammed | Khaled | 25 |
105 | Reem | 25 | |
103 | Saleem | Yaser | 25 |
في حال أردنا أن نرتب نفس البيانات بطريقة تنازلية نستخدم الجملة التالية:
SELECT *
FROM Persons
ORDER BY First_Name DESC;
وتكون نتيجة الاستعلام كالتالي:
Person_ID | First_Name | Last_Name | Age |
103 | Saleem | Yaser | 25 |
105 | Reem | 25 | |
102 | Mohammed | Khaled | 25 |
101 | Ibrahim | Mohammed | 21 |
104 | Aly | Mohammed | 25 |
تجميع البيانات باستخدام Group By:
تُستخدم جملة تجميع البيانات غالبا مع دوال التجميع Aggregate Functions بهدف تجميع وترتيب البيانات الناتجة عن الاستعلام حسب عمود أو أكثر.
سوف نتكلم عن جملة تجميع البيانات في مقال متقدم لعلاقته بموضوع الدوال الموجودة في SQL.
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.