نسخة تجريبية من المنقذ: الاشتراك المدفوع والمساعد الذكي لم يُفعَّلا بعد، والمحتوى متاح للتجربة.

الوحدة 1: الوحدة الأولى: قواعد البيانات SQLite في Python

الدرس 5الاستعلام عن البيانات Querying Data

من كتاب الطالبتقنية المعلومات 11 — الصف الحادي عشر — الفصل الدراسي الأول · من صفحة 67

أهداف الدرس

  • أعرّف مفهوم الاستعلام Database Query لاسترجاع البيانات من قواعد البيانات.
  • أوضّح مفهوم الشروط المنطقية Logical Expressions وأهميتها في تحديد الصفوف المطلوب التعامل معها.
  • أميّز بين الشروط البسيطة Simple Conditions والشروط المركبة Compound Conditions.
  • أتعرّف على العوامل الشرطية المختلفة في SQLite وكيفية استخدامها.
  • أكتب استعلامات SQL في بيئة Python باستخدام مكتبة sqlite3، وأنفّذها وأسترجع النتائج باستخدام دوال fetch المختلفة.
  • أطبّق خطوات إنشاء وتنفيذ استعلام في SQLite ضمن بيئة تطوير Python، وأعرض نتائجه باستخدام الحلقات التكرارية.

الشرح خطوة بخطوة

1 / 240:00

الموضع محفوظ على هذا الجهاز.

المقطع 1 من 7الاستعلام عن البيانات Querying Data0:22

لا يوجد صوت عربي على هذا الجهاز. الشرح الصوتي المسجّل سيتوفر لهذا الدرس قريبًا

مقاطع الدرس

0 من 7 مكتمل

الاستعلام عن البيانات Querying Data69)

تعريف
يُعد «الاستعلام» أحد العمليات الرئيسية في إدارة قواعد البيانات، ويُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.69)

الشروط في SQLite69)

تعريف
هي «التعبيرات المنطقية» Logical Expressions التي تُستخدم لتحديد الصفوف التي يجب التعامل معها عند تنفيذ أوامر مثل (الاسترجاع، الحذف، التحديث) على قاعدة البيانات.69)
  1. النوع الأول: «الشرط البسيط»، وهو تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، باستخدام عامل مقارنة واحد.Simple Condition
  2. المثال الذي يذكره الكتاب للشرط البسيط هو مقارنة السعر بالقيمة ثلاثين.(price> 30)
  3. وعوامل المقارنة التي يذكرها الكتاب في هذا الموضع هي.(=، >، <، =>، =<، ><)
  4. النوع الثاني: «الشرط المُركب»، ويتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق.Compound Condition (AND, OR)
مفهوم
تُستخدم العوامل الشرطية في SQLite لتحديد الشروط التي يجب أن تتحقق عند استرجاع البيانات، أو تحديثها، أو حذفها داخل قاعدة البيانات. وتُعد هذه العوامل أداة مهمة للتحكم في نتائج الاستعلامات.69)
  1. النوع الأول: المساواة، وعامله الشرطي علامة يساوي، ومثاله أن يكون السعر عشرين.= price = 20
  2. النوع الثاني: الاختلاف، وله عاملان شرطيان، ومثاله أن يكون السعر مختلفًا عن عشرين.!= >< price <> 20 price != 20
  3. النوع الثالث: أكبر من أو أصغر من، وعاملاه الشرطيان علامتا الأكبر والأصغر.> < price > 20 price < 20
  4. النوع الرابع: أكبر من أو يساوي، وأصغر من أو يساوي.>= <= price >= 20 price <= 20
  5. النوع الخامس: داخل النطاقات، ويحدد مجالًا بين قيمتين، والقيمتان داخلتان في المجال.BETWEEN value1 AND value2 price BETWEEN 10 AND 20
  6. النوع السادس: خارج النطاقات، وهو نفي السابق.NOT BETWEEN value1 AND value2 price NOT BETWEEN 10 AND 20
  7. النوع السابع: ضمن قائمة قيم، ويقبل الصف إن كانت قيمته إحدى قيم القائمة.IN (value1, value2, value3, ...) price IN (10,20,25)
  8. النوع الثامن: خارج قائمة قيم.NOT IN (value1, value2, value3, ...) price NOT IN (10,20,25)
  9. النوع التاسع: التحقق من القيم الفارغة.IS NULL title IS NULL
  10. النوع العاشر: التحقق من القيم غير الفارغة، ويمكن ربط شرطين بعامل المنطق.IS NOT NULL title IS NOT NULL AND price IS NOT NULL
  11. النوع الحادي عشر: يُطابق نمط جزئي نصي، ومثاله عنوان كتاب يبدأ بـ com.LIKE 'pattern' title LIKE com%
  12. النوع الثاني عشر: لا يُطابق نمط جزئي نصي، ومثاله عنوان كتاب لا يبدأ بـ com.NOT LIKE 'pattern' title NOT LIKE com%
  13. ورمزا النمط الجزئي: علامة النسبة المئوية تُمثل مجموعة أحرف مجهولة، والشرطة السفلية تُمثل حرفًا مجهولًا واحدًا.% _
