مقدمة قواعد بيانات اوراكل

بسم الله الرحمن الرحيم
O R A C L E
السلام عليكم ورحمة الله و بركة ,,,
أولاً اشكر أخي دفنشي على درس التعريف بأوراكل وفي هذا الدرس سوف نتعلم كيفية التعامل مع oracle SQL وفي البداية سنتعلم كيفية فتح SQL Plus
1- نذهب إلى أبدا
2- نتبع الصورة القادمة كما هيا
كما ترون في الصورة نختار SQL Plus
بعدها يفتح معنا برنامج 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-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- استخدام المعامل != بدلاً من المعامل <> وذلك لأن المعامل != عبارة عن عملية واحدة فقط أما المعامل <> عبارة عن معاملين ولذلك فاستخدام المعامل الأول أفضل برمجياً للسرعة .
4-   فيما يلي بعض الأوامر المستخدمة مع ملفات SQL/PLUS :-
 

الأمر الوظيفة
L     (List) لعرض أمر SELECT الموجود في الـ BUFFER حالياً أي أخر امر SELECT تم كتابته
R    (Run) لتنفيذ أخر أمر SELECT
SAVEاسم الملف بالمسار لحفظ أخر جملة SELECT  في ملف بحيث يمكن استدعاؤه في أي وقت مع كتابة مسار هذا الملف
GET اسم الملف بالمسار لفتح الملف المخزن
ED (Edit) اسم المف لفتح الملف في نافذة المحرر أي بدون التنفيذ
HOST للخروج إلى محرر الدوس DOS وللعودة إلى SQL/PLUS أمر EXIT من الدوس
START اسم الملف لتنفيذ ملف SQL
SPOOL اسم الملف لفتح ملف جديد لتسجيل كافة الأوامر التي سيتم كتابتها في SQL/PLUS ولكن هذا الملف سيكون ملف نصي غير قابل للتنفيذ .

 
وفي النهاية أتمنا عدم نسياني من الدعاء
 
مع تحيات أخوكم الماضي ,,,