mm1 بتاريخ: 10 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 10 يناير 2005 استعلام عن جدول باستخدام جملة SELECTSQL> 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 صف اختيار عمود باستخدام جملة SELECTSQL> 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 2 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-DEC-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ملاحظات : 1- الفرق بين يأخذ الحقل قيمة الـ NULL أو يأخذ قيمة الصفر هو أن الحقل الذي يأخذ قيمة الـNULL لا يمكن تغيير هذه القيمة أي أنها لا تتغير أما قيمة الصفر فيمكن أن تتغير إلى قيمة أخرى مثال ذلك حقل COMM في جدول EMP فإن الموظف الذي يأخذ في حقل COMM قيمة NULL فهو أن طبيعة عمله لا يأخذ أي نسبة (COMMISION) على الإطلاق أما الموظف الذي يأخذ قيمة الصفر فهو أن الموظف لم يحقق النسبة ولم يحقق أي COMMISION ويمكن أن يحقق فيما بعد فتتغير قيمة الصفر إلى القيمة المحققة .2- عند استخدام دالة NOT مع دالة IN فإن ذلك يتطلب من ORACLE SERVER أن يبحث في كافة صفوف الجدول وبالتالي يتم تضييع وقت كبير جداً أثناء تنفيذ هذه الدالة خاصة اذا كان هناك صفوف كثيرة جداً لذلك لا ينصح بها برمجياً .3- استخدام المعامل != بدلاً من المعامل <> وذلك لأن المعامل != عبارة عن عملية واحدة فقط أما المعامل <> عبارة عن معاملين ولذلك فاستخدام المعامل الأول أفضل برمجياً للسرعة . اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Osama Soliman بتاريخ: 10 يناير 2005 تقديم بلاغ مشاركة بتاريخ: 10 يناير 2005 اخى الكريممشاركة مشكورة وجهد مشكورولكن المشاركة اخى الكريم طويلة جدا فهل ممكن فى المشاركات القادمة انشاء الله ان تكون فى صورة ملف نصى مثلاً لسهولة الحفظ والاطلاعولك تحياتى اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.