Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

  • الجملة الشرطية CASE
  • تجهيز قاعدة البيانات التي سنطبق عليها
  • أمثلة حول وضع قائمة إحتمالات للقيم التي ترجع

الجملة الشرطية CASE

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

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


الشكل العام لاستخدامها

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END;
  • قائمة القيم يتم وضعها بين الكلمتين CASE و End في المكان الذي كنا ننوي فيه تبديل قيم العمود.
  • أي شرط في القائمة يتم وضعه بعد الكلمة WHEN و أي قيمة سيتم تبديلها إذا تحقق الشرط يتم وضعها بجانبه بعد الكلمة THEN.
  • إذا أردت وضع قيمة إفتراضية ليتم وضعها في حال لم يتحقق أي شرط، يمكنك وضع الكلمة ELSE وضع القيمة بعدها.

في حال لم يتم وضع قيمة إفتراضية بواسطة الكلمة 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);
-- سيتم حذفها 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);

فيما يلي البيانات التي قمنا بإضافتها في الجدول 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; -- هنا قمنا بتحديد إسم الجدول الذي سيتم جلب البيانات منه
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; -- هنا قمنا بتحديد إسم الجدول الذي سيتم جلب البيانات منه
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