إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

مجموعة اسئلة


7 رد (ردود) على هذا الموضوع

#1 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 10 October 2004 - 07:31 PM

اعتذر منكم على كثر الاسئلة ولكن الاسئلة على قدر المحبة


ما هي 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 أو غير ذلك

#2 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 11 October 2004 - 09:56 PM

وين الشباب ؟؟؟؟ :D

مافي الرد :ph34r:


أنا بعرف اني اسلئتي كتيرة بس....... :D

#3 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 17 October 2004 - 02:17 PM

كل عام وانتم بخير رمضان مبارك .

#4 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 29 October 2004 - 01:36 AM

No Answer

#5 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 13 November 2004 - 11:36 PM

كل عام وانتم بخير

#6 undo

undo

    مشترك

  • الأعضــاء
  • 86 مشاركة

تاريخ المشاركة 14 November 2004 - 06:27 AM

ما هي 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


باقي الاسئلة.. الله اعلم

#7 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 17 November 2004 - 02:33 PM

شكرا لك أخي Undo على تجاوبك ، وبانتظار باقي الاسئلة .

#8 geath

geath

    عضو

  • الأعضــاء
  • 13 مشاركة

تاريخ المشاركة 17 November 2004 - 11:40 PM

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 SYSDATE
FROM DUAL;
النتيجة :
17-NOV-04
أما إذا أردت عرض التاريخ بشكل آخر (إحدى الطرق) استخدام تعليمة TO_CHAR
SELECT TO_CHAR(SYSDATE,'DD-MM-YYYY')
FROM DUAL;
النتيجة :
17-11-2004
نفس الكلام بالنسبة للأرقام :
إذا أردت عرض جدول الرواتب تستخدم تعليمة
SELECT ENAME,SAL
FROM EMP;
تظهر الأرقام بالشكل الافتراضي .
أما إذا أردت عرض الأرقام بشكل آخر ـ مثلاً أرغب بوضع فاصلة قبل الآلاف و خانتين بعد الفاصلة العشرية بشكل دائم مع إشارة $ :
SELECT TO_CHAR(sal, '$9,999.00') SALARY
FROM 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 DEPTNO
FROM EMP;
النتيجة تساوي :
SELECT DISTINCT EMP.DEPTNO
FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;
*****

مثال على NATURAL JOIN مع المستخدم scott

SELECT *
FROM EMP NATURAL JOIN DEPT;
يتم ربط الأسطر بين الجدولين بالشكل الأنسب ولكن في حال وجود أسطر ليس لها مقابل في الجدول الآخر لا تظهر .
لدينا في هذا المثال السطر رقم 40 في جدول DEPT لا يظهر لأنه ليس له مقابل في EMP .
و للحل نستخدم OUTER JOIN
*****


القاعدة في كتابة OUTER JOIN
لحل المشكلة السابقة نكتب :
SELECT ENAME,EMP.DEPTNO,DNAME
FROM EMP RIGHT OUTER JOIN DEPT
ON (DEPT.DEPTNO=EMP.DEPTNO)
أما اليمين و اليسار فهو في سطر FROM و في هذا المثال أنا أطلب إظهار القيم الخارجية التي ليس لها مقابل في الجدول/الجداول على اليمين يعني DEPT .
الجدول على اليسار هو EMP