الان في رأسي بعض التحديات :
اليك التحدي الثالث :
اريد عرض اسماء ورواتب الموظفين الذين راتبهم اكبر من 1000 واقل من 5000 بدون استخدام
Between
التحدي الرابع :
اريد عرض اسماء ورواتب الموظفين الذين اسمائهم
KING أو SCOTT أو TIGER بدون استخدام IN
التحدي الخامس :
هل تشاهد الصورة 47 ؟؟ وهي ثلاث شروط ... برأيك مالناتج اذا كان بينهم
OR ؟؟ وما الناتج اذا كان بينهم AND
(الصورة 47)
قبل ان ابدأ في المعامل الاخير ... للمنطق اريد تذكيرك ببعض الامور .
صح أو خطأ = صح
بالانجليزي تكتب هكذا :
True OR False = True
اوكيه .. اتفقنا !!
3) المعامل المنطقي الاخير NOT :
ضعيف بالانجليزي ؟؟؟ يعني مثلي ...
طيب
NOT تعني "لا" وتعني نفي الشيء .. وفي درسنا هذا تعني عكس الشيء .. هل فهمت ؟
هذا المعامل ... غريب بعض الشيء ...
لا يستخدم مباشرة ..بل يجب ان يعمل مع معاملات اخرى وهي اربع معاملات :
المعامل
Between
المعامل
IN
المعامل
IS NULL
المعامل
LIKE
نأخذها وحدة وحدة ..
- استخدام
not مع المعامل Between
مثال عليها ... نريد عرض رواتب واسماء الموظفين الذين راتبهم ليس (لاحظ ليس) بين الـ 1000 و 3000
اليك الجملة
:
كود:
select ename,sal from emp
where sal not between 1000 and 3000 ;
والناتج هو كل الموظفين الذين راتبهم فوق الـ3000 وتحت الـ 1000
كود:
ENAME SAL
---------- ----------
SMITH 800
KING 5000
JAMES 950
فهمت ؟
- استخدام
not مع المعامل IN
اعرض اسماء من هم ليسو(لاحظ كلمة ليسو) في هذه القائمة :
(KING , SCOTT , CLARK , ADAMS)
اليك الأمر (دائما اقصد بالأمر هو جملة الاستعلام )
:
كود:
select ename from emp
where ename not in ('KING' , 'SCOTT' , 'ADAMS' , 'CLARK');
واليك النتيجة
كود:
ENAME
---------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
TURNER
JAMES
FORD
MILLER
- استخدام
not مع المعامل IS NULL
ابسط مثال هو الحقل
comm هل تذكره ؟؟ وهو الخاص بالرواتب الاضافية (احب ان اذكر كثيرا ^^.. اعذرني)
اريد عرض اسماء و الرواتب الاضافية الخاصة بكل من هم ليسو من الذين لا يملكون راتب اضافي ...
يعني اريد عرض كل من هم ليس راتبهم الإضافي يساوي
null
هل فهمت ؟؟
اليك الامر :
كود:
select ename,comm from emp
where comm is not null ;
لاحظ ان عكس
is null هي is not null
والنتيجة هي كل من لهم راتب اضافي ,,
كود:
ENAME COMM
---------- ----------
ALLEN 300
WARD 500
MARTIN 1400
TURNER 0
- استخدام
not مع المعامل LIKE
اعرض لي اسماء الموظفين التي لا تبدأ بحرف الـ
S
جملة الاستعلام :
كود:
select ename from emp
where ename not like 'S%';
النتيجـــــــــــة :
كود:
ENAME
-------
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
KING
TURNER
ADAMS
JAMES
FORD
MILLER
انتهينا من المعاملات جميعها ,,
بقي ان أغوص بك في وحل المنطق مرة ثانية .. لأني
أريدكأن تكون محترفا , ولأني أريدك ان تكون مبرمجا , ولأنيأريدك ان تدعي لي (وليس علي ) اذا واجهت مصائبها فيما بعد ..
الآن ركز جيــــــــدا في المطلوب !! التركيز التركيز ,, ولا شيء غير التركيز ,
اريد عرض اسماء و رواتب أساسية
وإضافية للموظفين الذين اسمائهم مكونة من أربع احرف و لديهم رواتب اضافية أورواتبهم اكبر من 2000 دولار ...
انا في رأيي الشخصي البحت .. والذي اعتقد انه 1000000% صحيح ..... ان السؤال السابق.. غامض .. ولا اعلم مالذي يقصده بالضبط اليك صيغتين :
الصيغة الاولى :
هل يريد الذين اسمائهم مكونة من اربع احرف ولديهم راتب اضافي ؟؟.....
او
الذين راتبهم اكبر من 2000 دولار ؟؟؟
الصيغة الثانية :
هل يريد الذين اسمائهم مكونة من اربع احرف ؟؟
و
لديهم رواتب اضافية او راتبهم اكبر من 2000 دولار ؟؟؟
هل لاحظت لماذا وضعت انا هذه الصيغتين ؟ اذا لم تلاحظ بعد ... فجرب ان تفهم مايلي :
الصيغة الاولى :
(اسمائهم أربع حروف) و (لديهم راتب اضافي أو راتبهم اكبر من 2000 دولار )
الصيغة الثانية : (اسمائهم اربع حروف و لديهم راتب اضافي ) أو ( راتبهم اكبر من 2000 دولار )
يعني الصيغة الاولى .. ان تتم عملية الـ
OR اولا ثم AND
وفي الصيغة الثانية .... ان تتم عملية الـ
AND اولا ثم OR
من البلاهة المغولية ان تقول ...
"كلاهما نفس المعنى "... اذا كان تفكيرك بهذه الصيغة ... وبدون تفكير عميق ..
أنصحك بالانسحاب من القراءة .. واذهب لاحتراف كرة القدم أفضل لك وتدر عليك أموال أكثر ,,,
اذا لم تفهم بعد مالذي يحدث هنا ... فجرب ان تفهم الان :
هل تذكر الاولويات الحسابية ؟ والتي قلنا انها على هذا الترتيب :
الأقواس
الأسس
الضرب او القسمة
الجمع او الطرح
هل تذكرها ؟؟
هنا توجد اولويات ايضا !! اقصد بالأولويات يعني شيء قبل شيء .....
يعني اولويات حسابية .. وأولويات منطقية !!
الاولويات الحسابية ذكرناها ...
اما الاولويات المنطقية فسوف نكتشفها الان ..
هل
AND اولا ثم OR ؟؟
او OR اولا ثم AND ؟؟؟
ام الذي نواجهه اولا .. هو الذي يكون اولا ؟؟ مثل ما شاهدنا في الضرب والقسمة ..
الضرب او القسمة لهما نفس الاولوية .. صح ؟ أي منهما اولا اذا جاءا سوية ؟؟ هل تذكر ؟؟
طبعا الذي يوجهنا اولا ... يكون هو الاول ...
من الممكن ان تكون AND و OR لهما نفس الاولوية , لا نعرف .....
ممممم نجرب ... (لا تلومني .. انا لا اريد أعطيك معلومات جاهزة ... لان المعلومات الساخنة والطازجة تلتهم وتختفي بسرعة... ولأني بنفسي لا اعرف الحل ... وبالتالي دعنا نعيش المشكلة سوية ونوجهها سوية .. )
الان .. انا شخصيا اريد الصيغة الاولى ...
يعني
اريد عرض اسماء الموظفين الذين اسمائهم أربع حروف
و
الذين لديهم راتب اضافي أو راتبهم اكبر من 2000 دولار
بمعنى اخر اريد
اسم مكون من أربع احرف ... و ... احد الأمرين او كلاهما..
1- يا راتب فوق 2000 او 2- لديه راتب اضافي
لاحظ انني استخدمت الصيغة الاولى .. أي انني اريد ان تتم عملية الـ
OR اولا ....
اذن ... نجرب هذا الأمر ...
كود:
select ename ,sal,comm from emp
where ename like '____'
and comm is not null or sal >2000 ;
انظر الناتج :
كود:
ENAME SAL COMM
---------- ---------- ----------
WARD 1250 500
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000
لو دققت ...
و
تمحصت ..
وركزت ...
وتتبعت ...
وانا اعرف انك لم تعمل أي منها ...
ولكن الذي حدث هو ان and بدأت اولا ....
هل لأنها أتت اولا ؟؟
يمكن !!
نجرب لو وضعنا الـ OR اولا .. مالذي سيحدث ... اليك جملة الاستعلام التالية
كود:
select ename ,sal,comm from emp
where sal >2000 or comm is not null
and ename like '____';
سوف تكون نفس النتيجة .. هل تصدق !
لاحظ كيف قلبت الترتيب .. لكي اضمن نفس المفهوم ...
يعني
اريد عرض اسماء الموظفين الذين اسمائهم أربع حروف
و
الذين لديهم راتب اضافي أو راتبهم اكبر من 2000 دولار
هي نفسها
اريد عرض اسماء الموظفين
راتبهم اكبر من 2000 دولار أو الذين لديهم راتب اضافي
و
الذين اسمائهم أربع حروف
اذا لم تصدق ... ركز فيها .. واذا لم تفهم بالمرة مالذي حدث ... تجاهل الموضوع ...
قلنا انها نفس النتيجة .. يعني بدأ بالـAND !!
اذن الـ
AND هي اولا ... ثم الـ OR
طيب فكر لو ... انه يوجد
And مرتين .. ايهما اولا .. ؟؟؟
هذا هو التحدي السادس .... التحدي هو انتشرح لي بمثال .. من عندك .. لو هناك AND و OR و AND ... مالذي سوف يحدث اولا ؟؟ ولماذا ؟؟
قلنا قبل قليل انه الـ
AND اولا ثم الـ OR ....
لكن انا اريد الـ
OR اولا .. مالعمل ؟؟
يا سيدي ... الاقواس هي الحل ,,
من الان وصاعدا .. تعود ان تضع الاقواس ... بسبب او بدون ’
,’,’,’,
اليك الحل .... جملة الاستعلام هي :
كود:
select ename ,sal,comm from emp
where (ename like '____' )
and (comm is not null or sal > 2000 ) ;
هل شاهدت الاقواس ؟؟
هل شاهدت اقواس زائدة والتي تضم الجملة (
ename like '____' ) ؟؟
بإمكاننا ان ننزعها ... لكن تعود وتمرس الان ان تضعها ... لماذا ؟ لكي تسهل عليك القراءة .. ولكي تفهم المطلوب من الكود .. ولكي تكون مرتاح البال .... ولأني أأمرك بذلك ,,,
والنتيجة هي :
كود:
ENAME SAL COMM
---------- ---------- ----------
WARD 1250 500
KING 5000
FORD 3000
هذا ما أردته بالضبط ... يا سلام ,, اسم مكون من أربع احرف ... و ... (احد الأمرين او كلاهما..راتب فوق 2000 او لديه راتب إضافي
)
اذا لم تفهم مالذي يدور هنا ... لا تخف .. اقرأ مرة ومرتين .. وثلاث ..
( اذا مازلت تعاني ... فأنت من النوع الذي لا يحب القراءة .. او انك تحب أمثلة كثيرة .. او انك لا تريد ان تفهم او ان شرحي لا يناسب عقليتك وخبرتك وطريقة تفكيرك ,, )
سوف أجرب طريقة أخرى
,,
انظر السؤالين التاليين
السؤال الأول :
اريد عرض اسماء و رواتب أساسية وإضافية للموظفين الذين اسمائهم مكونة من أربع احرف و لديهم رواتب اضافية
أو ان يتم عرض اسماء ورواتب اساسية وإضافية للموظفين الذين رواتبهم اكبر من
3000 دولار ... وليس لديهم رواتب اضافية
هل شاهدت السؤال الأول وركزت في طريقة عرضه ... أنا لم اقل سؤال غامض كهذا :
السؤال الثاني
اريد عرض اسماء و رواتب أساسية وإضافية للموظفين الذين اسمائهم مكونة من أربع احرف و لديهم رواتب اضافية
أو الذين رواتبهم اكبر من 3000 دولار ... وليس لديهم رواتب اضافية
لو شاهدت مثل السؤال الثاني ... فأعرف انه من الخطأ عرضه كهذا
!!
من السؤال الأول نستنتج شكل السؤال كما يلي
(اسماء مكونة من اربع احرف و لديهم رواتب اضافية ) أو (رواتبهم اكبر من 3000 و ليس لديهم رواتب اضافية)
يا سلام على المنطق
,’,’
اليك جملة الاستعلام يا فتى ,,
كود:
select ename , sal , comm from emp
where
(ename like '____' and comm is not null ) or ( sal>3000 and comm is null ) ;
والنتيجة هي :
كود:
ENAME SAL COMM
---------- ---------- ----------
WARD 1250 500
KING 5000
التحدي السابع ...
.
لماذا ظهرت النتيجة السابقة ؟؟ لماذا
KING و WARD هما اللذان عرضا فقط ؟؟
اتحداك ان تقنعني لماذا .. أقنعني بطريقتك .. وسوف أحاول فهمك !!
ممممم .. نفسي في كوباتشينو ^^ .... عن اذنك