MySQL أين البند: و، أو، في، ليس في مثال الاستعلام

⚡ ملخص ذكي

MySQL تُستخدم عبارة WHERE لتصفية الصفوف قبل وصولها إلى مجموعة النتائج، وتطبيق معايير دقيقة على عبارات SELECT وUPDATE وDELETE. يُمكّن فهم عوامل AND وOR وIN وNOT IN وعوامل المقارنة المبتدئين من استرجاع السجلات المطلوبة بدقة.

  • 🔍 الغرض الأساسي: تحدد عبارة WHERE الصفوف التي تؤثر عليها العبارة، لذا فإن SELECT و UPDATE و DELETE تؤثر فقط على الصفوف المطابقة.
  • 🔗 لأي لبس Operaتور: يتم إرجاع الصفوف فقط عندما تكون كل الشروط صحيحة، مما يؤدي إلى تضييق نطاق مجموعة النتائج.
  • 🔀 OR Operaتور: يتم إرجاع الصفوف عندما يكون أي شرط واحد صحيحًا، مما يؤدي إلى توسيع مجموعة النتائج.
  • 📋 داخل وخارج: تطابق الكلمة المفتاحية IN قائمة من القيم في تعبير واحد، بينما تستبعد الكلمة المفتاحية NOT IN تلك القائمة نفسها.
  • 🇧🇷 مقارنة Operaتورس: تُستخدم علامات التصفية (=)، و (>)، و (<)، و (<>) لتصفية الأعمدة الرقمية والنصية والتاريخية.
  • ⚠️ معالجة القيم الفارغة: لا يتطابق NULL أبدًا مع = أو <>، لذلك فإن IS NULL و IS NOT NULL مطلوبان لاختبار القيم المفقودة.

ما هو حيث البند في MySQL?

حيث شرط in MySQL هي كلمة أساسية تستخدم لتحديد المعايير الدقيقة للبيانات أو الصفوف التي ستتأثر بجملة SQL المحددة. يمكن استخدام جملة WHERE مع جمل SQL مثل INSERT وUPDATE وSELECT وDELETE لتصفية السجلات وإجراء عمليات مختلفة على البيانات.

لقد نظرنا في كيفية الاستعلام عن البيانات من ملف قاعدة بيانات باستخدام عبارة SELECT في البرنامج التعليمي السابق. أرجعت عبارة SELECT كافة النتائج من جدول قاعدة البيانات الذي تم الاستعلام عنه.

مع ذلك، توجد أحيانًا أوقات نرغب فيها بتقييد نتائج الاستعلام بشرط محدد. تُعدّ عبارة WHERE في لغة SQL مفيدة في مثل هذه الحالات، وتعمل بنفس الطريقة في... استعلام الحذف أو التحديث كما هو الحال في استعلام SELECT.

حيث جملة في MySQL

حيث بناء الجملة

الصيغة الأساسية لعبارة WHERE هي كما يلي.

SELECT * FROM tableName WHERE condition;

هنا

  • "اختر * من اسم الجدول" هو المعيار اختيار البيان
  • "أين" الكلمة المفتاحية هي التي تحدد مجموعة النتائج، و "حالة" هو عامل التصفية المطبق على النتائج. قد يكون عامل التصفية نطاقًا أو قيمة واحدة أو استعلامًا فرعيًا.

لنفترض أننا نريد تفاصيل عضو من جدول الأعضاء، علماً بأن رقم عضويته هو 1. البرنامج النصي أدناه يحقق ذلك.

SELECT * FROM `members` WHERE `membership_number` = 1;

تنفيذ هذا البرنامج النصي في MySQL طاولة العمل ينتج عن الأمر "myflixdb" النتيجة الموضحة أدناه.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm

نادراً ما يكون شرط واحد كافياً. تجمع الأقسام أدناه بين WHERE و العوامل المنطقية.

حيث جملة جنبا إلى جنب مع - لأي لبس منطقي Operaتور

باستخدام عامل التشغيل المنطقي "و"، يتم إرجاع صف فقط إذا تم استيفاء جميع المعايير المحددة.

لنفترض أننا نريد جميع الأفلام في الفئة 2 التي تم إصدارها في عام 2008. يحقق النص البرمجي أدناه ذلك.

SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;

يؤدي تنفيذ البرنامج النصي أعلاه على "myflixdb" إلى النتيجة التالية.

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

و يُضيّق نطاق النتائج. أو يُوسّعه.

حيث جملة جنبا إلى جنب مع - OR منطقي Operaتور

باستخدام عامل التشغيل OR، يتم إرجاع صف إذا تم استيفاء أي من المعايير المحددة.

يقوم البرنامج النصي التالي باستخراج جميع الأفلام إما في الفئة 1 أو الفئة 2.

SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;

تظهر مجموعة النتائج أدناه.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

يصبح ربط العديد من شروط "أو" أمراً صعباً للقراءة. الكلمة المفتاحية "IN" تحل هذه المشكلة.

حيث جملة جنبا إلى جنب مع - IN البحث عن كلمة

عند استخدام عبارة WHERE مع الكلمة المفتاحية IN، فإنها تؤثر فقط على الصفوف التي تتطابق قيمها مع القائمة المُقدمة. يقلل استخدام IN من عدد عبارات OR التي قد تحتاج إلى كتابتها.

ما يلي MySQL يُظهر استعلام WHERE IN الصفوف التي يكون فيها membership_number إما 1 أو 2 أو 3.

SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);

تظهر مجموعة النتائج أدناه.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com

يقوم خيار "ليس داخل" بتنفيذ التصفية المعاكسة.

حيث جملة جنبا إلى جنب مع - ليس في البحث عن كلمة

باستخدام الكلمة المفتاحية NOT IN، تستبعد عبارة WHERE كل صف تتطابق قيمته مع القائمة المقدمة.

الاستعلام التالي يعطي الصفوف حيث يكون رقم العضوية ليس 1 أو 2 أو 3.

SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);

تظهر مجموعة النتائج أدناه.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

يقوم WHERE أيضًا بتصفية القيم حسب الحجم والمساواة، باستخدام عوامل المقارنة.

حيث جملة جنبا إلى جنب مع - مقارنة Operaالاختصاصات

يمكن استخدام عوامل المقارنة الأصغر من (<)، والمساوي (=)، والأكبر من (>)، وغير المساوي (<>) مع عبارة WHERE.

= يساوي

يحصل البرنامج النصي التالي على جميع الأعضاء الإناث من جدول الأعضاء باستخدام عامل المقارنة.

SELECT * FROM `members` WHERE `gender` = 'Female';

تظهر مجموعة النتائج أدناه.

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

> اعظم من

يقوم البرنامج النصي التالي باسترداد جميع المدفوعات التي تزيد عن 2,000 من جدول المدفوعات.

SELECT * FROM `payments` WHERE `amount_paid` > 2000;

تظهر مجموعة النتائج أدناه.

payment_id membership_number payment_date description amount_paid external_reference_number
1 1 23-07-2012 Movie rental payment 2500 11
3 3 30-07-2012 Movie rental payment 6000 NULL

لا يساوي

يحصل البرنامج النصي التالي على جميع الأفلام التي لا يساوي معرف فئتها 1.

SELECT * FROM `movies` WHERE `category_id` <> 1;

تظهر مجموعة النتائج أدناه.

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooners John Schultz 2005 8

مرجع سريع: جملة WHERE Operaالاختصاصات

يُلخّص الجدول أدناه عوامل التشغيل الأكثر استخدامًا مع عبارة WHERE. تظهر التعريفات الكاملة في MySQL مرجع المشغل.

المُشغل معنى مثال على الشرط
= يساوي `gender` = 'أنثى'
<> لا يساوي `category_id` <> 1
> / أكبر من / أصغر من `amount_paid` > 2000
و / أو جميع المعايير / أي معيار `category_id` = 2 AND `year_released` = 2008
داخل / ليس داخل يطابق / يستبعد قائمة `membership_number` IN (1,2,3)
فارغ / غير فارغ اختبارات القيم المفقودة `postal_address` IS NULL

⚠️ ملاحظة: لا تتطابق قيمة NULL مع القيمتين = أو <>. استخدم IS NULL أو IS NOT NULL عندما لا يحتوي العمود على أي قيمة.

لغز ذهني: ابحث عن الأفلام التي تم إرجاعها متأخرة

لنفترض أننا نريد الأفلام المستأجرة التي لم تُعاد قبل تاريخ 25/06/2012. يمكن تحقيق ذلك باستخدام جملة WHERE مع عامل المقارنة "أصغر من" وعامل AND.

SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;

تنفيذ البرنامج النصي أعلاه في MySQL يعطي workbench النتائج التالية.

reference_number transaction_date return_date membership_number movie_id movie_returned
14 21-06-2012 24-06-2012 2 2 0

الأسئلة الشائعة

يقوم الأمر WHERE بتصفية الصفوف الفردية قبل التجميعpingلذا، لا يمكنه الإشارة إلى الدوال التجميعية. يقوم HAVING بتصفية المجموعات بعد تنفيذ GROUP BY، مما يجعله المكان المناسب لشروط مثل COUNT(*) > 5.

استخدم IS NULL أو IS NOT NULL. Operaتُرجع المعاملات مثل = و <> قيمة غير معروفة لـ NULL، لذا فإن `postal_address` = NULL لا يطابق أي شيء، بينما `postal_address` IS NULL يعمل.

نعم، عندما يتم فهرسة العمود المُصفّى، MySQL يقرأ فقط الصفوف المطابقة بدلاً من مسح الجدول بالكامل. التفاف النصping يمنع عمود في دالة، مثل YEAR(`date_of_birth`) = 1980، استخدام الفهرس.

نعم. تقوم المساعدات المدعومة بالذكاء الاصطناعي بتحويل اللغة الإنجليزية العادية إلى لغة SQL، و MySQL طاولة العمل يمكن تشغيل النتيجة. Revراجع كل شرط مقابل مخططك، لأن النموذج قد يخترع أسماء الأعمدة.

اختبره باستخدام SELECT أولاً. هناك شرط WHERE خاطئ في استعلام الحذف أو التحديث يمكنك تعديل كل صف. استعرض الصفوف المطابقة، ثم أعد استخدام الشرط نفسه للكتابة.

تلخيص هذه التدوينة بـ: