شرح SQL WHERE Clause مع أمثلة عملية على التصفية والتحديث والحذف
مقدمة: لماذا تُعد WHERE من أهم أدوات SQL؟
عند التعامل مع قواعد البيانات، لا يكون من المنطقي دائماً تنفيذ الأوامر على جميع السجلات داخل الجدول. ففي كثير من الحالات تحتاج إلى استهداف مجموعة محددة فقط من الصفوف بناءً على شرط معيّن. وهنا تظهر أهمية العبارة WHERE في SQL، لأنها تمنحك تحكماً دقيقاً في السجلات التي تريد قراءتها أو تعديلها أو حذفها.
وتزداد أهمية WHERE في العمليات الحساسة مثل UPDATE وDELETE، لأن تجاهلها قد يؤدي إلى تعديل كل البيانات أو حذفها بالكامل عن طريق الخطأ، وهو ما قد يسبب خسائر كبيرة في بيئات العمل الحقيقية.

صياغة WHERE في SQL
تُستخدم العبارة WHERE بعد تحديد الجدول المطلوب والعملية المراد تنفيذها، ثم يُكتب الشرط الذي يجب أن يتحقق في السجلات المستهدفة.
SELECT column1, column2
FROM table_name
WHERE condition;
ورغم أن هذا الشكل يظهر غالباً مع الأمر SELECT، فإن استخدام WHERE لا يقتصر عليه فقط، بل يمكن توظيفها أيضاً مع أوامر مثل UPDATE وDELETE.
جدول المستخدمين المستخدم في الأمثلة
لفهم طريقة عمل WHERE بشكل أوضح، سنعتمد على جدول افتراضي باسم users يحتوي على بيانات مستخدمين مثل الاسم والعمر والولاية والبريد الإلكتروني.
| id | name | age | state | |
|---|---|---|---|---|
| 1 | Brian | 15 | Michigan | brian@example.com |
| 2 | Leonard | 55 | Mississippi | leonard@example.com |
| 3 | Anvil | 31 | South Dakota | anvil@example.com |
| 4 | Jo | 44 | Maine | jo@example.com |
| 5 | Meredith | 43 | Delaware | meredith@example.com |
| 6 | Cody | 16 | Michigan | cody@example.com |
| 7 | Dilara | 50 | Ohio | dilara@example.com |
| 8 | Corbin | 47 | Wisconsin | corbin@example.com |
| 9 | Gin | 63 | Illinois | gin@example.com |
| 10 | Alice | 50 | Nevada | alice@example.com |
| 11 | Zachary | 21 | Massachusetts | zachery@example.com |
| 12 | Delmar | 56 | Idaho | delmar@example.com |
| 13 | Dennie | 96 | Ohio | dennie@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
| 15 | Busrah | 18 | South Dakota | busrah@example.com |
| 16 | Aveline | 88 | Nevada | aveline@example.com |
| 17 | Aherin | 72 | Arkansas | aherin@example.com |
| 18 | Viola | 66 | Maine | viola@example.com |
| 19 | Nadya | 22 | Florida | nadya@example.com |
| 20 | Izabela | 61 | Arizona | izabela@example.com |
استخدام WHERE مع SELECT لتصفية النتائج
اختيار المستخدمين الذين أعمارهم 50 سنة فأكثر
إذا أردت عرض المستخدمين الذين يبلغون 50 عاماً أو أكثر فقط، يمكنك كتابة الاستعلام التالي:
SELECT * FROM users
WHERE age >= 50;
هذا الاستعلام يعرض فقط السجلات التي تحقق الشرط الموجود بعد WHERE. والنتيجة ستكون مجموعة المستخدمين الأكبر سناً دون بقية الصفوف.
| id | name | age | state | |
|---|---|---|---|---|
| 2 | Leonard | 55 | Mississippi | leonard@example.com |
| 7 | Dilara | 50 | Ohio | dilara@example.com |
| 9 | Gin | 63 | Illinois | gin@example.com |
| 10 | Alice | 50 | Nevada | alice@example.com |
| 12 | Delmar | 56 | Idaho | delmar@example.com |
| 13 | Dennie | 96 | Ohio | dennie@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
| 16 | Aveline | 88 | Nevada | aveline@example.com |
| 17 | Aherin | 72 | Arkansas | aherin@example.com |
| 18 | Viola | 66 | Maine | viola@example.com |
| 20 | Izabela | 61 | Arizona | izabela@example.com |
استخدام WHERE مع DELETE لحذف سجل محدد
من أخطر أوامر SQL الأمر DELETE، لأن تنفيذه دون شرط قد يؤدي إلى حذف جميع السجلات من الجدول. لذلك من الضروري استخدام WHERE لتحديد الصف المستهدف بدقة.
إذا قرر المستخدم Cody إزالة بياناته من الجدول، فيمكن حذف سجله فقط باستخدام الاستعلام التالي:
DELETE FROM users
WHERE name IS "Cody";
بعد تنفيذ هذا الأمر، سيُحذف السجل الذي يخص Cody فقط، بينما تبقى بقية البيانات كما هي.
استخدام WHERE مع UPDATE لتعديل بيانات سجل معين
عند الحاجة إلى تحديث قيمة داخل سجل واحد أو مجموعة سجلات معيّنة، فإن WHERE تحميك من تعديل كل الصفوف في الجدول دون قصد.
على سبيل المثال، إذا أصبحت قيمة عمر المستخدم Anvil هي 32 بدلاً من 31، يمكن تنفيذ التحديث كالتالي:
UPDATE users
SET age = 32
WHERE name IS "Anvil";
هذا الاستعلام يضمن تعديل سجل Anvil فقط، وهو ما يجعل عمليات التحديث أكثر أماناً ودقة.
أهم المعاملات المستخدمة مع WHERE
يمكنك كتابة شروط متنوعة داخل WHERE باستخدام معاملات المقارنة والبحث. من أشهر هذه المعاملات:
=للمساواة.>لأكبر من.<لأصغر من.>=لأكبر من أو يساوي.<=لأصغر من أو يساوي.<>أو!=لعدم المساواة، حسب نسخةSQL.BETWEENلتحديد نطاق.LIKEللمطابقة النمطية.INللتحقق من وجود قيمة ضمن قائمة.ISوNOTوANDوORلبناء شروط مركبة.
وتُستخدم المعاملات الرقمية مثل > و< و>= و<= غالباً مع الأرقام، بينما تصلح = و<> للاستخدام مع أنواع بيانات متعددة.
شرح BETWEEN في SQL
تحديد نطاق عمري معيّن
يتيح لك المعامل BETWEEN اختيار السجلات التي تقع قيمها ضمن مجال محدد. فإذا أردت جلب المستخدمين الذين تتراوح أعمارهم بين 24 و51، يمكنك كتابة:
SELECT * FROM users
WHERE age BETWEEN 24 AND 51;
وسيُرجع هذا الاستعلام جميع السجلات التي تقع قيمة age فيها داخل هذا النطاق، بما يشمل الحدين في أغلب أنظمة SQL.
| id | name | age | state | |
|---|---|---|---|---|
| 3 | Anvil | 32 | South Dakota | anvil@example.com |
| 4 | Jo | 44 | Maine | jo@example.com |
| 5 | Meredith | 43 | Delaware | meredith@example.com |
| 7 | Dilara | 50 | Ohio | dilara@example.com |
| 8 | Corbin | 47 | Wisconsin | corbin@example.com |
| 10 | Alice | 50 | Nevada | alice@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
شرح LIKE في SQL
البحث باستخدام الأنماط
المعامل LIKE مفيد جداً عندما لا تبحث عن قيمة حرفية كاملة، بل عن نمط معيّن داخل النصوص. على سبيل المثال، إذا أردت العثور على جميع الأسماء التي تبدأ بالحرف A، فاستخدم:
SELECT * FROM users
WHERE name LIKE "A%";
هذا الاستعلام يعرض كل اسم يبدأ بالحرف A.
| id | name | age | state | |
|---|---|---|---|---|
| 3 | Anvil | 32 | South Dakota | anvil@example.com |
| 10 | Alice | 50 | Nevada | alice@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
| 16 | Aveline | 88 | Nevada | aveline@example.com |
| 17 | Aherin | 72 | Arkansas | aherin@example.com |
كيفية بناء الأنماط مع LIKE
يعتمد LIKE على رمزين شائعين لتكوين الأنماط:
%: يمثل أي عدد من الأحرف، بما في ذلك صفر أو حرف واحد أو أكثر._: يمثل حرفاً واحداً فقط.
فعلى سبيل المثال، النمط "_ook" يمكن أن يطابق كلمات مثل book أو look أو nook، بينما النمط "%ook" قد يطابق أيضاً ook أو phonebook.
شرح IN في SQL
اختيار القيم من قائمة محددة
يُستخدم المعامل IN عندما تريد اختبار ما إذا كانت قيمة العمود تنتمي إلى مجموعة من القيم المحتملة. وهو بديل أنظف من كتابة سلسلة طويلة من الشروط باستخدام OR.
في المثال التالي، نبحث عن المستخدمين المقيمين في ولايات الساحل الشرقي:
SELECT * FROM users
WHERE state IN (
"Maine",
"New Hampshire",
"Massachusetts",
"Rhode Island",
"Connecticut",
"New York",
"New Jersey",
"Delaware",
"Maryland",
"Virginia",
"North Carolina",
"South Carolina",
"Georgia",
"Florida"
);
يقارن هذا الشرط قيمة العمود state بالقيم الموجودة داخل القائمة، ويُرجع السجلات المتطابقة فقط.
| id | name | age | state | |
|---|---|---|---|---|
| 4 | Jo | 44 | Maine | jo@example.com |
| 5 | Meredith | 43 | Delaware | meredith@example.com |
| 11 | Zachary | 21 | Massachusetts | zachery@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
| 18 | Viola | 66 | Maine | viola@example.com |
| 19 | Nadya | 22 | Florida | nadya@example.com |
استخدام IS وNOT وAND وOR
المعامل IS
يُستخدم IS في هذا السياق للتحقق من تطابق القيمة مع قيمة محددة كما في المثال:
WHERE name IS "Cody"
المعامل NOT
إذا أردت عكس الشرط، يمكنك استخدام NOT. على سبيل المثال، الشرط التالي يختار المستخدمين الذين تقع أعمارهم خارج النطاق من 24 إلى 51:
SELECT * FROM users
WHERE age NOT BETWEEN 24 AND 51;
وبناءً على هذا الشرط، ستظهر السجلات التي أعمار أصحابها أقل من 24 أو أكبر من 51.
المعامل AND
يُستخدم AND عندما يجب أن يتحقق شرطان أو أكثر معاً. المثال التالي يعرض المستخدمين الذين تبدأ أسماؤهم بالحرف A وأعمارهم أكبر من 70:
SELECT * FROM users
WHERE name LIKE "A%" AND age > 70;
وهنا يجب أن يتحقق الشرطان في الوقت نفسه حتى يظهر السجل في النتائج.
| id | name | age | state | |
|---|---|---|---|---|
| 16 | Aveline | 88 | Nevada | aveline@example.com |
| 17 | Aherin | 72 | Arkansas | aherin@example.com |
المعامل OR
أما OR فيكفي معه تحقق أحد الشرطين فقط. على سبيل المثال:
SELECT * FROM users
WHERE name LIKE "A%" OR age > 70;
هذا الاستعلام يعرض السجلات التي يبدأ اسمها بالحرف A أو التي يزيد عمر صاحبها على 70، سواء تحقق أحد الشرطين أو كلاهما.
| id | name | age | state | |
|---|---|---|---|---|
| 3 | Anvil | 32 | South Dakota | anvil@example.com |
| 10 | Alice | 50 | Nevada | alice@example.com |
| 13 | Dennie | 96 | Ohio | dennie@example.com |
| 14 | Aaron | 50 | Florida | aaron@example.com |
| 16 | Aveline | 88 | Nevada | aveline@example.com |
| 17 | Aherin | 72 | Arkansas | aherin@example.com |
نصائح عملية لتجنّب الأخطاء عند استخدام WHERE
- اختبر الاستعلام أولاً باستخدام
SELECTقبل تشغيلUPDATEأوDELETE. - تأكد من دقة أسماء الأعمدة والقيم النصية.
- استخدم شروطاً واضحة ومحددة، خصوصاً عند العمل على قواعد بيانات إنتاجية.
- إذا كانت البيانات حساسة، نفّذ نسخة احتياطية قبل أوامر التعديل الجماعي.
- احرص على فهم أولوية الشروط عند الجمع بين
ANDوOR، واستخدم الأقواس عند الحاجة.
الخلاصة التقنية
تُعد العبارة WHERE حجر الأساس في كتابة استعلامات SQL الدقيقة والآمنة. فهي لا تقتصر على تصفية النتائج في SELECT، بل تؤدي دوراً حاسماً في حماية البيانات عند تنفيذ أوامر UPDATE وDELETE. ومن الناحية العملية، كلما أتقنت استخدام المعاملات مثل BETWEEN وLIKE وIN وAND وOR، أصبحت قادراً على بناء استعلامات أكثر مرونة وكفاءة وملاءمة لاحتياجات التطبيقات الحقيقية.