WHERE تصفية البيانات القادمة من عبارة FROM في SELECT.
إذا وُجدت عبارة WHERE، فيجب أن تليها تعبير من النوع UInt8.
وتُستبعَد الصفوف التي تُقيَّم فيها هذه التعبير إلى 0 من المعالجات اللاحقة أو من النتيجة.
غالبًا ما تُستخدم تعبير التي تلي عبارة WHERE مع عوامل المقارنة والعوامل المنطقية، أو مع إحدى الدوال العادية العديدة.
تُقيَّم تعبير الخاصة بـ WHERE من حيث إمكانية استخدام الفهارس وpartition pruning، إذا كان table engine الخاص بـ underlying table يدعم ذلك.
PREWHEREتوجد أيضًا آلية تحسين للتصفية تُسمى
PREWHERE.
Prewhere هو تحسين يتيح تطبيق التصفية بكفاءة أعلى.
وهو مفعّل افتراضيًا حتى إذا لم تُحدَّد عبارة PREWHERE صراحةً.التحقق من NULL
NULL، فاستخدم:
IS NULLأوisNullIS NOT NULLأوisNotNull
NULL أي شرط مطلقًا.
تصفية البيانات باستخدام العوامل المنطقية
WHERE لدمج عدة شروط:
استخدام أعمدة UInt8 كشرط
UInt8 مباشرةً كشروط منطقية، بحيث تمثّل 0 القيمة false وتمثّل أي قيمة غير صفرية (وغالبًا 1) القيمة true.
ويَرِد مثال على ذلك في القسم أدناه.
استخدام معاملات المقارنة
| المعامل | الدالة | الوصف | مثال |
|---|---|---|---|
a = b | equals(a, b) | يساوي | price = 100 |
a == b | equals(a, b) | يساوي (صيغة بديلة) | price == 100 |
a != b | notEquals(a, b) | لا يساوي | category != 'Electronics' |
a <> b | notEquals(a, b) | لا يساوي (صيغة بديلة) | category <> 'Electronics' |
a < b | less(a, b) | أقل من | price < 200 |
a <= b | lessOrEquals(a, b) | أقل من أو يساوي | price <= 200 |
a > b | greater(a, b) | أكبر من | price > 500 |
a >= b | greaterOrEquals(a, b) | أكبر من أو يساوي | price >= 500 |
a LIKE s | like(a, b) | مطابقة النمط (حساسة لحالة الأحرف) | name LIKE '%top%' |
a NOT LIKE s | notLike(a, b) | عدم مطابقة النمط (حساسة لحالة الأحرف) | name NOT LIKE '%top%' |
a ILIKE s | ilike(a, b) | مطابقة النمط (غير حساسة لحالة الأحرف) | name ILIKE '%LAPTOP%' |
a BETWEEN b AND c | a >= b AND a <= c | التحقق من النطاق (شامل) | price BETWEEN 100 AND 500 |
a NOT BETWEEN b AND c | a < b OR a > c | التحقق من الخروج عن النطاق | price NOT BETWEEN 100 AND 500 |
مطابقة الأنماط والتعبيرات الشرطية
WHERE.
| الميزة | الصياغة | مراعي لحالة الأحرف | الأداء | الأفضل لـ |
|---|---|---|---|---|
LIKE | col LIKE '%pattern%' | نعم | سريع | مطابقة الأنماط مع تمييز حالة الأحرف |
ILIKE | col ILIKE '%pattern%' | لا | أبطأ | البحث دون تمييز حالة الأحرف |
if() | if(cond, a, b) | لا ينطبق | سريع | الشروط الثنائية البسيطة |
multiIf() | multiIf(c1, r1, c2, r2, def) | لا ينطبق | سريع | الشروط المتعددة |
CASE | CASE WHEN ... THEN ... END | لا ينطبق | سريع | منطق شرطي قياسي في SQL |
تعبير يتضمن قيماً حرفية أو أعمدة أو استعلامات فرعية
WHERE أيضاً قيماً حرفية، أو أعمدة، أو استعلامات فرعية، وهي عبارات SELECT متداخلة تُرجِع قيماً تُستخدم في الشروط.
| النوع | التعريف | التقييم | الأداء | المثال |
|---|---|---|---|---|
| قيمة حرفية | قيمة ثابتة | عند كتابة الاستعلام | الأسرع | WHERE price > 100 |
| عمود | مرجع إلى بيانات الجدول | لكل صف | سريع | WHERE price > cost |
| استعلام فرعي | عبارة SELECT متداخلة | وقت تنفيذ الاستعلام | يختلف | WHERE id IN (SELECT ...) |
أمثلة
التحقق من NULL
NULL:
تصفية البيانات باستخدام العوامل المنطقية
AND - يجب أن يكون كلا الشرطين true:
OR - يجب أن يتحقق شرط واحد على الأقل:
NOT - ينفي شرطًا:
XOR - يجب أن يتحقق شرط واحد فقط (وليس كلاهما):
AND, OR, NOT, XOR) أوضح للقراءة عمومًا، لكن صيغة الدوال قد تكون مفيدة في التعبيرات المعقدة أو عند إنشاء استعلامات ديناميكية.
استخدام أعمدة UInt8 كشرط
استخدام معاملات المقارنة
= 1 أو = true):
= 0 أو = false):
!= 0 أو != false):
IN:
في المثال أدناه، تمثّل (1, true) قيمة من النوع Tuple.