شكل رقم (5-1) يوضح العوامل الشرطية في SQLite — الجزء الأول: المساواة والاختلاف
شكل رقم (5-1) يوضح العوامل الشرطية في SQLite — الجزء الأول: المساواة والاختلاف69)
شكل رقم (5-1) يوضح العوامل الشرطية في SQLite
شكل رقم (5-1) يوضح العوامل الشرطية في SQLite70)
انتبه
ملاحظات: توجد فروقات في صياغة العبارات الشرطية بين لغة Python وقواعد بيانات SQLite، فكلٌ منهما يستخدم طريقة خاصة به لكتابة الشروط. القيمة NULL تشير إلى «عدم وجود قيمة» وهي ليست صفر (0) أو سلسلة نصية فارغة ("").71)

صيغة التعليمة البرمجية لإنشاء استعلامات SQLite في Python71)

  1. هذه هي صيغة التعليمة البرمجية لإنشاء استعلام، كما يرسمها شكل رقم (5-2).cursor.execute (SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?, (condition_value,))
  2. الجزء الأول يُنفذ أمر SQL داخل قاعدة البيانات.cursor.execute
  3. ثم أمر SQL لاسترجاع البيانات.SELECT
  4. ثم أسماء الأعمدة المطلوب استرجاعها.column1, column2, ...
  5. ثم كلمة من، ويليها اسم الجدول.FROM tabel_name
  6. ثم كلمة الشرط، ويليها العمود المُستخدم في جملة الشرط.WHERE condition_column
  7. ثم علامة الاستفهام، وهي عُنصر مُؤقت يُسمى placeholder لقيمة الشرط.= ?
  8. ثم بعد الفاصلة قيمة الشرط داخل قوسين مع فاصلة بعدها.(condition_value,)
شكل رقم (5-2) يوضح صيغة كتابة التعليمة البرمجية لإنشاء استعلامات
شكل رقم (5-2) يوضح صيغة كتابة التعليمة البرمجية لإنشاء استعلامات71)
  1. الخطوة الأولى: تحديد البيانات المطلوب استرجاعها، وأولها تحديد العمود أو الأعمدة المطلوب استرجاعها.
  2. وإذا لم يتم تحديد الأعمدة واستُخدم رمز النجمة، يتم استرجاع جميع قيم أعمدة الجدول.*
  3. ثم تحديد الشرط، أي المعيار، لتنفيذ الاستعلام بناءً عليه.
  4. وإذا لم يتم تحديد الشرط، أي بدون تعبير الشرط، فسيتم استرجاع جميع صفوف الجدول.WHERE
  5. الخطوة الثانية: كتابة التعليمات البرمجية، وهي ست تعليمات مرتبة: استدعاء المكتبة، ثم إنشاء أو فتح اتصال بقاعدة البيانات، ثم إنشاء كائن المؤشر، ثم استرجاع البيانات، ثم طباعة النتائج أي الصفوف، ثم إغلاق الاتصال.sqlite3
  6. الخطوة الثالثة: تنفيذ التعليمات البرمجية.
  7. الخطوة الرابعة: معاينة النتائج، أي طباعة الصفوف في بيئة التطوير.PyCharm

الاستعلام عن جميع بيانات الجدول — مثال 172)

مثال
  1. المطلوب في المثال الأول: تحديد جميع بيانات الجدول الذي اسمه بوك بقاعدة البيانات جريد إليفن بوكس.

    book grade11_books
  2. السطر الأول: استدعاء مكتبة إس كيو لايت ثري.

    import sqlite3
  3. السطر الثاني تعليق يشير إلى فتح الاتصال بقاعدة البيانات.

    # Connect to the database
  4. السطر الثالث: إنشاء أو فتح اتصال بقاعدة البيانات.

    connection = sqlite3.connect(grade11_books.db')
  5. السطر الرابع: إنشاء كائن المؤشر للتعامل مع قاعدة البيانات.

    cursor = connection.cursor()
  6. السطر الخامس تعليق يشير إلى استرجاع البيانات.

    # Data Retrieval
  7. السطر السادس: تنفيذ الاستعلام، والتعليق بجانبه يبين أن النجمة تعني كل الحقول.

    cursor.execute("SELECT * FROM book") #(*) means all fields
  8. السطر السابع: استرجاع جميع السجلات، والتعليق بجانبه يبين أنها تُعاد قائمةً من tuples.

    books=cursor.fetchall() # Fetches all records(books) As list of tuples
  9. السطر الثامن تعليق يشير إلى طباعة السجلات في أسطر منفصلة.

    # print records in separate lines
  10. السطران التاسع والعاشر: حلقة تكرارية تطبع كل صف.

    for book in books: print(book)
  11. السطر الحادي عشر تعليق، والسطر الثاني عشر: إغلاق قاعدة البيانات.

    #close database connection.close()
72)
  1. تفسير سطر التنفيذ: النجمة بعد سيلكت تسترجع جميع الأعمدة من جدول بوك.cursor.execute("SELECT * FROM book")
  2. وعدم وجود عبارة الشرط يعني استرجاع جميع الصفوف المُخزنة في الجدول دون تصفية.(WHERE)
  3. تفسير سطر الجلب: تسترجع جميع النتائج الناتجة عن الاستعلام وتخزنها في متغير بوكس في الذاكرة.books = cursor.fetchall()
  4. ونوع المتغير بوكس قائمة تحتوي على صفوف، ويُمثل كل صف سجلًا من الجدول.List Tuples
  5. تفسير الحلقة: تقوم الحلقة التكرارية بطباعة كل صف من النتائج في سطر مستقل.for book in books: print(book)
  6. وهذا ناتج تنفيذ التعليمة البرمجية، أي البيانات التي تم استرجاعها، الصف الأول.(1, 'Arabic', 'Arabic SD', 2001, 'Art/Science', 1.5)
  7. الصف الثاني.(2, 'French', 'French SD', 2007, 'Art', 1.5)
  8. الصف الثالث.(3, 'English', 'English SD', 2009, 'Art/Science', 1.5)
  9. الصفان الرابع والخامس.(4, 'Mathematics', 'Mathematics SD', 2013, 'Science', 1.5) (5, 'Mathematics', 'Mathematics SD', 2013, 'Art', 1.5)
  10. الصفان السادس والسابع.(6, 'Principles of Geography and Economics\n', 'Social SD', 2016, 'Art', 1.5) (7, 'Psychology and sociology', 'Social SD', 2016, 'Art', 1.5)
  11. الصفان الثامن والتاسع.(8, 'Islamic History', 'Social SD', 2007, 'Art', 1.5) (9, 'Chemistry', 'Science SD', 2013, 'Science', 1.5)
  12. الصفان العاشر والحادي عشر، ولاحظ أن سعر الفيزياء قيمة فارغة.(10, 'Physics', 'Science SD', 2013, 'Science', None) (11, 'Biology', 'Science SD', 2013, 'Science', 1.5)
  13. الصفان الثاني عشر والثالث عشر.(12, 'Geology', 'Science SD', 2013, 'Science', 1.5) (13, 'ICT', 'ICT SD', 2025, 'Art/Science', 1.5)
  14. الصفان الرابع عشر والخامس عشر، وبهما ينتهي الناتج.(14, 'Quran', 'Islamic SD', 2003, 'Art/Science', 1.5) (15, 'Islamic Studies', 'Islamic SD', 2013, 'Art/Science', 1.5)

طرق استخدام دوال fetch74)

