الاستعلام باستخدام SQL
مُقدَّم| English | المعنى |
|---|---|
| SQL/ˌes kjuː ˈel/ | لغة الاستعلام المهيكلة |
| JOIN/dʒɔɪn/ | ربط |
| GROUP BY/ɡruːp baɪ/ | تجميع حسب |
تتشارك دورتان مختلفتان في العنوان
- دورتان كلاهما يُسميان "الروبوتات". التجميع بناءً على العنوان فقط يجمع تسجيلاتهما ويخفي أنهما دورتان مختلفتان.
- SQL يصف نتيجة البيانات التي تريدها. تحقق من هوية الصف والمخرجات المتوقعة قبل الثقة في عدد معقول.
اتبع العلاقة في عملية الربط (Join)
- يقوم JOIN بدمج الصفوف باستخدام علاقة مثل
e.course_id = c.id. اكتب العلاقة المقصودة صراحةً. - الربط المتقاطع (Cross Join) يقارن كل صف في الجانب الأول بكل صف في الجانب الآخر. في SQLite، يمكن للربط غير المقيد إنتاج هذا الضرب؛ بينما قد ترفض أنظمة SQL الأخرى شروط الربط المفقودة.
في SQLite، عند إجراء JOIN غير مقيد يتم ربط ثلاث دورات بثلاث سجلات تسجيل. كم عدد الأزواج التي يمكن أن تنتجها؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
الجداء المتقاطع يحتوي على 3 × 3 صفاً، قبل أي تصفية لاحقة.
احتفظ بالدورات ذات التسجيلات الصفرية
- يحافظ الـ Left Join على كل دورة، بما في ذلك تلك التي ليس لها تسجيل مطابق. حقول التسجيل غير المطابقة تكون فارغة (null).
- احسب
e.student_id، الذي يستبعد القيم الفارغة، بدلاً منCOUNT(*)، الذي يحسب أيضًا الصف غير المطابق المحفوظ. يجب أن تعرض الدورة الفارغة الرقم صفر.
أي تعبير يحسب بشكل صحيح عدد التسجيلات الصفر لدورة تم توصيلها بيسار دون تطابق؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يستبعد COUNT للمجال القابل للقيمة الفارغة المرتبط بدون تطابق القيم الفارغة؛ بينما يحسب COUNT(*) الصف المحفوظ.
تشغيل استعلام بإجابات معروفة
- شغل هذا السكربت الكامل في قاعدة بيانات SQLite محلية. دورتا "الروبوتات" لديهما معرّفان مختلفان، ولا يوجد لتسجيل "الفن" أي سجلات.
- GROUP BY يجمّع حسب معرّف الدورة والعنوان. الصفوف المتوقعة هي
(7, Robotics, 1)،(8, Robotics, 2)و(9, Art, 0).
CREATE TABLE courses (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
CREATE TABLE enrolments (student_id INTEGER, course_id INTEGER);
INSERT INTO courses VALUES (7, 'Robotics'), (8, 'Robotics'), (9, 'Art');
INSERT INTO enrolments VALUES (1, 7), (1, 8), (2, 8);
SELECT c.id, c.title, COUNT(e.student_id) AS enrolled
FROM courses AS c
LEFT JOIN enrolments AS e ON e.course_id = c.id
GROUP BY c.id, c.title
ORDER BY c.id;
أكمل الجملة التي تقوم بالتجميع حسب هوية الدورة وعنوانها: ____ c.id, c.title
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يحدد GROUP BY المجموعات. تضمين المعرف يحافظ على فصل الدورات المختلفة التي تحمل نفس العنوان.
ما هي أعداد التسجيلات التي تُرجعها الاستعلام الكامل لـ IDs الدورات 7، 8 و 9؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
يحتوي العينة على تطابق واحد مع 7، واثنين مع 8، ولا يوجد أي تطابق مع 9.
تصفية الصفوف والمجموعات في مراحل مختلفة
WHEREيفلتر صفوف الإدخال قبل التجميع.HAVINGيفلتر المجموعات باستخدام شرط مثلCOUNT(e.student_id) >= 2.- في هذا المثال، إضافة شرط HAVING قبل ORDER BY يعيد فقط الدرس 8. تصفية
e.student_idفي WHERE يمكن أن تزيل الصف غير المطابقة التي كنت تقصد الاحتفاظ بها.
أي جملة تقوم بتصفية المجموعات لتلك التي تحتوي على طالبين مسجلين على الأقل؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تُطبق HAVING شرطاً على المجموعات؛ بينما يقوم WHERE بتصفية صفوف الإدخال.
اشرح استخدام WHERE و HAVING باستخدام مثال عدّ الدورات.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
يقوم FILTER بالصفوف؛ بينما يختبر HAVING عدد كل مجموعة.
استخدم الحالات الحدية للتحقق من النتيجة
- تحقق من العناوين المكررة، والنتائج الصفرية، والنتائج المتعددة مقابل الأعداد المعروفة. لا يكفي أن تبدو النتيجة معقولة.
- اشرح الحقول المحددة، وشرط الربط، والتجميع، والعد. حدد ما إذا كانت صفوف العلاقة المكررة صالحة أم يجب منعها بواسطة المخطط.
انضم بناءً على العلاقة، وجمّع حسب الهوية، وحسب الشيء المقصود. مجموعة بيانات صغيرة معروفة تجعل من السهل رؤية الاستعلامات الخاطئة.
يعتبر العدد المنطقي دليلاً كافياً على صحة استعلام SQL.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
قارن الصفوف المتوقعة المعروفة، بما في ذلك عدم وجود تطابق (صفر) والعناوين المكررة.
التجميع حسب العنوان فقط يحافظ على فصل دورتي الروبوتيك عن بعضهما.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تشكل العناوين المتطابقة مجموعة واحدة. قم بالتجميع هوية الدورة أيضًا.