SQL وضع قيمة إفتراضية لكل حالة

مفهوم القيم الإفتراضية لكل حالة

أحياناً, بعد جلب البيانات من الجداول قد تكون بحاجة لعرض قيم أخرى بدلاً من البيانات نفسها.
مثلاً في حال قمت ببناء قاعدة بيانات لمدرسة و فيها قمت بحفظ علامات الطلاب لكل مادة.
الآن, في حال أردت عرض علامات الطلاب في مادة معينة, قد تقوم بعرضها بشكل مختلف عن الشكل الذي حفظتها فيه كالتالي:

  • A في حال كانت علامة الطالب بين 90 و 100.
  • B في حال كانت علامة الطالب بين 89 و 80.
  • C في حال كانت علامة الطالب بين 79 و 70.
  • D في حال كانت علامة الطالب بين 69 و 60.
  • F في حال كانت علامة الطالب بين 59 و 0.
  • Error إذا لم تكن علامة الطالب بين 0 و 100.

إذاً في هذه الحالة سنضع قائمة من الإحتمالات على العمود الذي سيتم فيه عرض علامات الطلاب حتى نعرض الحرف المناسب بناءاً عليها.

قائمة الإحتمالات التي يمكننا وضعها على أي عمود في الجدول الذي سيرجع في النتيجة النهائية تتيح لنا تغيير قيمة العمود في حال كانت تطابق شرط محدد و تتيح لنا وضع قيمة إفتراضية بدل القيمة الحالية في حال لم تتطابق القيمة مع أي شرط.


الشكل العام لوضع قائمة إحتمالات على أي عامود

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;
	

  • لوضع قائمة من القيم الإفتراضية التي سيتم وضعها مكان قيم العمود الأصلية, نضع الكلمتين CASE و End في المكان الذي كنا ننوي فيه عرض قيم العمود.
  • أي شرط تريد وضعه على قيم العمود, تضع قبله الكلمة WHEN و بعده الكلمة THEN التي تضع من بعدها القيمة التي سيتم وضعها في حال تحقق الشرط.
  • إذا أردت وضع قيمة إفتراضية يتم وضعها في حال لم يتطابق أي شرط, فيمكنك وضع الكلمة ELSE و وضع القائمة الإفتراضية بعدها.

عند وضع قائمة إحتمالات, تأكد من وضع إحتمالات لكل القيم, لأنه في حال مرور قيمة لا توجد إطلاقاً ضمن قائمة الإحتمالات الموضوعة, سيتم وضع القيمة Null مكانها في النتيجة النهائية.

تجهيز قاعدة البيانات التي سنطبق عليها

قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash و تنشئ فيها جدول إسمه students يحتوي على بيانات 10 موظفين.

الإستعلام

-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها
DROP DATABASE IF EXISTS harmash;

-- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها
CREATE DATABASE harmash;

-- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات
USE harmash;

-- يتألف من ستة أعمدة students هنا قمنا بإنشاء جدول جديد إسمه
-- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات
CREATE TABLE students (
	id   INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
	math INT
);

-- هنا قمنا بإضافة 10 أسطر في الجدول, أي أضفنا معلومات 10 طلاب
-- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات
-- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة
-- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة
INSERT INTO students VALUES (null, "Ahmad", 82);
INSERT INTO students VALUES (null, "Rami", 87);
INSERT INTO students VALUES (null, "Said", 73);
INSERT INTO students VALUES (null, "Noura", 92);
INSERT INTO students VALUES (null, "Amani", 78);
INSERT INTO students VALUES (null, "Mhamad", 65);
INSERT INTO students VALUES (null, "Ahmad", 45);
INSERT INTO students VALUES (null, "Mostafa", 95);
INSERT INTO students VALUES (null, "Jana", 68);
INSERT INTO students VALUES (null, "Houssam", 120);
		

بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash و إنشاء الجدول students بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.


البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول students.

id name math
1 Ahmad 82
2 Rami 87
3 Said 73
4 Noura 92
5 Amani 78
6 Mhamad 65
7 Ahmad 45
8 Mostafa 95
9 Jana 68
10 Houssam 120

أمثلة حول وضع حالات للقيم التي سترجع


المثال الأول

الإستعلام التالي يقوم بعرض id كل طالب, name كل طالب, بالإضافة إلى ما إن كان الطالب ناجح في مادة الرياضيات أم لا.

طباعة ما إن كان الطلاب ناجح في المادة أم لا وضعناها كالتالي:

  • إذا كانت العلامة بين 60 و 100 فعندها يعتبر ناجحاً.
  • إذا كانت العلامة بين 0 و 59 فعندها يعتبر راسباً.
  • غير ذلك, هناك خطأ في العلامة المدخلة و يجب مراجعة الأستاذ.