شكل رقم (5-3) يوضح طرق استخدام دوال fetch
شكل رقم (5-3) يوضح طرق استخدام دوال fetch74)
  1. الدالة الأولى تسترجع جميع الصفوف دفعة واحدة.fetchall()
  2. والدالة الثانية تسترجع عددًا محددًا من الصفوف حسب المعامل سايز.fetchmany(size)
  3. والدالة الثالثة تسترجع صفًا واحدًا فقط من النتائج في كل مرة.fetchone()
  4. الدالة فتش وان تُعيد النتائج على شكل تيوبل.fetchone tuple
  5. والدالتان فتش ميني وفتش أول تعيدان النتائج على شكل ليست يحتوي على عناصر من نوع تيوبل، وكل تيوبل يُمثل صفًا من قاعدة البيانات.fetchmany, fetchall list of tuple
  6. والدالة فتش أول قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة.fetchall
  7. لذلك عند التعامل مع عدد كبير من الصفوف، يُنصح باستخدام فتش ميني أو فتش وان داخل حلقة لتقليل استهلاك الذاكرة وتحسين الأداء.fetchmany / fetchone
  8. ودوال الجلب تجلب البيانات فعليًا إلى بايثون بعد تنفيذ الاستعلام باستخدام الأمر سيلكت.SELECT
  9. وعند استخدام التعليمات التالية يتم حفظ جميع الصفوف المُسترجعة في متغير، وهذه صورتها الأولى كما طبعها الكتاب.variable_name = cursor.fechall()
  10. وصورتها الثانية.variable_name = cursor.fetchmany(size)
  11. وصورتها الثالثة.variable_name = cursor.fetchone()

الاستعلام عن عمود واحد أو أكثر لجميع الصفوف — مثال 275)

مثال
  1. المطلوب في المثال الثاني: تحديد بيانات عمودي العنوان والسعر لجميع صفوف الجدول بوك بقاعدة البيانات.

    title, price book grade11_books.db
  2. الأسطر الأولى كما في المثال السابق: استدعاء المكتبة، ثم فتح الاتصال، ثم إنشاء المؤشر.

    import sqlite3 / connection = sqlite3.connect('grade11_books.db') / cursor = connection.cursor()
  3. والفرق كله في سطر الاستعلام: نضع اسمي العمودين بدل النجمة.

    cursor.execute("SELECT title, price FROM book")
  4. ثم نسترجع جميع الصفوف كالمعتاد.

    books=cursor.fetchall()
  5. ثم الحلقة التكرارية للطباعة، ثم إغلاق قاعدة البيانات.

    for book in books: print(book) connection.close()
  6. التفسير: تنفيذ استعلام إس كيو إل لاسترجاع عمودين فقط من جدول بوك، وهما عنوان الكتاب وسعر الكتاب.

    SELECT title, price FROM book
  7. ويتم تخزين النتائج في متغير بوكس على شكل قائمة عناصرها تيوبلز، وكل تيوبل يمثل صفًا، أي كتابًا، يحتوي على قيمتي العنوان والسعر فقط.

    list of tuples
  8. وهذا ناتج البرنامج، أول صفين.

    ('ICT', 1.5) ('Arabic', 1.5)
  9. ثم الصفان الثالث والرابع، ولاحظ أن سعر الإنجليزي قيمة فارغة.

    ('English', None) ('French', 1.5)
  10. ثم الصفان الخامس والسادس.

    ('Chemistry', None) ('Islamic Studies', 1.5)
76)

الاستعلام عن بيانات بناءً على شرط محدد — مثال 377)

مثال
  1. المطلوب في المثال الثالث: تحديد بيانات الصفوف، أي الكتب، وفق شرط أنها طُبعت بعد عام ألفين وعشرة، من جدول بوك.

    WHERE year > 2010
  2. الأسطر الأولى نفسها: استدعاء المكتبة، ثم فتح الاتصال، ثم إنشاء المؤشر.

    import sqlite3 / connection = sqlite3.connect(grade11_books.db') / cursor = connection.cursor()
  3. وسطر الاستعلام هنا فيه إضافة الشرط، وعلامة الاستفهام عنصر مؤقت تُمرَّر قيمته بعد الفاصلة.

    cursor.execute("SELECT * FROM book WHERE year>?",(2010,))
  4. ثم استرجاع الصفوف، ثم الحلقة التكرارية للطباعة، ثم إغلاق قاعدة البيانات.

    books=cursor.fetchall() for book in books: print(book) connection.close()
  5. التفسير: تُستخدم النجمة بعد سيلكت لاسترجاع جميع الأعمدة وفقًا لشرط الاستعلام.

    SELECT *
  6. وتُستخدم عبارة الشرط لتحديد شرط الاستعلام بحيث يتم استرجاع الصفوف الخاصة بالكتب التي تم طباعتها بعد عام ألفين وعشرة فقط، فقد استُبدلت علامة الاستفهام بالقيمة.

    WHERE year > 2010
  7. ثم تُسترجع جميع الصفوف المطابقة للشرط السابق وتُخزن في المتغير بوكس، والنتيجة قائمة تحتوي على تيوبلز، كل تيوبل يُمثل صف كتاب بجميع أعمدته.

    books = cursor.fetchall()
  8. وهذا ناتج البرنامج، الصف الأول.

    (1, 'ICT', 'ICT SD', 2025, 'Art/Science', 1.5)
  9. والصف الثاني.

    (5, 'Chemistry', 'Science SDn', 2013, 'Science', None)
  10. والصف الثالث.

    (6, 'Islamic Studies', 'Islamic SD', 2013, 'Art/Science', 1.5)
78)

الملخص

  • الاستعلام عملية رئيسية في إدارة قواعد البيانات، تُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.
  • الشروط في SQLite هي التعبيرات المنطقية Logical Expressions التي تحدد الصفوف التي يجب التعامل معها عند الاسترجاع أو الحذف أو التحديث.
  • الشرط البسيط مقارنة واحدة بين قيمتين بعامل مقارنة واحد، والشرط المركب شرطان أو أكثر يُربط بينهما بـ AND أو OR.
  • من العوامل الشرطية: = و != و >< و > و < و >= و <= و BETWEEN و NOT BETWEEN و IN و NOT IN و IS NULL و IS NOT NULL و LIKE و NOT LIKE، و% تُمثل مجموعة أحرف مجهولة و_ تُمثل حرف مجهول.
  • القيمة NULL تعني عدم وجود قيمة، وهي ليست صفر (0) ولا سلسلة نصية فارغة ("").
  • صيغة الاستعلام: cursor.execute(”SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?”, (condition_value,)).
  • استخدام الرمز * يسترجع جميع الأعمدة، وترك عبارة WHERE يسترجع جميع الصفوف.
  • دوال fetch ثلاث: fetchall() لجميع الصفوف دفعة واحدة، وfetchmany(size) لعدد محدد، وfetchone() لصف واحد في كل مرة؛ وfetchone تُعيد tuple بينما تُعيد الأخريان list من tuples.
  • fetchall قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة، فيُنصح عند العدد الكبير باستخدام fetchmany أو fetchone داخل حلقة.
  • تُطبع نتائج الاستعلام بحلقة تكرارية، فيظهر كل صف في سطر مستقل.

الأفكار الرئيسية

  1. الاستعلام = اختيار أعمدة (SELECT) + من جدول (FROM) + وفق شرط اختياري (WHERE)؛ فإن غاب الشرط عادت كل الصفوف، وإن وُضعت النجمة عادت كل الأعمدة.
  2. الشرط تعبير منطقي، وقوته من العوامل الشرطية: مقارنة، أو نطاق، أو قائمة قيم، أو فحص فراغ، أو مطابقة نمط نصي.
  3. تنفيذ الاستعلام شيء وجلب نتائجه شيء آخر: execute تُنفذ، ودوال fetch هي التي تجلب البيانات فعليًا إلى Python.

الأسئلة المهمة

عرّف الاستعلام Database Query كما ورد في الكتاب.

هو أحد العمليات الرئيسية في إدارة قواعد البيانات، ويُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.

الكتاب صفحة 69

ما المقصود بالشروط في SQLite؟ وفيمَ تُستخدم؟

هي التعبيرات المنطقية Logical Expressions التي تُستخدم لتحديد الصفوف التي يجب التعامل معها عند تنفيذ أوامر مثل (الاسترجاع، الحذف، التحديث) على قاعدة البيانات.

الكتاب صفحة 69

قارن بين الشرط البسيط Simple Condition والشرط المركب Compound Condition.

الشرط البسيط تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، مثل (price> 30)، باستخدام عامل مقارنة واحد مثل (=، >، <، =>، =<، ><). أما الشرط المركب فيتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق (AND, OR).

الكتاب صفحة 69

علّل: لا يصح فحص القيم الفارغة بكتابة price = NULL.

لأن NULL تشير إلى «عدم وجود قيمة» وهي ليست صفر (0) ولا سلسلة نصية فارغة ("")، فلا تصح مقارنتها بعامل المساواة؛ والعامل الشرطي المخصص لذلك هو IS NULL، ولنفيه IS NOT NULL.

الكتاب صفحة 71

اكتب صيغة التعليمة البرمجية لإنشاء استعلام في SQLite داخل Python، وبيّن وظيفة العنصر المؤقت فيها.

الصيغة: cursor.execute (”SELECT column1, column2, ... FROM tabel_name WHERE condition_column = ?”, (condition_value,)). والعنصر المؤقت placeholder هو علامة الاستفهام (?)، وهو موضع مؤقت لقيمة الشرط تُمرَّر بعد الفاصلة في (condition_value,).

الكتاب صفحة 71

ماذا يحدث إذا كتبنا الاستعلام دون تحديد الأعمدة (باستخدام *) ودون تعبير WHERE؟

إذا لم يتم تحديد الأعمدة واستُخدم الرمز *، يتم استرجاع جميع قيم أعمدة الجدول؛ وإذا لم يتم تحديد الشرط (بدون تعبير WHERE)، فسيتم استرجاع جميع صفوف الجدول. أي تعود كل بيانات الجدول.

الكتاب صفحة 71

قارن بين دوال fetch الثلاث من حيث ما تسترجعه ونوع ما تُعيده.

fetchall() تسترجع جميع الصفوف دفعة واحدة، وfetchmany(size) تسترجع عددًا محددًا من الصفوف حسب المعامل size، وfetchone() تسترجع صفًا واحدًا فقط من النتائج في كل مرة. وfetchone تُعيد النتائج على شكل tuple، بينما fetchmany وfetchall تعيدان النتائج على شكل list يحتوي على عناصر من نوع tuple (كل tuple يمثل صفًا من قاعدة البيانات).

الكتاب صفحة 74

علّل: يُنصح باستخدام fetchmany أو fetchone داخل حلقة عند التعامل مع عدد كبير من الصفوف.

لأن الدالة fetchall قد تستهلك الكثير من الذاكرة إذا كانت النتائج كبيرة، فاستخدام fetchmany أو fetchone داخل حلقة يقلل استهلاك الذاكرة ويحسّن الأداء.

الكتاب صفحة 74

اختبار الدرس

أجب ثم اضغط «صحّح» لترى درجتك وتفسير كل إجابة.

سؤال 1
1

أيُّ العبارات التالية يصف الاستعلام كما عرّفه الكتاب؟

سهل
سؤال 2
2

العامل الشرطي المناسب لاسترجاع الكتب التي يقع سعرها بين 10 و20 هو:

سهل
سؤال 3
3

ما نوع القيمة التي تُعيدها الدالة fetchone()؟

متوسط
سؤال 4
4

في الرمزين المستخدمين مع LIKE، ماذا تُمثل الشرطة السفلية ( _ )؟

متوسط
سؤال 5
5

في التعليمة cursor.execute("SELECT * FROM book WHERE year>?",(2010,)) ماذا تمثل علامة الاستفهام؟

متوسط
سؤال 6
6

القيمة NULL تعني الرقم صفر (0).

سهل
سؤال 7
7

إذا كُتب الاستعلام بدون تعبير WHERE فسيتم استرجاع جميع صفوف الجدول.

سهل
سؤال 8
8

أكمل: الشرط الذي يتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق (AND, OR) يُسمّى الشرط .............

سهل
سؤال 9
9

اكتب العامل الشرطي الذي يستبعد القيم 10 و20 و25 من عمود price.

متوسط
سؤال 10
10

علّل: يُنصح باستخدام fetchmany أو fetchone داخل حلقة بدل fetchall عند استرجاع عدد كبير من الصفوف.

صعب

الواجب

أسئلة تطبيقية لتحلها في البيت. يمكنك طباعتها من الأعلى.

سؤال 1
1

اكتب تعليمة الاستعلام التي تسترجع عمودي title و price من جدول book لجميع الصفوف، ثم اكتب السطر الذي يجلب كل النتائج.

متوسط
سؤال 2
2

اشرح ماذا يحدث سطرًا سطرًا عند تنفيذ كود مثال 3 في صفحة 77، وبيّن سبب طباعة ثلاثة صفوف فقط.

صعب
سؤال 3
3

اكتب شرطًا مركبًا يسترجع الصفوف التي يكون فيها title غير فارغ وprice غير فارغ أيضًا.

متوسط
سؤال 4
4

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

متوسط

مصطلحات الدرس

الاستعلام Database Query
أحد العمليات الرئيسية في إدارة قواعد البيانات، يُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة.
التعبيرات المنطقية Logical Expressions
الشروط التي تُستخدم لتحديد الصفوف التي يجب التعامل معها عند تنفيذ أوامر مثل الاسترجاع والحذف والتحديث على قاعدة البيانات.
الشرط البسيط Simple Condition
تعبير منطقي يتكون من مقارنة واحدة بين قيمتين، مثل (price> 30)، باستخدام عامل مقارنة واحد.
الشرط المُركب Compound Condition
شرط يتكون من شرطين أو أكثر يتم الربط بينهما باستخدام عوامل المنطق (AND, OR).
NULL
قيمة تشير إلى «عدم وجود قيمة»، وهي ليست صفر (0) أو سلسلة نصية فارغة ("").
SELECT
أمر SQL لاسترجاع البيانات من الجدول.
WHERE
التعبير الذي يحدد شرط الاستعلام؛ وبدونه تُسترجع جميع صفوف الجدول.
fetchall() / fetchmany(size) / fetchone()
دوال جلب النتائج: الأولى تسترجع جميع الصفوف دفعة واحدة، والثانية تسترجع عددًا محددًا من الصفوف حسب المعامل size، والثالثة تسترجع صفًا واحدًا فقط من النتائج في كل مرة.
LIKE و % و _
عامل مطابقة نمط جزئي نصي؛ و% تُمثل مجموعة أحرف مجهولة، و_ تُمثل حرف مجهول.

تمارين الكتاب كاملة

كل سؤال ونشاط وتمرين ورد في صفحات هذا الدرس، بنصه وإجابته النموذجية. 2 تمرينًا.

ورقة عمل (6) — الاستعلام عن جميع البيانات من الجدول landmark بقاعدة البيانات Kuwait_landmarks.dbالاستعلام عن جميع البيانات من الجدول landmark بقاعدة البيانات Kuwait_landmarks.db مستخدمًا التعليمة fetchall، متبعًا الخطوات التالية: 1. استدعِ المشروع landmark_select. 2. افتح ملف data_select1.py (الأسطر المطبوعة: import sqlite3 ثم # Connect to the database ثم connection = sqlite3.connect('Kuwait_landmarks.db') ثم cursor = connection.cursor() ثم # Data Retrieval ثم cursor.execute( ) وبداخله فراغ ثم rows = cursor.fetchall() ثم for row in rows: والسطر بعده متروك فراغًا ثم # Close the database ثم connection.close()). 3. استكمل التعليمات البرمجية لتنفيذ التالي: استعلم عن جميع صفوف الجدول. اطبع الصفوف التي تم استرجاعها (الاستعلام عنها). 4. نفذ التعليمات البرمجية. 5. عاين نتائج الاستعلام: عدد الصفوف: ...........................................79)

يُملأ فراغ سطر التنفيذ بأمر استرجاع كل الأعمدة من الجدول landmark على نمط مثال 1: cursor.execute("SELECT * FROM landmark"). ويُملأ السطر الفارغ داخل الحلقة بتعليمة الطباعة مع إزاحة: print(row). فتصير التعليمات: import sqlite3 / connection = sqlite3.connect('Kuwait_landmarks.db') / cursor = connection.cursor() / cursor.execute("SELECT * FROM landmark") / rows = cursor.fetchall() / for row in rows: print(row) / connection.close(). وبما أن الاستعلام بلا تعبير WHERE فسيتم استرجاع جميع صفوف الجدول، وتُطبع كل صف في سطر مستقل على شكل tuple يحتوي على جميع أعمدة الجدول. أما خانة «عدد الصفوف» فيكتب فيها الطالب العدد الذي ظهر فعلًا عنده في نافذة PyCharm، وهو عدد الصفوف التي أدخلها في الجدول landmark في ورقتي العمل (4) و(5) من الدرس السابق: صف واحد من ورقة العمل (4) وثلاثة صفوف من ورقة العمل (5)، أي أربعة صفوف إن نُفِّذت الورقتان مرة واحدة.

ورقة عمل (7) — الاستعلام عن بيانات محددة من الجدول landmark بقاعدة البيانات Kuwait_landmarks.dbالاستعلام عن بيانات محددة من الجدول landmark بقاعدة البيانات Kuwait_landmarks.db مستخدمًا التعليمة fetchall، متبعًا الخطوات التالية: 1. استدعِ المشروع landmark_select. 2. افتح ملف data_select2.py (الأسطر المطبوعة: import sqlite3 ثم # Connect to the database ثم connection = sqlite3.connect('Kuwait_landmarks.db') ثم cursor = connection.cursor() ثم # Data Retrieval ثم cursor.execute( ) وبداخله فراغ ثم # Fetch the Data وبعده سطر فارغ ثم # Output the Data وبعده سطر فارغ ثم # Close the database ثم connection.close()). 3. استكمل التعليمات البرمجية اللازمة لتنفيذ الاستعلامات التالية: استعلم عن عمودي (اسم مَعلم الكويت name، وسنة الإنشاء year) لجميع صفوف المعالم الثقافية Cultural فقط. استخدم دالة fetchall() لاسترجاع البيانات وتخزينها في متغير records. اكتب التعليمة البرمجية للحلقة التكرارية للمتغير records لطباعة كل صف في سطر منفصل. 4. نفذ التعليمات البرمجية. 5. عاين نتائج الاستعلام.80)

يُملأ فراغ سطر التنفيذ باستعلام يحدد عمودين مع شرط على العمود category، على نمط مثالي 2 و3: cursor.execute("SELECT name, year FROM landmark WHERE category = ?", ('Cultural',)). ويُملأ السطر الذي تحت التعليق # Fetch the Data بـ: records = cursor.fetchall(). ويُملأ السطران اللذان تحت التعليق # Output the Data بالحلقة التكرارية: for record in records: ثم بإزاحة print(record). فتصير التعليمات: import sqlite3 / connection = sqlite3.connect('Kuwait_landmarks.db') / cursor = connection.cursor() / cursor.execute("SELECT name, year FROM landmark WHERE category = ?", ('Cultural',)) / records = cursor.fetchall() / for record in records: print(record) / connection.close(). والناتج المتوقع: يُطبع لكل معلم ثقافي سطر مستقل على شكل tuple من قيمتين فقط هما الاسم وسنة الإنشاء، مثل ('اسم المَعلم', سنة الإنشاء)؛ ولا يظهر أي صف قيمته في العمود category غير Cultural. وإن كانت البيانات المدخلة في ورقتي العمل (4) و(5) هي وحدها الموجودة، فلن يُطبع شيء لأن قيم category فيها كانت Culture وHistorical Landmark وTraditional Market وArt Museum ولا يوجد فيها Cultural؛ ويكفي الطالب حينئذ أن يذكر ذلك عند معاينة النتائج، أو يستعلم بقيمة العمود كما أدخلها فعلًا.

صفحات الكتاب

صفحات هذا الدرس من كتاب الطالب الرسمي كما هي، صفحات 67 إلى 80.

المصدر: تقنية المعلومات 11 — الصف الحادي عشر — الفصل الدراسي الأول

  • ص 69: «يُعد الاستعلام أحد العمليات الرئيسية في إدارة قواعد البيانات، ويُستخدم لتصفية (اختيار / استرجاع) البيانات وفق شروط ومعايير محددة»
  • ص 69: «هي التعبيرات المنطقية Logical Expressions التي تُستخدم لتحديد الصفوف التي يجب التعامل معها»
  • ص 71: «القيمة NULL تشير إلى «عدم وجود قيمة» وهي ليست صفر (0) أو سلسلة نصية فارغة»
  • ص 73: «نوع المُتغير books: قائمة (List) تحتوي على صفوف (Tuples)، يُمثل كل صف سجلًا من الجـدول»
  • ص 74: «الدالة fetchall قد تستهـلك الكثيـر من الذاكـرة إذا كانـت النتـائج كبيـرة»