بتاريخ: 10 أكتوبر 200421 سنة comment_14751 اعتذر منكم على كثر الاسئلة ولكن الاسئلة على قدر المحبة ما هي RULES OF PRECEDENCE (2-19)ما هي NLSPARAMS (3-29)ما هو استخدام TO_CHAR FUNCTION مع NUMBERSما هي FX MALIFIEV كيف افرق بين صيغيتي YYوRR في التاريخ ماهو الفرق بين DECOD وال CASE EXP. كيف نستطيع استخدام DISTINCT مع ربط الجداول هل هناك مثال على NATURAL JOIN مع المستخدم scottما هي القاعدة في كتابة OUTER JOIN هل هي المساواة في جملة on أو انها ترتيب الخيارات في SELECT أو غير ذلك تقديم بلاغ
بتاريخ: 11 أكتوبر 200421 سنة كاتب الموضوع comment_14887 وين الشباب ؟؟؟؟ مافي الرد أنا بعرف اني اسلئتي كتيرة بس....... تقديم بلاغ
بتاريخ: 14 نوفمبر 200421 سنة comment_18058 ما هي RULES OF PRECEDENCE (2-19) هي القواعد التي تحدد اي الoperators يسبق التاني اثناء التنفيذ:يعني مثلاً جملة 3+4*4ما هو ناتجها؟الrules of precedence بتقول ان الضرب هيكون في البداية ثم الجمع و بالتالي الناتج بتاع العملية هوما هو استخدام TO_CHAR FUNCTION مع NUMBERS تحويل الارقام من صيغة لاخرى..يعني بدل ان الرقم يظهر على شكل200يمكن تخليه يظهر على شكل :200.00أو حتى على شكل مبلغ$200.00طبعاً طرق الصياغة هتلاقيها بالتفصيل في اي كتاب sqlكيف افرق بين صيغيتي YYوRR في التاريخ المشكلة هنا ان كل من الصيغتين عبارة عن حرفين فقط و بالتالي لو ادخلنا للنظام 52 على انه التاريخ.. فهل يا ترى سيفهمها على انها 1952 أم 2052؟؟الاوراكل بيعتمد على قيمة العام المدخل و قيمة العام الحالي لكي يعرف قصد المستخدملو الصيغة المدخلة yy يبقى الاوراكل على طول بيضيف القرن الحالي للقيمة المدخلة يعني لو القيمة هي 01 .. الاوراكل هيفهم ان قصدك 2001 و لو القيمة المدخلة 95 الاوراكل هيفهم ان قصدك 2095لكن لو الصيغة المستخدمة هي الrr فالاوراكل بيبقى اكثر ذكاءاً فبيفترض انك تقصد العام الاقرب و ده بطريقة معينة بتعتمد على التاريخ الحالي و التاريخ المدخلفي المثال السابق: الاوراكل هيعتبر ان 01 هي 2001 و ان 95 هي 1995طبعاً من المفضل انك تستخدم الrr و انا شايف الموضوع كله اساساً ازمة يمكن حلها لو استخدمنا ال4 حروف يعني: yyyy او rrrr و الصيغتين متماثلتين..ماهو الفرق بين DECOD وال CASE EXP. نفس الوظيفة بالظبط و لكن الdecode اسهل و اقل حجماً لكن ميزة الcase انها ansi sql يعني يمكن تشتغل على اي database غير اوراكل على عكس الdecodeباقي الاسئلة.. الله اعلم تقديم بلاغ
بتاريخ: 17 نوفمبر 200421 سنة كاتب الموضوع comment_18212 شكرا لك أخي Undo على تجاوبك ، وبانتظار باقي الاسئلة . تقديم بلاغ
بتاريخ: 17 نوفمبر 200421 سنة comment_18235 RULES OF PRECEDENCE (2-19)هي قواعد الأولويات في شرط الـWhere حيث يتم تحديد الشروط التي ستعامل كأنها مدموجة في شرط واحد . بالنسبة للأرقام في الآلة الحاسبة :1+5*2=1+10=11(1+5)*2=6*2=12من المعلوم أن عمليات الضرب و القسمة لها الأولوية في التنفيذ .و الجدول في هذه الصفحة يحدد الأولويات حيث 1 لها الأولوية ثم 2 ثم ...مثلاً 7And لها الأولوية على 8or إذا حددنا شرط الـwhere بالشكل التالي :Where deptno=10 and job='MANAGER' or deptno=20في هذه الحالة لدينا شرطين و ليس ثلاثة :كل الأسطر التي تحقق Deptno=10 and job='MANAGER'وكل الأسطر التي تحقق Deptno=20لكي نفهم الموضوع نضع مكان كل and إشارة ضرب و مكان كل or إشارة جمع (مع الانتباه للفارق)Where deptno=10 * job='MANAGER' + deptno=20كما يمكن تعديل الأولويات كما في العمليات الحسابية بوضع أقواس :Where deptno=10 and (job='MANAGER' or deptno=20)هنا يصبح لدينا شرط واحد عملياً هو Deptno=10 and job='MANAGER'*****NLSPARAMS (3-29)هذا الموضوع مشروح في كتاب Fundamentals I Vol2 في الصفحة 26-18يعني :إذا أردت إظهار اليوم باللغة الافتراضية (المحددة في NLS ) تقوم بكتابة التعليمة :SELECT TO_CHAR(SYSDATE,'DAY') FROM DUAL;و لكن إذا أردت إظهار اليوم بإعدادات مختلفة (للغة مثلاً) مثلاً باللغة الفرنسية أقوم بكتابة التعليمة :SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE=FRENCH') FROM DUAL;*****استخدام TO_CHAR FUNCTION مع NUMBERSإذا أردت عرض التاريخ تستخدم التعليمة:SELECT SYSDATEFROM DUAL;النتيجة :17-NOV-04أما إذا أردت عرض التاريخ بشكل آخر (إحدى الطرق) استخدام تعليمة TO_CHARSELECT TO_CHAR(SYSDATE,'DD-MM-YYYY')FROM DUAL; النتيجة :17-11-2004نفس الكلام بالنسبة للأرقام :إذا أردت عرض جدول الرواتب تستخدم تعليمة SELECT ENAME,SALFROM EMP;تظهر الأرقام بالشكل الافتراضي .أما إذا أردت عرض الأرقام بشكل آخر ـ مثلاً أرغب بوضع فاصلة قبل الآلاف و خانتين بعد الفاصلة العشرية بشكل دائم مع إشارة $ :SELECT TO_CHAR(sal, '$9,999.00') SALARYFROM empالنتيجة :$2,850.00*****FX إشارة FX تعني FORMAT EXACT يعني يجب أن يتطابق تنسيق التاريخ في TO_DATE :مثلاً :WHERE hiredate = TO_DATE('April 02,1981', 'fxMonth DD,YYYY')أما إذا اختلف تنسيق القيمتين بأي شكل من الأشكال أي إضافة مسافة قبل 1981 أو عدم كتابة الصفر في 02 صراحة فإن النتيجة ستكون :WHERE hiredate = TO_DATE('April 2,1981', 'fxMonth DD,YYYY')ORA-01862: the numeric value does not match the length of the format item*****كيف افرق بين صيغيتي YYوRR في التاريخ ؟الفرق يظهر عند الإدخال يعني :نحن في عام 1999 :INSERT INTO EMP(EMPNO,HIREDATE) VALUES (1,TO_DATE('17-11-04','DD-MM-YY'))النتيجة ستدخل إلى قاعة البيانات 17-11-1904أما إذا كتبت :INSERT INTO EMP(EMPNO,HIREDATE) VALUES (2,TO_DATE('17-11-04','DD-MM-RR'))النتيجة ستدخل إلى قاعدة البيانات 17-11-2004 وحسب القواعد المحدد في الصفحة 40-3*****أهم فرق بين CASE و DECODE (طبعاً ما عدا الشكل ) هو الحالات التي فيها مقارنة أكبر أو أصغر ...الخ فهي تعمل في الـCASE ولا تعمل في DECODE مثلا :SELECT CASE WHEN SAL>2000 THEN 0 ELSE SAL ENDأما الـDECODE لا تستطيع تحقيق مثل هذه الأمور إلا بصعوبة :SELECT DECODE(SAL,>2000,0,SAL)ERROR at line 1:ORA-00936: missing expressionوللحل باستخدام DECODE يجب علي أن أكتب :SELECT DECODE(SIGN(SAL-2000),1,0,SAL)FROM EMP;و لك الاختيار ..و لكن CASE لا تعمل مع إصدارات ORACE القديمة . ( ابتداء من آخر إصدار لـ8 وبدأت رسميا من 9)*****DISTINCTتستخدم لإزالة تكرارات القيم مهما كان عدد الجداول المربوطة :SELECT DISTINCT DEPTNOFROM EMP;النتيجة تساوي :SELECT DISTINCT EMP.DEPTNOFROM EMP,DEPTWHERE EMP.DEPTNO=DEPT.DEPTNO;*****مثال على NATURAL JOIN مع المستخدم scottSELECT *FROM EMP NATURAL JOIN DEPT;يتم ربط الأسطر بين الجدولين بالشكل الأنسب ولكن في حال وجود أسطر ليس لها مقابل في الجدول الآخر لا تظهر .لدينا في هذا المثال السطر رقم 40 في جدول DEPT لا يظهر لأنه ليس له مقابل في EMP .و للحل نستخدم OUTER JOIN *****القاعدة في كتابة OUTER JOINلحل المشكلة السابقة نكتب :SELECT ENAME,EMP.DEPTNO,DNAMEFROM EMP RIGHT OUTER JOIN DEPTON (DEPT.DEPTNO=EMP.DEPTNO)أما اليمين و اليسار فهو في سطر FROM و في هذا المثال أنا أطلب إظهار القيم الخارجية التي ليس لها مقابل في الجدول/الجداول على اليمين يعني DEPT .الجدول على اليسار هو EMP تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.