عبارة WHERE
WHERE يتم استخدام العبارة في PostgreSQL لتصفية الصفوف في استعلام استنادا إلى شروط محددة، ما يتيح استرداد البيانات التي تلبي احتياجاتك فقط.
إنها أداة تصفية قوية مع مجموعة واسعة من الخيارات، ما يسمح للمستخدمين بدمج الشروط، وتطبيق عوامل التشغيل المنطقية، وتنسيق المخرجات لتلبية متطلبات الاستعلام المعقدة.
التصفية استنادا إلى شرط واحد
SELECT product_name, price, unit
FROM sales.products
WHERE price > 50;
يسترد هذا الاستعلام المنتجات التي يزيد عددها عن price 50.
التصفية استنادا إلى شروط متعددة (AND، OR)
SELECT customer_name, country, city, NOW() AS query_time
FROM sales.customers
WHERE country = 'Germany'
AND city = 'Berlin';
يسترد هذا الاستعلام العملاء من ألمانيا الذين يقيمون في برلين ويعرض عمودا محسوبا يحمل الاسم query_time، ويتم إنتاج قيمته بواسطة الدالة NOW()المضمنة .
الدالات المضمنة هي دالات مضمنة يوفرها نظام قاعدة البيانات لتنفيذ عمليات معينة، مثل العمليات الحسابية الرياضية أو معالجة السلسلة أو استرداد القيم التي ينشئها النظام. في هذا المثال، NOW() يتم استخدام لجلب التاريخ والوقت الدقيقين لتنفيذ الاستعلام، ما يعزز الرؤى في وقت استرداد البيانات. بعض الأمثلة الأخرى للدالات المضمنة هي CURRENT_DATE، التي ترجع التاريخ الحالي، و LENGTH()، التي تحسب طول سلسلة معينة.
SELECT product_name, category_id, CAST(price AS VARCHAR) as price_text
FROM sales.products
WHERE category_id = 1
OR category_id = 8;
يحدد هذا الاستعلام المنتجات التي تنتمي إلى الفئة 1 (المشروبات) أو الفئة 8 (المأكولات البحرية). بالإضافة إلى ذلك، يتم استخدام الدالة CAST لتحويل price العمود إلى تنسيق نصي، وتقديمه كما في price_text النتائج.
التصفية استنادا إلى شروط متعددة (IN، NOT IN)
SELECT product_name, category_id, CAST(price as VARCHAR) as price_text
FROM sales.products
WHERE category_id IN (1,8);
ينتج هذا الاستعلام نفس نتيجة الاستعلام السابق، ولكنه يستخدم العبارة IN بدلا من OR. تقوم IN العبارة بتصفية السجلات عن طريق التحقق مما إذا كان العمود يطابق أي قيمة ضمن قائمة محددة.
SELECT customer_name, country
FROM sales.customers
WHERE country NOT IN ('USA');
يبحث هذا الاستعلام عن العملاء الذين لا يستندون إلى الولايات المتحدة الأمريكية.
SELECT order_id, order_date, EXTRACT(MONTH FROM order_date) AS order_month
FROM sales.orders
WHERE EXTRACT(MONTH FROM order_date) = 1;
يسترد هذا الاستعلام الطلبات التي تم إجراؤها في يناير باستخدام الدالة EXTRACT لعزل الشهر عن order_date العمود وعرضه ك order_month.
استخدام LIKE لمطابقة النمط
SELECT customer_name, address
FROM sales.customers
WHERE customer_name LIKE 'A%';
يسترد هذا الاستعلام العملاء الذين تبدأ أسماؤهم ب "A". الرمز % في السلسلة الحرفية هو حرف بدل يستخدمه LIKE عامل التشغيل لمطابقة النمط. يمثل صفرا أو أكثر من الأحرف، مما يسمح للاستعلام بمطابقة أي customer_name حرف يبدأ بالحرف "A" متبوعا بأي تسلسل من الأحرف. على سبيل المثال، سيتم تضمين أسماء مثل "أليس" أو "أندرو" في نتائج الاستعلام.
SELECT product_id, product_name
FROM sales.products
WHERE product_name LIKE '%Chocolate%';
يسترد هذا الاستعلام المنتجات التي تحتوي أسماؤها على كلمة "Chocolate". عند وضعها قبل وبعد كلمة "Chocolate" في الاستعلام، فإنها تسمح بالتطابقات حيث تظهر "Chocolate" في أي مكان في اسم المنتج - سواء في البداية أو الوسط أو النهاية. على سبيل المثال، سيتم تضمين أسماء منتجات مثل "Teatime Chocolate Biscuits" أو "Chocolate" في نتائج الاستعلام.
استخدام IN وNOT IN لقيم متعددة
SELECT customer_name AS full_name
FROM sales.customers
WHERE country IN ('Germany', 'France', 'UK');
يسترد هذا الاستعلام قائمة بالعملاء الذين تم تحديدهم country إما ألمانيا أو فرنسا أو المملكة المتحدة. باستخدام عامل تشغيل INSQL ، يتحقق الاستعلام من عمود البلد للحصول على تطابقات مع مجموعة محددة من القيم ('ألمانيا'، 'فرنسا'، 'المملكة المتحدة'). إذا كانت القيمة في عمود البلد تتوافق مع أي من هذه الخيارات الثلاثة، يتم إرجاع أسماء العملاء المقابلة وعرضها تحت الاسم المستعار full_name.
SELECT *
FROM sales.products
WHERE category_id NOT IN (1, 3);
يسترد هذا الاستعلام المنتجات غير المصنفة ضمن الفئات 1 أو 3.
استخدام BETWEEN لقيم النطاق
SELECT *
FROM sales.products
WHERE price BETWEEN 20 and 40;
يسترد هذا الاستعلام المنتجات التي تتراوح أسعارها بين 20 و40 وحدة عملة، شاملة.
BETWEEN يتم استخدام العبارة في SQL لتصفية البيانات ضمن نطاق محدد من القيم. إنها شاملة، ما يعني أنها تتضمن قيم الحدود المحددة في النطاق. وهذا مفيد لتضييق نطاق مجموعات البيانات استنادا إلى القيم الرقمية أو التاريخ أو حتى النصية (إن أمكن). يوفر طريقة موجزة وقابلة للقراءة لتعريف نطاق، بدلا من استخدام عوامل تشغيل شرطية متعددة مثل >= و <=.
استخدام IS NULL و IS NOT NULL للقيم الخالية
SELECT *
FROM sales.customers
WHERE postal_code IS NULL;
يسترد هذا الاستعلام العملاء الذين لديهم مفقود postal_code.
في SQL، NULL يمثل البيانات المفقودة أو غير المعرفة في قاعدة بيانات.
لا يعادل صفرا أو سلسلة فارغة أو أي نوع آخر من القيم، ولكنه يشير إلى عدم وجود قيمة.
للتعامل مع NULL، يمكنك استخدام عوامل تصفية مثل IS NULL لتعريف السجلات ذات القيم المفقودة أو IS NOT NULL للبحث عن إدخالات مع بيانات محددة.
تعد عوامل التصفية هذه مفيدة في تنقية البيانات، لأنها تساعد على فصل السجلات للتصحيح أو الاستبعاد أو العلاج المتخصص.