الإستعلام

SELECT                 -- لجلب بيانات من جدول SELECT هنا قمنا باستخدام الأمر
	id AS 'Id',        -- هنا قمنا بتحديد أول عمود سيتم عرض قيمه مع تغيير إسم العامود
    name AS 'Name',    -- هنا قمنا بتحديد ثاني عمود سيتم عرض قيمه مع تغيير إسم العامود
    CASE               -- هنا قمنا بتحديد ما سيتم عرضه في العمود الثالث, سيتم عرض قيمه من القائمة التالية
    	WHEN math BETWEEN 60 AND 100 THEN 'Passed'   -- 'Passed' بين 60 و 100 سيتم وضع القيمة math إذا كانت قيمة الحقل
    	WHEN math BETWEEN 0  AND 59  THEN 'Failed'   -- 'Failed' بين 0 و 59 سيتم وضع القيمة math إذا كانت قيمة الحقل
    	ELSE 'Refer to Professor'                    -- 'Refer to Professor' أي قيمة أخرى, سيتم وضع الجملة math إذا كانت قيمة الحقل
    END AS 'Math Note'                               -- هنا قمنا بتغيير إسم العامود
FROM
	students;          -- هنا قمنا بتحديد إسم الجدول الذي سيتم جلب البيانات منه
		

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Id Name Math Note
1 Ahmad Passed
2 Rami Passed
3 Said Passed
4 Noura Passed
5 Amani Passed
6 Mhamad Passed
7 Ahmad Failed
8 Mostafa Passed
9 Jana Passed
10 Houssam Refer to Professor


المثال الثاني

الإستعلام التالي يقوم بعرض معلومات الطالب كما هي, و علامة مادة الرياضيات math يعرضها مرة ثانية على شكل أحرف كالتالي:

  • A في حال كانت علامة الطالب بين 90 و 100.
  • B في حال كانت علامة الطالب بين 89 و 80.
  • C في حال كانت علامة الطالب بين 79 و 70.
  • D في حال كانت علامة الطالب بين 69 و 60.
  • F في حال كانت علامة الطالب بين 59 و 0.
  • Error إذا لم تكن علامة الطالب بين 0 و 100.

الإستعلام

SELECT                           -- لجلب بيانات من جدول SELECT هنا قمنا باستخدام الأمر
	id AS 'Id',                  -- هنا قمنا بتحديد أول عمود سيتم عرض قيمه مع تغيير إسم العامود
    name AS 'Name',              -- هنا قمنا بتحديد ثاني عمود سيتم عرض قيمه مع تغيير إسم العامود
    math AS 'Math (Percent)',    -- هنا قمنا بتحديد ثالث عمود سيتم عرض قيمه مع تغيير إسم العامود
    CASE                         -- هنا قمنا بتحديد ما سيتم عرضه في العمود الرابع, سيتم عرض قيمه من القائمة التالية
    	WHEN math BETWEEN 90 AND 100 THEN 'A'    -- 'A' بين 90 و 100 سيتم وضع الحرف math إذا كانت قيمة الحقل
    	WHEN math BETWEEN 80 AND 89  THEN 'B'    -- 'B' بين 80 و 89 سيتم وضع الحرف math إذا كانت قيمة الحقل
    	WHEN math BETWEEN 70 AND 79  THEN 'C'    -- 'C' بين 70 و 79 سيتم وضع الحرف math إذا كانت قيمة الحقل
    	WHEN math BETWEEN 60 AND 69  THEN 'D'    -- 'D' بين 60 و 69 سيتم وضع الحرف math إذا كانت قيمة الحقل
    	WHEN math BETWEEN 0  AND 59  THEN 'E'    -- 'E' بين 0 و 59 سيتم وضع الحرف math إذا كانت قيمة الحقل
    	ELSE 'Refer to Professor'                -- 'Refer to Professor' أي قيمة أخرى, سيتم وضع الجملة math إذا كانت قيمة الحقل
    END AS 'Math (Letter)'                       -- هنا قمنا بتغيير إسم العامود
FROM
	students;                    -- هنا قمنا بتحديد إسم الجدول الذي سيتم جلب البيانات منه
		

سنحصل على النتيجة التالية عند تنفيذ الإستعلام.

Id Name Math (Percent) Math (Letter)
1 Ahmad 82 B
2 Rami 87 B
3 Said 73 C
4 Noura 92 A
5 Amani 78 C
6 Mhamad 65 D
7 Ahmad 45 E
8 Mostafa 95 A
9 Jana 68 D
10 Houssam 120 Refer to Professor

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة