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

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

صورة
- - - - -

مقدمة فيsql


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

#1 mm1

mm1

    عضو

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

تاريخ المشاركة 10 January 2005 - 09:27 AM

استعلام عن جدول باستخدام جملة 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

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- استخدام المعامل != بدلاً من المعامل <> وذلك لأن المعامل != عبارة عن عملية واحدة فقط أما المعامل <> عبارة عن معاملين ولذلك فاستخدام المعامل الأول أفضل برمجياً للسرعة .

#2 Osama Soliman

Osama Soliman

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,611 مشاركة
  • الاسم الأول:Osama
  • اسم العائلة:Soliman
  • البـلـد: Country Flag
  • المنصب الحالي:Oracle Technical Consultant - Asfour Crystal International

تاريخ المشاركة 10 January 2005 - 02:59 PM

اخى الكريم
مشاركة مشكورة وجهد مشكور
ولكن المشاركة اخى الكريم طويلة جدا فهل ممكن فى المشاركات القادمة انشاء الله ان تكون فى صورة ملف نصى مثلاً لسهولة الحفظ والاطلاع
ولك تحياتى

وقل رب زدنى علماً
Osama M. Soliman
Oracle Certified Professional
Oracle Technical Consultant

 Asfour Crystal International
Cairo - Egypt
Osama.Soliman@hotmail.com
Osama.Soliman@asfourcystal.com