إعداد الجداول
سنتعلّم كيفية استخدام هذه الدالة بالاستعانة بـ قاعدة بيانات مباريات ATP الخاصة بـ TennisMyLife. سنعالج ملفات CSV التي تتضمن مباريات تعود إلى ستينيات القرن الماضي، لكننا سننشئ مخططًا مختلفًا قليلًا لكل عقد. وسنضيف أيضًا عمودين إضافيين لعقد التسعينيات. تعليمات الاستيراد موضحة أدناه:مخطط عدة جداول
يمكننا تشغيل الاستعلام التالي لعرض أعمدة كل جدول وأنواعها جنبًا إلى جنب، مما يسهّل ملاحظة الاختلافات.- يغيّر جدول 1970s نوع
winner_seedمنNullable(String)إلىNullable(UInt8)، ونوعscoreمنStringإلىArray(String). - يغيّر جدول 1980s نوعَي
winner_seedوloser_seedمنNullable(UInt8)إلىNullable(UInt16). - يغيّر جدول 1990s
surfaceمنStringإلىEnum('Hard', 'Grass', 'Clay', 'Carpet')، ويضيف العمودينwalkoverوretirement.
الاستعلام عن عدة جداول باستخدام merge
لنكتب استعلامًا للعثور على المباريات التي فاز بها جون ماكنرو ضد لاعب كان المصنف الأول:winner_seed يستخدم أنواعًا مختلفة عبر الجداول المختلفة:
variantType للتحقق من نوع winner_seed في كل صف، ثم نستخدم variantElement لاستخراج القيمة الفعلية.
وعندما يكون النوع String، نحوّله إلى رقم ثم نجري المقارنة.
تظهر نتيجة تنفيذ الاستعلام أدناه:
من أي جدول تأتي الصفوف عند استخدام merge؟
ماذا لو أردنا معرفة الجدول الذي تنتمي إليه الصفوف؟ يمكننا استخدام العمود الافتراضي_table للقيام بذلك، كما هو موضح في الاستعلام التالي:
walkover:
walkover تكون قيمته NULL في جميع الحالات باستثناء atp_matches_1990s.
سنحتاج إلى تحديث الاستعلام للتحقق مما إذا كان العمود score يحتوي على السلسلة W/O إذا كانت قيمة العمود walkover هي NULL:
score هو Array(String)، فعلينا استعراض عناصر المصفوفة والبحث عن W/O، أما إذا كان نوعه String، فيمكننا ببساطة البحث عن W/O في السلسلة النصية.