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

عام 0 geek4arab
Spread the love

بسم الله الرحمن الرحيم

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 ولكن هذا الملف سيكون ملف نصي غير قابل للتنفيذ .

 

وفي النهاية أتمنا عدم نسياني من الدعاء

 

مع تحيات أخوكم الماضي ,,,

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة