الماضي بتاريخ: 17 يوليو 2004 تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2004 (معدل) بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته،،,كيف الحال اخواني و اخواتي في المنتدى حبيت ابداء بعض الدروس في SQL وهيء للمبتدئين فيها وان شاء الله تحوز على رضاكم وما نريد الا الدعاء و بسم الله نبداء: المحاضرة الأولى اختيار جدول باستخدام جملة SELECT SQL> select * from emp; EMPNO NAME JOB MGR HIREDATE SAL COMM DEPTNO ----------- ---------- --------- --------- ------------------ ------ ---------- ------------ 7369 SMITH CLERK 7902 17/12/80 800 20 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7566 JONES MANAGER 7839 02/04/81 2975 20 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 7900 JAMES CLERK 7698 03/12/81 950 30 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 14 صف اختيار عمود باستخدام جملة SELECT SQL> select ename from emp; ENAME ------ SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER تم اختيار 14 صف اختيار عمود باستخدام SELECT مع وضع عنوان للعمود (ALIASES) SQL> select ename employee from emp; EMPLOYEE ---------- SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER تم اختيار 14 صف إجراء عمليات حسابية ( + و - و * و / )على عدة أعمدة SQL> select sal+comm salary from emp; SALARY ------- 1900 1750 2650 1500 تم اختيار 14 صف الأماكن الخالية (التي ليس فيها قيمة) تسوي NULL وذلك لأنه عند إجراء أي عملية على الـNULL يكون الناتج هو NULL وقيمة الـNULL موجودة في حقل COMM وللتغلب على هذه المشكلة لابد أولا من تحويل قيمة الـNULL إلى قيمة عددية تستخدم في العمليات الحسابية ولا تؤثر على قيمة الناتج النهائي للراتب وهو الصفر وذلك باستخدام دالة nvl وتأخذ الشكل NVL(COLUMN_NAME , VALUE ) SQL> select ename,sal+nvl(comm,0) from emp; ENAME SAL+NVL(COMM,0) ---------- ----- ------- SMITH 800 ALLEN 1900 WARD 1750 JONES 2975 MARTIN 2650 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300 تم اختيار 14 صف لاحظ القيم بعد تغيير قيمة الـNULL إلى صفرولاختيار صف أو عدة صفوف تستخدم جملة WHERE مع جملة SELECT لتحديد الشرط الذي بناءاً عليه سيتم اختيار الصفوف . SQL> select * from emp where sal=800; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 20 SQL> select * from emp where sal > 800; EMPNO NAME JOB MGR HIREDATE SAL COMM DEPTNO ----------- ---------- --------- --------- ------------------ ------ ---------- ------------ 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7566 JONES MANAGER 7839 02/04/81 2975 20 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 7900 JAMES CLERK 7698 03/12/81 950 30 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 13 صف ولعرض الصفوف مرتبة يستخدم لذلك جملة ORDER BY ويمكن أن يكون الترتيب تصاعديا ASC أو ترتيب تنازلياً DESC بعد تحديد العمود الذي سيتم الترتيب بناءا عليه . SQL> select * from emp where sal > 800 order by sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7900 JAMES CLERK 7698 03/12/81 950 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7934 MILLER CLERK 7782 23/01/82 1300 10 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7566 JONES MANAGER 7839 02/04/81 2975 20 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7902 FORD ANALYST 7566 03/12/81 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 تم اختيار 13 صف ولترتيب الصفوف تنازليا كما يلي : SQL> select * from emp where sal > 800 order by sal desc; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7839 KING PRESIDENT 17/11/81 5000 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7902 FORD ANALYST 7566 03/12/81 3000 20 7566 JONES MANAGER 7839 02/04/81 2975 20 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7934 MILLER CLERK 7782 23/01/82 1300 10 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 7900 JAMES CLERK 7698 03/12/81 950 30 تم اختيار 13 صف ولحساب الراتب السنوي يكون بالجملة التالية : SQL> select ename,(sal+nvl(comm,0))*12 “ANNUAL SALARY ” , ename EMPLOYEE from emp; ENAME ANNUAL SALARY EMPLOYEE SMITH 9600 SMITH ALLEN 22800 ALLEN WARD 21000 WARD JONES 35700 JONES MARTIN 31800 MARTIN BLAKE 34200 BLAKE CLARK 29400 CLARK SCOTT 36000 SCOTT KING 60000 KING TURNER 18000 TURNER ADAMS 13200 ADAMS JAMES 11400 JAMES FORD 36000 FORD MILLER 15600 MILLER تم اختيار 14 صف SQL> select * from emp where job='CLERK'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 20 7876 ADAMS CLERK 7788 23/05/87 1100 20 7900 JAMES CLERK 7698 03/12/81 950 30 7934 MILLER CLERK 7782 23/01/82 1300 10 تطبيق شرطين بعد جملة WHERE باستخدام المعامل AND SQL> SELECT * FROM EMP WHERE JOB='CLERK' AND SAL>1000; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7876 ADAMS CLERK 7788 23/05/87 1100 20 7934 MILLER CLERK 7782 23/01/82 1300 10 استخدام دالة BETWEEN AND حيث يتم كتابة الحد الأصغر قبل AND وكتابة الحد الأصغر بعد AND ويتم أخذ الحدين الأصغر والأكبر في البيانات وإظهارهما حيث أن فترة BETWEEN مغلقة SQL> SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 1200; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7876 ADAMS CLERK 7788 23/05/87 1100 20 استخدام NOT مع دالة BETWEEN AND لا يتم أخذ الحدين الأصغر والأكبر في البيانات SQL> SELECT * FROM EMP WHERE SAL NOT BETWEEN 800 AND 1200; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7566 JONES MANAGER 7839 02/04/81 2975 20 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 11 صف استخدام علامة % مع دالة LIKE لتحل محل عدة حروف لتطبيق شرط محدد على حقل حرفي أو رقمي أو تاريخ بينما استخدام علامة ( _ ) لتحل محل حرف واحد فقط . مثلاً في المثال التالي يتم استعراض كل الصفوف التي حقل الاسم فيها يبدأ بحرف A وتم التعبير عن ذلك بـ WHERE ENAME LIKE 'A%' SQL> SELECT * FROM EMP WHERE ENAME LIKE 'A%'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 وفي المثال التالي يتم عرض الصفوف التي تتكون من خمسة حروف وتبدأ بحرف A وتم التعبير عن ذلك بكتابة حرف A ثم أربع علامات من العلامة ( _ ) . SQL> SELECT * FROM EMP WHERE ENAME LIKE 'A____'; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7876 ADAMS CLERK 7788 23/05/87 1100 20 ولعرض كل الصفوف التي يكون فيها حقل COMM له القيمة NULL تستخدم دالة IS NULL كما يلي :- SQL> SELECT * FROM EMP WHERE COMM IS NULL; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 20 7566 JONES MANAGER 7839 02/04/81 2975 20 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7876 ADAMS CLERK 7788 23/05/87 1100 20 7900 JAMES CLERK 7698 03/12/81 950 30 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 10 صف ولنفي جملة IS NULL تستخدم دالة IS NOT NULL كما في المثال التالي : SQL> SELECT * FROM EMP WHERE COMM IS NOT NULL; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 استخدام دالة IN(list) للسؤال هل بيانات الحقل المراد السؤال عنه موجودة في القائمة داخل IN وهذه القائمة يمكن أن تكون رقمية أو حرفية بناءً على نوع الحقل المراد السؤال عنه . SQL> SELECT * FROM EMP WHERE DEPTNO IN(10,20); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 20 7566 JONES MANAGER 7839 02/04/81 2975 20 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7876 ADAMS CLERK 7788 23/05/87 1100 20 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 8 صف استخدام المعامل OR وهو يتطلب فقط تنفيذ أحد الشرطين الموجودين مع المعامل . SQL> SELECT * FROM EMP WHERE DEPTNO=10 OR DEPTNO=20; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 17/12/80 800 20 7566 JONES MANAGER 7839 02/04/81 2975 20 7782 CLARK MANAGER 7839 09/06/81 2450 10 7788 SCOTT ANALYST 7566 19/04/87 3000 20 7839 KING PRESIDENT 17/11/81 5000 10 7876 ADAMS CLERK 7788 23/05/87 1100 20 7902 FORD ANALYST 7566 03/12/81 3000 20 7934 MILLER CLERK 7782 23/01/82 1300 10 تم اختيار 8 صف استخدام دالة NOT مع المعامل OR أي نفي الشرط المطبق في المثال السابق وذلك بوضع دالة OR وشرطيها داخل قوسين ثم دالة NOT قبل القوسين ليتم تطبيق النفي على الشرطين . SQL> SELECT * FROM EMP WHERE NOT(DEPTNO=10 OR DEPTNO=20); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7900 JAMES CLERK 7698 03/12/81 950 30 تم اختيار 6 صف ويمكن النفي بطريقة أخرى وذلك بتطبيق دالة NOT بتطبيق على العوامل الموجودة داخل القوسين أي تحويل علامة يساوي (=) إلى لا يساوي (=!) وكذلك نفي المعامل OR إلى المعامل AND وإلغاء القوسين . SQL> SELECT * FROM EMP WHERE DEPTNO!=10 AND DEPTNO!=20; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7499 ALLEN SALESMAN 7698 20/02/81 1600 300 30 7521 WARD SALESMAN 7698 22/02/81 1250 500 30 7654 MARTIN SALESMAN 7698 28/09/81 1250 1400 30 7698 BLAKE MANAGER 7839 01/05/81 2850 30 7844 TURNER SALESMAN 7698 08/09/81 1500 0 30 7900 JAMES CLERK 7698 03/12/81 950 30 تم اختيار 6 صف وللخروج من SQL/PLUS يستخدم أمر الخروج EXIT . SQL> EXIT ملاحظات : الفرق بين يأخذ الحقل قيمة الـ NULL أو يأخذ قيمة الصفر هو أن الحقل الذي يأخذ قيمة الـNULL لا يمكن تغيير هذه القيمة أي أنها له لا تتغير أما قيمة الصفر فيمكن أن تتغير إلى قيمة أخرى مثال ذلك حقل COMM في جدول EMP فإن الموظف الذي يأخذ في حقل COMM قيمة NULL فهو أن طبيعة عمله لا يأخذ أي نسبة (COMMISION) على الإطلاق أما الموظف الذي يأخذ قيمة الصفر فهو أن الموظف لم يحقق النسبة ولم يحقق أي COMMISION ويمكن أن يحقق فيما بعد فتتغير قيمة الصفر إلى القيمة المحققة .عند استخدام دالة NOT مع دالة IN فإن ذلك يتطلب من ORACLE SERVER أن يبحث في كافة صفوف الجدول وبالتالي يتم تضييع وقت كبير جداً أثناء تنفيذ هذه الدالة خاصة اذا كان هناك صفوف كثيرة جداً لذلك لا ينصح بها برمجياً .استخدام المعامل != بدلاً من المعامل <> وذلك لأن المعامل != عبارة عن عملية واحدة فقط أما المعامل <> عبارة عن معاملين ولذلك فاستخدام المعامل الأول.وبهذا نكون انتهينا من المحاضرة الاولىاتمنى عدم نقل الموضوع الى منتديات اخرى الى بوضع الوصله في اي منتدى تحياتي،،، تم تعديل 25 يوليو 2004 بواسطة الماضي 4 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TALAL بتاريخ: 17 يوليو 2004 تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2004 شكرا ياأخى على هذا الدرس الرائع والذى أوضحت به الكثير وأتمنى استكمال هذه الحلقات وجزاء الله عنا خير الجزاءلى سؤالين لو تكرمت الاجابه عنهم1- هل توجد داله انتاج رقم عشوائي يمكن استخدامها فى الاوراكل2- هل يمكن اختيار سجل معين عشوائيا أو بناء على رقم السجل (الثالث ،العشرين ، الخمسون) يعنى تطبيقا على الجمله الاخيره والذى انتج 6 سجلات هل يمكن عرض او اختيار سجل واحد منهم فقط عشوائيا وجزاكم الله خيرا ، واللام عليكم ورحمه الله وبركاته ،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
الماضي بتاريخ: 17 يوليو 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 17 يوليو 2004 العفو اخوي طلال وانا ماسويت الى الواجبواجبتك هي1- انت تقصد في هذي SEQUENCE اتوقع انشاء الله جايه بالدروس2- ابشوفلك الفكره بس ماتوقع فيه امر لهشيء هذاتحياتي،،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
الماضي بتاريخ: 18 يوليو 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 18 يوليو 2004 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته،، الأخت نويرالعفو اختي العزيزة وانشاء الله يفيدك في دراستك تقبلي تحياتي,,,====================================الأخ Oracleالعفو اخوي العزيز تقبل تحياتي,,,====================================الأخ عمر باعقيلوعليكم السلام ورحمة الله وبركاته،، العفو اخوي وانا لا اريد الا الدعاء لي بتوفيق و ان يستفيد الجميع منها واشكرك على مروركتقبل تحياتي,,,====================================تحياتي للجميع,,, اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
AL®NE بتاريخ: 19 يوليو 2004 تقديم بلاغ مشاركة بتاريخ: 19 يوليو 2004 مشكور أخوي الماضي مجهود ممتاز وشرح واضح ,,,,,,لكن عندي سوال ... أنت تقول عند استخدام دالة NOT مع دالة IN فإن ذلك يتطلب من ORACLE SERVER أن يبحث في كافة صفوف الجدول وبالتالي يتم تضييع وقت كبير جداً أثناء تنفيذ هذه الدالة خاصة اذا كان هناك صفوف كثيرة جداً لذلك لا ينصح بها برمجياً سوالي هو أن كل عمليات الاستعلام تتطلب البحث في جميع الصفوف ,,,, ممكن توضح لي أكثر ولا عليك أمر شكرا لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
الماضي بتاريخ: 21 يوليو 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 21 يوليو 2004 اخي العزيز AL®NE العفو اخوي وهذا واجبيوالجواب على سؤلك هو اذا استخدمنا جملة NOT IN هذه الجمله تسبب التئخير في الاستعلام عن المطلوب اذا كانت السجلات كثيرة فيفضل التحديد على الامر المطلوب ولكن الجمله صحيحه ويمكن استخدامها هذا المقصود واذا كان احد من الاخوان يعرف السبب الاكيد فئتمنا ان يفيدنا بهذه النقطهتحياتي،،، اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
الماضي بتاريخ: 26 يوليو 2004 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 26 يوليو 2004 تـــــــــــابــــــــــــــــــع معليه اخواني ما دريت انه انقطع الشرح ===========================================================دالة القطع( SUBSTR(Column_name , start , number of character وهي اختصار لـ SUBstitute STRing تستخدم هذه الدالة لقطع عدد من حروف العمود أو النص, بداية من الحرف رقم start وبعدد حروف برقم number of character وهذه الدالة هامة جدا عندما تحتاج إلى قطع عدد محدد من حروف العمود كله بأمر واحد وهذا عندما يوجد خطأ في بيانات عمود محدد وتحتاج إلى تعديله بقطع جزء محدد من حروف العمود كما في المثال التالي فإنه سيتم قطع ثلاثة حروف من عمود الإسم اعتباراً من الحرف رقم 2 من اليسار اذا كان رقم البداية موجب والثاني من اليمين اذا كان رقم البداية سالب والقطع من اليسار أيضاً . SQL> SELECT SUBSTR(ENAME,2,3) FROM EMP; SUB MIT LLE ARD ONE ART LAK LAR COT ING URN DAM AME ORD ILL تم اختيار 14 صف في هذا المثال عدد البداية سالب لذلك بدأ العد من اليمين وقطع إلى اليسار . SQL> SELECT ENAME,SUBSTR(ENAME,-2,3) FROM EMP; ENAME SU SMITH TH ALLEN EN WARD RD JONES ES MARTIN IN BLAKE KE CLARK RK SCOTT TT KING NG TURNER ER ADAMS MS JAMES ES FORD RD MILLER ER تم اختيار 14 صف في المثال التالي سيتم القطع بداية من الحرف رقم 3 من اليمين وقطع فقط حرفين . SQL> SELECT ENAME,SUBSTR(ENAME,-3,2) FROM EMP; ENAME SU SMITH IT ALLEN LE WARD AR JONES NE MARTIN TI BLAKE AK CLARK AR SCOTT OT KING IN TURNER NE ADAMS AM JAMES ME FORD OR MILLER LE تم اختيار 14 صف دالة البحث عن حرف أو حروف متتالية(INSTR(Column_name , string وهي اختصار لـ IN STRing وهي تستخدم للبحث عن حرف أو حروف string في العمود أو النص المكتوب . ويتم عرض رقم الحرف او رقم الحروف في العمود من اليسار. SQL> SELECT INSTR('ABCD','B') FROM DUAL; INSTR('ABCD','B') 2 ويمكن البحث عن أكثر من حرف (سلسلة حرفية) SQL> SELECT INSTR('ABCD','BC') FROM DUAL; INSTR('ABCD','BC') 2 SQL> SELECT INSTR('ABCD','BD') FROM DUAL; INSTR('ABCD','BD') 0 في المثال السابق تم البحث عن حرفي BD ككلمة واحدة وبالتالي لا يوجد فكان الناتج 0 .في المثال التالي سيتم البحث عن العلامة ( _ ) داخل السلسلة الحرفية (XYZ-ABC) وذلك باستخدام دالة INSTR ثم أخذ ناتج هذه الدالة وهو ترتيب هذا الرمز وإضافة عليه الرقم 1 ثم تطبيق دالة SUBSTR والقطع بدءاً من الرقم الناتج +1 . SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1) FROM DUAL; SUB ABC ويمكن تحديد عدد الحروف التي يتم قطعها وهنا عدد الحروف المراد قطعها هو ثلاثة حروف . SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1,3) FROM DUAL; SUB ABC ======================================== SQL> SELECT SUBSTR('XYZ-ABC',INSTR('XYZ-ABC','-')+1,2) FROM DUAL; SU AB في دالة INSTR بعد كتابة الرمز المراد البحث عنه اذا كتبنا الرقم (1) فهذا يعني أن البحث يبدأ من اليسار إلى اليمين أما اذا كان سالب فإن البحث سيبدأ من اليمين إلى اليسار أما الرقم بعد (1) فهو يعني هل الرمز الأول أو الثاني أو الثالث وهكذا لأنه يمكن أن يكون هناك اكثر من رمز . كما في المثال التالي فإن البحث بدأ من اليسار إلى اليمين والرمز الثاني الذي بعده مباشرة حروف MNO . SQL>SELECT SUBSTR('XYZ-ABC-MNO',INSTR('XYZ-ABC-MNO','-',1,2)+1,3) FROM DUAL; SUB MNO في هذا المثال البحث بدأ من اليمين إلى اليسار لأن الرقم (1) أمامه إشارة سالبة والرمز الثاني من اليمين ولكن قطع الحروف من اليسار إلى اليمين وهنا الحروف المقطوعة هي ABC . SELECT SUBSTR('XYZ-ABC-MNO',INSTR('XYZ-ABC-MNO','-',-1,2)+1,3) FROM DUAL; SUB ABC دالة ROUND(Column_name/number , digit) تقوم هذه الدالة بتقريب محتويات العمود الرقمية أو الرقم المكتوب في الدالة إلى الرقم المكتوب بعد الفاصلة . واذا كان هذا الرقم سالب فإن التقريب سيطبق على ما قبل العلامة أي أن التقريب سيكون لأقرب عشرة أو لأقرب مائة أو لأقرب ألف وهكذا . SQL> SELECT ROUND(55.623,1) FROM DUAL; ROUND(55.623,1) 55.6 SQL> SELECT ROUND(55.623,2) FROM DUAL; ROUND(55.623,2) 55.62 SQL> SELECT ROUND(55.623,0) FROM DUAL; ROUND(55.623,0) 56 SQL> SELECT ROUND(55.623,-1) FROM DUAL; ROUND(55.623,-1) 60 تقوم دالة TRUNC بقطع التقريب فإذا كان الرقم المراد التقريب إليه موجب سيكون التقريب للأرقام بعد العلامة (الأجزاء العشرية) واذا كان الرقم بالسالب فإن القطع سيكون لأقرب عشرة أو مائة أو ألف . SQL> SELECT ROUND(55.623,-1),TRUNC(55.623) FROM DUAL; ROUND(55.623,-1) TRUNC(55.623) 60 55 SQL> SELECT ROUND(55.623,-1),TRUNC(55.623,-1) FROM DUAL; ROUND(55.623,-1) TRUNC(55.623,-1) 60 50 SQL> SELECT ROUND(55.623,-2),TRUNC(55.623,-2) FROM DUAL; ROUND(55.623,-2) TRUNC(55.623,-2) 100 0 SQL> SELECT ROUND(49.623,-2),TRUNC(49.623,-2) FROM DUAL; ROUND(49.623,-2) TRUNC(49.623,-2) 0 0 SQL> SELECT ROUND(55.623,0),TRUNC(55.623,0) FROM DUAL; ROUND(55.623,0) TRUNC(55.623,0) 56 55 SQL> SELECT ROUND(55.623,1),TRUNC(55.623,1) FROM DUAL; ROUND(55.623,1) TRUNC(55.623,1) 55.6 55.6 SQL> SELECT ROUND(55.623,-1),TRUNC(55.623,-1) FROM DUAL; ROUND(55.623,-1) TRUNC(55.623,-1) 60 50 دالة MOD تقوم بحساب باقي قسمة رقم أو عمود على رقم أو عمود آخر. SQL> SELECT MOD(8,3) FROM DUAL; MOD(8,3) 2 SQL> SELECT MOD(8,4) FROM DUAL; MOD(8,4) 0 أمر DESC table_name يقوم هذا الامر بعرض توصيف للبرنامج وعرض لأنواع الحقول في هذا الجدول . SQL> DESC EMP; Name Null? Type --------------------------- ---------------- ------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) دالة TO_NUMBER تقوم هذه الدالة بتحويل الأرقام التي في صورة حرفية إلى أرقام في صورة عددية يمكن إجراء جميع العمليات الحسابية عليها . SQL> SELECT TO_NUMBER('12')+10 FROM DUAL; TO_NUMBER('12')+10 22 دالة TO_CHAR تقوم هذه الدالة بتحويل الأرقام التي في صورة رقمية إلى أرقام في صورة حرفية . SQL> SELECT TO_CHAR(TO_NUMBER('12')+10) FROM DUAL; TO 22 SQL> SELECT TO_CHAR(TO_NUMBER('12')+10)+10 FROM DUAL TO_CHAR(TO_NUMBER('12')+10)+10 32 SQL> SELECT TO_CHAR(TO_NUMBER('12')+10)+10 FROM DUAL; TO_CHAR(TO_NUMBER('12')+10)+10 32 اذا اردنا تغيير شكل الاستعلام لتاريخ توجد طريقة لهذه وهي كما يلي SQL> select sysdate from dual; SYSDATE --------- 23-JUL-04 في المثال السابق استعلامنا عن تاريخ اليوم سوف نغير في شكل التاريخ في المثال القادم ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY'; SQL> select sysdate from dual; SYSDATE ---------- 23/07/2004 طريقة اخرى SQL> SELECT TO_CHAR(SYSDATE,'DD.MM.YYYY') FROM DUAL; TO_CHAR(SY ---------- 25.07.2004 SQL> SELECT HIREDATE,TO_CHAR(HIREDATE,'DD.MONTH.YYYY') FROM EMP; HIREDATE TO_CHAR(HIREDATE, ---------- ----------------- 17/12/1980 17.DECEMBER .1980 20/02/1981 20.FEBRUARY .1981 22/02/1981 22.FEBRUARY .1981 02/04/1981 02.APRIL .1981 28/09/1981 28.SEPTEMBER.1981 01/05/1981 01.MAY .1981 09/06/1981 09.JUNE .1981 19/04/1987 19.APRIL .1987 17/11/1981 17.NOVEMBER .1981 08/09/1981 08.SEPTEMBER.1981 23/05/1987 23.MAY .1987 03/12/1981 03.DECEMBER .1981 03/12/1981 03.DECEMBER .1981 23/01/1982 23.JANUARY .1982 SQL> SELECT HIREDATE,TO_CHAR(SYSDATE,'DD-MON-YYYY') FROM EMP; HIREDATE TO_CHAR(SYS ---------- ----------- 17/12/1980 23-JUL-2004 20/02/1981 23-JUL-2004 22/02/1981 23-JUL-2004 02/04/1981 23-JUL-2004 28/09/1981 23-JUL-2004 01/05/1981 23-JUL-2004 09/06/1981 23-JUL-2004 19/04/1987 23-JUL-2004 17/11/1981 23-JUL-2004 08/09/1981 23-JUL-2004 23/05/1987 23-JUL-2004 03/12/1981 23-JUL-2004 03/12/1981 23-JUL-2004 23/01/1982 23-JUL-2004 وبهذا نكون انتهينا من المحاضرة الثانيةاتمنى عدم نقل الموضوع الى منتديات اخرى الى بوضع الوصله في اي منتدى وتقبلو تحياتي،،، 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wad_altayeb بتاريخ: 19 سبتمبر 2004 تقديم بلاغ مشاركة بتاريخ: 19 سبتمبر 2004 بسم الله الرحمن الرحيم الاخ الماضي الله يجزيك خير الجزاء ومشكور علي هذه المحاضرات القيمة wad_altayeb اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Mohamedzara بتاريخ: 1 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 1 ديسمبر 2004 السلام عليكم و رحمة الله و بركاته شكرا ياخي على هذه المعلومات القيمة انا عندي سؤال ممكن اجد اجابة عليه من اي اخ له دراية بالموضوع انا عندي مجموعة سجلات بها بيانات و اريد عرض هذه السجلات من تاريخ معين الى تاريخ اخر او عدد السجلات بين تاريخين؟set get_sum_vote=conn.execute(" select count(*) as total_poll from cathodic_cables where cath_date between # to_date('" & Request.Form("startdate") & "', 'dd/mm/yyyy') & # and # to_date('" & Request.Form("enddate") & "', 'dd/mm/yyyy') # " ) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mido128 بتاريخ: 5 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 5 ديسمبر 2004 بسم الله الرحمن الرحيم مشكور علي هذة المعلومات.... وربنا يحتسبها في ميزان حسناتك ان شاء الرحمن اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابو مهند بتاريخ: 10 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 10 ديسمبر 2004 شكرا على هذه المعلومات المهمة، وبارك الله في القائمين على المنتدى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
سوزان حاتم بتاريخ: 13 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 13 ديسمبر 2004 فعلا جهودكم مشكورةشكرا كثير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
أحمد الطيار بتاريخ: 23 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 23 ديسمبر 2004 شكرا لك أيها الاخ الكريم ..ولكن هل لي باستفسار بسيط ...في دالة التاريخ .. عند طرح hiredate من sysdate ستأتي النتيجة في صورة أيام ..هل من سبيل لعرضها بالشكل التالي ..ان تكون المدة المنقضية هي كذا سنة , كذا شهر , كذا يوم ؟؟؟وكل الشكر ... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
TheMastar بتاريخ: 24 ديسمبر 2004 تقديم بلاغ مشاركة بتاريخ: 24 ديسمبر 2004 مشكور اخى على الموضوعولكن عندما جربت الداله NVL ظهرتلى رساله تقول Undefiend function 'Nvl' exمع العلم انى استخدمت اكسيس 2000 ...انا قمت بالبحث فى البرنامج عن الداله التى تجعل NULL بقيمه ادخلها بنفسىفوجدت داله باسم NZ وصيغه كتابتهاNz([subtotal],0+Nz([Freight],0) .. okولكنى لا استطيع استخدامها ارجو المساعده بأى داله تحول Null لقيمه اقوم بادخالها سواء كانت NVL او NZ او غيرهمشكرا مقدما اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sadiq بتاريخ: 9 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 9 يناير 2005 جزيت عنا خيرا . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
مساعد مبرمج بتاريخ: 10 مارس 2005 تقديم بلاغ مشاركة بتاريخ: 10 مارس 2005 درس مميز شكرا لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_hafiz بتاريخ: 13 مارس 2005 تقديم بلاغ مشاركة بتاريخ: 13 مارس 2005 شكرا لك يا اخى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
proloz بتاريخ: 15 مارس 2005 تقديم بلاغ مشاركة بتاريخ: 15 مارس 2005 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته،، اخي العزيز بارك الله فيك على الكنز الذي تهديتني اياه انا وبقية الاعضاء ,اخي انا طالبة في دبلوم برمجة اواجة هذه السنة عدة مشاريع , فها يمكنك مساعدتي ؟عندي سؤال هو ماهي الDATA DICTINARY اريد القليل من المعلومات عنها.اما السوال الثاني فهل لديك فكرة عن الSYSTEM ANALYSES او كيفية بدء المشاريع فيها مع العلم ان المشروع في الهيئة العامة للمياة وبالتحديد قسم الاستهلاك ،،،اذا استطعت مساعدتي او لم تستطع فلك مني جزيل الشكر,,,[والسلام عليكم ورحمة الله وبركاته اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ezzeldien بتاريخ: 19 أبريل 2005 تقديم بلاغ مشاركة بتاريخ: 19 أبريل 2005 جزاك الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
haitham_ezzt بتاريخ: 7 أغسطس 2005 تقديم بلاغ مشاركة بتاريخ: 7 أغسطس 2005 جزاكم الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
حسين محمد عبدالله بتاريخ: 27 نوفمبر 2005 تقديم بلاغ مشاركة بتاريخ: 27 نوفمبر 2005 جزاك الله خير يا أخي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
erosb2 بتاريخ: 24 مايو 2006 تقديم بلاغ مشاركة بتاريخ: 24 مايو 2006 جزاك الله خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
doaa_fo بتاريخ: 26 فبراير 2007 تقديم بلاغ مشاركة بتاريخ: 26 فبراير 2007 جزاك الله خيرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sayedw بتاريخ: 6 مايو 2007 تقديم بلاغ مشاركة بتاريخ: 6 مايو 2007 الف شكر اخى على الشرح وجزاك الله خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
magedomran بتاريخ: 2 أكتوبر 2007 تقديم بلاغ مشاركة بتاريخ: 2 أكتوبر 2007 بعد ثلاث سنوات من المشاركه بهذة الدروس او اكثروالله يا اخى قمت بالدعاء لك على معلومه بسيطه كانت واقفه قدامى وعملت بحثولقيتها فى دروسكسبحان الله جزاك الله عنا خيرا ووفقك الله ونجاك من كل هم وغم وبلاء اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.