كتب برمجة وتقنية1 Emran أغسطس 30, 2022

جميع اوامر sql مع الشرح

اختصارات الموضوع
التطبيق أمن وبرابط مباشر

جميع اوامر sql مع الشرح

نقدم لكم اليوم تعلم sql من الصفر حتى الاحتراف بشكل مبسط وبأسلوب مختصر وسلس، تحتوي هذه الدورة على جميع أوامر sql. البداية لا بد ان نعلم ان قاعدة البيانات (Database) هي عبارة عن ملف كبير يعمل على ترتيب المعلومات المخزنة بشكل منظم بحيث نستطيع استرجاع المعلومات المخزنة مع إمكانية التعديل عليها في أي وقت، اذا فان لغة sql تعتبر نظام لإدارة قواعد البيانات الذي سوف يعتمد على التعامل معه على هذه اللغة وهي تعتبر من لغة الاستعلامات البنائية.

ان هذه التدوينة خاصة بتعلم اساسيات قواعد البيانات sql عبر شرح متضمن فيه جميع الأمثلة التي سوف تحتاجها من اجل اتقان تعلم لغة ال اس كيو ال وسوف تجد جميع هذه الأوامر مرتبة لسهولة الحفظ والتعلم.

SQL SIMPLE TUTORIAL

    --: Types of SQL statement

 DML (Data manipulation language)   

        .Select -

      .Insert -

        .Update -

     .Delete -

       .Merge -

    

DML (Data definition language)    

        .Create

        .Alter

       .Drop

       .Rename

        .Truncate

       .Comment

          

DCL ( Data control language)

      .Grant

       .Revoke

   TC (Transaction control)    

       .Commit

        .Rollback

       .Save point

 

-- إرجاع البيانات كاملة من جدول الأقسام

Select * from department;

-- إرجاع البيانات كاملة من جدول الموظفين

Select * from employees;

-- إرجاع حقول محددة من جدول الموظفين

Select employee_id, first_name from employees ;

-- إرجاع حقل الراتب مع عمليات حسابية

Select salary, sala ry+100, salary*2, salary/2, salary+(salary*0.5) from employees;

--  إرجاع حقول مع وضع أسماء بديلة للحقول

select first_name as FN, last_name Ln, salary "SalArY" from employees ;

 -- ربط حقلين أو أكثر و إرجاع البيانات

select first_name, last_name, first_name ||' '|| last_name "Full Name" from employees;

  -- ربط بين عدة حقول وإسناد نص للعرض بداخل البيانات

select first_name ||' '|| last_name ||' را تبة هو: '|| salary "Emp info" from employees;

-- ربط حقول مع وضع علامات بداخل النص بعد حرف

select first_name ||' '|| last_name ||q'[ Sa'l'Y ]'|| salary "Emp info" from employees;

  -- إرجاع حقل رقم الاقسام بدون تكرار

select distinct department_id from employees;

 -- إرجاع حقلين رقم الأقسام رقم الوظيفة بدون تكرار

select distinct department_id,job_id from employees

 -- إرجاع بيانات من الجدول مع تحديد رقم موظف محدد

select first_name,last_name from employees where department_id = 90 ;

  -- إرجاع بيانات من الجدول مع تحديد اسم موظف محدد

select first_name,last_name from employees where first_name = 'Steven';

  -- إرجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary > 100;

  -- إرجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary = 2500;

-- ارجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary < 1500;

 -- إرجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary != 2600 ;

 -- ارجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary <> 2600;

  -- إرجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary >= 10000;

 -- ارجاع بيانات الراتب مع عمليات رياضية

select first_name,salary from employees where salary <= 4000;

 -- ارجاع بيانات الراتب بين قيمتين

select first_name,salary from employees where salary between 1000 and 10000;

 -- إرجاع بيانات اسم الموظف بين قيمتين

select first_name,salary from employees where first_name between 'A' and 'D' ;

  -- ارجاع بيانات لأكثر من قيمة

select first_name,salary from employees where salary IN (10000,15000,13000);

-- ارجاع بيانات الراتب لا تساوي القيم المدخلة

select first_name,salary from employees where salary NOT IN (10000,15000,13000);

 -- ارجاع بيانات لاكثر من قيمة

select first_name,last_name from employees where first_name IN ('Michael','Peter','Harrison');

 -- ارجاع بيانات لاسم الموظف التي تبدأ اسمائهم بحرف معين

select first_name from employees where first_name like 'S%';

  -- ارجاع بيانات لاسم الموظف التي تنتهي اسمائهم بحرف معين

select first_name from employees where first_name like '%l';

  -- ارجاع البيانات لاسم الموظف التي يبدأ من الحرف الثاني بحرف معينselect first_name from employees where first_name like '_a%';

 -- ارجاع بيانات لاسم الموظف التي يبدأ من الحرف الثالث بحرف معين

select first_name from employees where first_name like '__a';

 -- ارجاع بيانات لاسم الموظف بتحديد 3 احرف من الاسم وكذلك تحديد الحرف الوسط والاستغناء عن الباقي

select first_name from employees where first_name like '_a_';

-- ارجاع بيانات الوظائف بتحديد _ بعد اسم الوظيفة  سيتم ارجاع البيانات كاملة سواء كانت بــ _ او  لا

select job_id from jobs where job_id like 'AC

-- ارجاع بيانات الوظائف التي لديها (_)  فقط

select job_id from jobs where job_id like 'AC/_%' escape

  -- ارجاع اسم الموظف والذي اسمة لا يبدأ بحرف الــ اس

select first_name from employees where first_name not like 'S%';

 -- إرجاع بيانات موظف بحسب تاريخ معين  | DD-MON-YYYY القيمة الافتراضية لصيغة التواريخ في الجداول هي

select * from employees where hire_date = '03-FEB-2008';

-- ارجاع بيانات الموظفين ومن هم الموظفين الذي ليس لهم نسبة مئوية

select * from employees where commission_pct is null;

 -- ارجاع بيانات الموظفين ومن هم الموظفين الذي  لهم نسبة مئوية

select * from employees where commission_pct is not null;

  -- ارجاع اسم الموظف وراتبة واسمة يبدأ بحرف الــ دي وراتبة 2600

select first_name,salary from employees where salary = 2600 and first_name like 'D';

-- ارجاع اسم الموظف واسم الوظيفة الذي يبدأ بحرفي الــ إس اتش او الراتب يساوي 2000

select first_name,job_id,salary from employees where job_id like 'SH_%' or salary = 2000;

 -- ارجاع اسم الموظف وراتبة ووظيفتة وراتبة اكبر من 10000 او اسمة يبدأ بحرف الــ إس ووظيفتة يبدأ بحرف الــ أي

select first_name,salary,job_id from employees where salary > 10000 or (first_name like 'S%' and job_id like 'A%') 

 -- ارجاع اسم الموظف وراتبة ووظيفتة  واسمة يبدأ بحرف الــ أس او وظيفتة يبدأ بحرف الــ أي وراتبة اكبر من 20000

select first_name,salary,job_id from employees where (first_name like 'S%' or job_id like 'A%') and salary > 20000

  -- ارجاع اسم الموظف بالترتيب التصاعدي

select first_name from employees order by first_name asc;

 -- ارجاع اسم الموظف بالترتيب التنازلي

select first_name from employees order by first_name desc;

 -- ارجاع اسم الموظف مع العمولة وترتيب العمولة بحسب البيانات الفارغة

select first_name,commission_pct from employees order by commission_pct nulls first;

 -- ارجاع اسم الموظف بالترتيب التنازلي بأسم مستعار لاسم الموظف

select first_name N from employees order by N;

  -- ارجاع اسم الموظف وراتبه واضافة الى راتبة ب 500 وترتيب بحسب الزيادة في الراتب

select first_name NAME , salary SAL , salary+500 ADDITIONAL from employees order by ADDITIONAL

 -- ارجاع اسم الموظف وترتيبة بحسب رقم الادارة

select first_name from employees order by department_id;

  -- ارجاع اسم الموظف وراتبه ورقم الادارة وترتيب البيانات بحسب رقم الادارة واسم الموظف

select first_name,salary,department_id from employees order by department_id,first_name;

 -- ارجاع اسم الموظف وراتبه ورقم الادارة وترتيب البيانات بحسب رقم الادارة واسم الموظف

select first_name,salary,department_id from employees order by department_id asc , first_name desc;

 -- ارجاع اسم الموظف وراتبه وترتيب البيانات برقم 2 ويعني حقل الراتب في الاستعلام

select first_name,salary from employees order by 2;

 -- ارجاع اسم الموظف وراتبه وترتيب البيانات برقم 2 ويعني حقل الراتب ورقم 1 يعني اسم الموظف في الاستعلام

select first_name,salary from employees order by 2 desc , 1 asc;

 -- ارجاع اول خمسة موظفين فقط

select first_name from employees order by first_name fetch first 5 rows only;

-- ارجاع 50% من اسماء الموظفين

select first_name from employees order by first_name fetch first 50 percent rows only;

 -- ارجاع اسماء الموظفين بعد اول 5 اسماء

select first_name from employees order by first_name offset 5 rows fetch next 5 rows only;

 -- ارجاع 50 % من اسماء الموظفين بعد اول 5 اسماء

select first_name from employees order by first_name offset 5 rows fetch next 50 percent rows only;

 -- ارجاع اسماء ورواتب  اعلى 2 موظفين

select first_name , salary from employees order by salary desc fetch first 2 rows with ties;

 -- ارجاع اسم الموظف وراتبه بحسب المدخل الذي يدخلة المستخدم في المتغير &empno

select first_name , salary from employees where employee_id = &empno;

-- ارجاع بيانات الموظف بحسب المدخلات في المتغيرين رقم القسم واسم الوظيفة الذي يدخلة المتسخدم

select * from employees where department_id = &deptid and job_id like '&jobid 

 -- ارجاع حقلين يحددهم المستخدم وبحث بالحقل الاول بقيمة كذلك يقوم بادخالها المستخدم وترتيبها بحسب الحقل الثاني تنازلي

select &fname,&sal from employees where &fname like '&a%' order by 2 desc;

 

RUN IN SQL*PLUS OR SQL DEVELOPER 

 

 -- لتعريف متغير لرقم الموظف وينتهي هذا المتغير عند انتهاء الجلسة

DEFINE emp_no=101;

 -- ارجاع اسم المستخدم بحسب رقمة الذي تم تعريفة مسبقاً emp_no

select first_name from employees where employee_id = &emp_no 

 -- لتغيير الرسالة التي تظهر للمستخدم  للمتغير fname

accept fname prompt 'Enter First Name'

 -- ارجاع اسم الموظف بحسم المدخل

select first_name from employees where first_name like '&fname%';

  -- ارجاع اسم الموظف ومتغير يقوم بادخالة المستخدم بشكل دائم مع ترتيب تنازلي للحقل الذي قام بادخالة مسبقاً

select first_name , &&sal from employees order by &sal desc

  -- لعرض الاستعلام قبل التنفيذ وبعد التنفيذ

set verify on;

-- ارجاع اسم المستخدم وراتبة والمستخدم يقوم بادخال رقم الموظف في المتغير

select first_name,salary from employees where employee_id = &empno;

 

 6 Single row function

 

1--- character دوال النصوص

 

     -- lower(exp) دالة تعيد الحروف الذي في النص الى صغير

    

     -- upper(exp) دالة تعيد الحروف الذي في النص الى كبير

    

     -- initcap(exp) دالة تعيد الحرف الاول في النص الى كبير

    

     -- concat(exp1,exp2) دالة دمج النصوص

    

     -- substr(exp1,exp1 ... expn) دالة استقطاع من النص

    

     -- length(exp) دالة لحساب طول النص

    

     -- instr(exp1,exp2 ... expn) دالة لتحديد موقع الحرف او الرقم

    

     -- lpad(exp1,exp2,exp3) دالة لاضافة نص من الجهة اليسرى

    

     -- rpad(exp1,exp2,exp3) دالة لاضافة نص من الجهة اليمنى

    

     -- trim(exp1 from exp2) دالة قص جزء من النص

    

     -- replace(exp1,exp2,exp3) دالة لتبديل نص بنص اخر

    

2--- Numbers دالة الارقام

 

     -- round(exp1 'or' exp2) دالة تقريب الرقم الى اقرب رقم صحيح

    

     -- trunc(exp1 'or' exp2) دالة تقوم بقص الرقم ووضع بدلة صفر

    

     -- mod(exp1,exp2) دالة ارجاع باقي القسمة

    

3--- General دوال عامة

 

    -- nvl(exp1,exp2) دالة تحويل الحقل الذي يحتوي على نل الى قيمة

   

    -- nvl2(exp1,exp2,exp3) دالة تحويل الحقل الذي يحتوي على نل الى قيمة في حالة اذا رجع لنا القيمة نوت نل بيتحقق الشرط الاول وفي حالة رجع لنا قيمة نل سيتحقق الشرط الثاني

   

    -- nullif(exp1,exp2) دالة لفحص اذا كانت القيمتين نل سيرجع قيمة نل واذا ماكانت متساوية سيرجع القيمة الاولى

   

    -- coalese(exp1,exp2 ... expn) دالة لفحص القيم التي هي نل حتى يجد قيمة نوت نل

   

    -- decode() دالة شرطية

   

    -- CASE exp1 WHEM compertion_exp1 THEN return_exp1

            exp2 WHEM compertion_exp2 THEN return_exp2

            expn WHEM compertion_expn THEN return_expn

           

            ELSE exp

       END دالة شرطية

   

4--- Convertion دوال التحويل

 

    -- to_date(exp1,format) دالة لتحويل صيغة التاريخ

   

    -- to_char(exp1,exp2) دالة لتحويل حقل الرقم لنص

   

    -- to_number(exp1,exp2) دالة لتحويل حقل الى رقم

   

5--- Date دوال التاريخ

 

    -- month_between(exp1,exp2) دالة لفحص عدد الاشهر بين تاريخين

   

    -- add_month(exp1,exp2) دالة اضافة شهر

   

    -- next_day(exp1,exp2) دالة لمعرفة التاريخ ليوم معين

   

    -- last_day(exp1) دالة لمعرفة اخر يوم في الشهر

   

    -- round(exp1) دالة تقريب التاريخ

   

    -- trunc(exp1) دالة قص التاريخ

   

6--- Multi Functions دوال الجمع

 

     -- avg([DISTINCT] expn) دالة القيمة الحسابية المتوسطة

    

     -- count(exp1) دالة لعد او احصاء

    

     -- max([DISTINCT] exp1) دالة اعلى قيمة

    

     -- min([DISTINCT] exp1) دالة اقل قيمة

    

     -- sum([DISTINCT] exp1) دالة الجمع

    

     -- listagg(exp1) دالة تجميع قيم وترتيبها

    

     -- stddev([DISTINCT] expn) دالة الانحراف المعياري

    

     -- variance([DISTINCT] expn) دالة التباين

 

*/

 

select upper(first_name) , lower(last_name) , initcap(job_id) from employees; -- ارجاع الاسم الاول للمستخدم بالحروف الكبيرة والاسم الاخير بالحروف الصغيرة واسم القسم باول حرف كبير

 

select upper(first_name) from employees where lower(first_name) like 'a%'; -- ارجاع الاسم الاول بحروف كبيرة والبحث عن الاسم الاول بحرف الأي بشكل صغير

 

select first_name from employees where upper(first_name) = upper('adAm'); -- ارجاع الاسم الاول مع تحويل بيانات الاسم الاول الى حروف كبيرة والبحث عن اسم موظف وتحويلة لحروف كبيرة

 

select concat(first_name,last_name) Fullname from employees; -- ارجاع الاسم الاول والاسم الاخير ودمجها بالدالة ولكنا يمكن ان ندمج اكثر من حقلين عكس (| ' '  |) الدمج العادي يقبل اكثر من دمج ولدية مرونة افضل

 

select first_name , substr(first_name,2) from employees; -- ارجاع الاسم الاول مع استقطاع اول حرفين من الاسم

 

select first_name , substr(first_name,2,4) from employees; -- 

ارجاع الاسم الاول مع استقطاع اول حرفين والاسم يكون من اربعة حروف فقط

 

select first_name , substr(first_name,-2) from employees;

 -- ارجاع الاسم الاول مع استقطاع جميع الحروف ويبقى اخر حرفين فقط

 

select first_name , length(first_name) from employees;

 -- ارجاع الاسم الاول مع حساب طول النص

 

select first_name , instr(first_name,'e'), instr(first_name,'e',2), instr(first_name,'e',3,2) from employees; -- ارجاع الاسم الاول وتحديد موقع حرف معين

 

select salary , lpad(salary,7,'#') from employees;

 -- ارجاع الراتب ونقوم باستخدام الدالة وادراج رمز # بــ 7 رموز من الجهة اليسرى

 

select salary , rpad(salary,7,'#') from employees; 

-- ارجاع الراتب ونقوم باستخدام الدالة وادراج رمز # بــ 7 رموز  من الجهة اليمنى

 

select first_name , replace(first_name,'a','*') from employees;

 -- ارجاع اسم الموظف وتبديل حرف الأي برمز * للاسم الاول

 

select first_name , replace(first_name,'av','*') from employees; 

-- ارجاع اسم الموظف وتبديل حرفين الأي والفي برمز * للاسم الاول

 

select trim(' ' from ' Mohammed ') A from dual; 

-- ارجاع نص وحذف المسافات من جميع الجهات

 

select trim(leading ' ' from ' Mohammed ') A from dual;

-- ارجاع نص وحذف المسافة من البداية فقط

 

select trim(trailing ' ' from ' Mohammed ') A from dual; 

-- ارجاع نص وحذف المسافة من النهاية فقط

 

select trim(both ' ' from ' Mohammed ') A from dual;

 -- ارجاع نص وحذف المسافات من جميع الجهات

 

select trim('M' from 'Mohammed') A from dual;

-- ارجاع نص وحذف الحرف إم

 

select trim(' Mohammed ali ') A from dual; 

-- ارجاع نص مع حذف المسافات افتراضي دون الحاجة تحديد المسافة بداخل الاستعلام

 

select round(95.55) from dual; 

-- ارجاع رقم وتقريبة الى رقم صحيح في حالة اكبر او يساوي خمسة

 

select round(95.45) from dual; 

-- ارجاع رقم وتقريبة الى رقم صحيح في حالة اكبر او يساوي خمسة اذا كان الرقم العشري اصغرمن 5 فسوف يرجع الرقم دون تقريب الرقم العشري

 

select round(95.45,1) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(95.5514,3) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(95.55,-1) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(94.542,-1) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(95.55,-2) from dual;

 -- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(545.55,-3) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(495.55,-3) from dual; 

-- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select round(1295.55,-2) from dual; -- ارجاع رقم وتحديد كم عدد الارقام العشرية للظهور

 

select trunc(125.1566) from dual; -- ارجاع رقم وقص العلامة العشرية

 

select trunc(125.1566,2) from dual; -- ارجاع رقم واظهار رقمين بعد العلامة العشرية

 

select trunc(125.1566, -2) from dual; -- ارجاع رقم وتغيير رقمين الى أصفار من قبل النقطة العشرية

 

select mod(15,2) from dual; -- ارجاع باقي القسمة للرقم 15

 

select first_name , hire_date from employees; -- ارجاع اسم المستخدم وتاريخ تعيينة

 

select sysdate from dual; -- ارجاع تاريخ ووقت السيرفر الان

 

select sysdate , sysdate + 1 from dual; -- ارجاع تاريخ ووقت السيرفر الان مع زيادة يوم في التاريخ

 

select sysdate , sysdate - 5 from dual; -- ارجاع التاريخ والوقت وتنقيص من التاريخ 5 ايام

 

select sysdate + 5/24 from dual; -- ارجاع تاريخ ووقت السيرفر الان مع زيادة 5 ساعات

 

select first_name , hire_date , round(sysdate - hire_date) days from employees; -- ارجاع اسم الموظف وتاريخ توظيفة واحتساب تاريخ اليوم ناقص تاريخ توظيفة يظهر لنا اجمالي ايام التوظيف الى الان

 

select first_name , hire_date , (sysdate-hire_date)/7 weeks_work from employees; -- ارجاع اسم الموظف وتاريخ توظيفة واحتساب عدد اسابيع دوامة لحد الان

 

select first_name , round(months_between(sysdate , hire_date)) from employees; -- حساب الاشهر بين تاريخين

 

select first_name , hire_date , add_months(hire_date , 4) from employees; -- ارجاع اسم الموظف وتاريخ توظيفة واضافة 4 اشهر لتارخ توظيفة

 

select first_name , hire_date , add_months(hire_date , -4) from employees; -- ارجاع اسم الموظف وتاريخ توظيفة ناقص 4 اشهر لتارخ توظيفة

 

select sysdate , next_day(sysdate,'MONDAY') from dual; -- ارجاع التاريخ وتحديد تاريخ يوم الاثنين المقبل

 

select next_day(sysdate , 1) from dual; -- ارجاع تاريخ يوم الاثنين بالارقام لان رقم 1 هو يوم الاثنين بشكل افتراضي

 

select last_day(sysdate) from dual; -- ارجاع اخر تاريخ في الشهر

 

select round(sysdate , 'MONTH') from dual; -- ارجاع التاريخ مع تقريب الشهر

 

select round(sysdate , 'YEAR') from dual; -- ارجاع التاريخ مع تقريب السنة

 

select trunc(sysdate , 'MONTH') from dual; -- ارجاع التاريخ مع اقتصاص الشهر

 

select trunc(sysdate , 'YEAR') from dual; -- ارجاع التاريخ مع اقتصاص السنة

 

select substr(upper(first_name),2) from employees; -- ارجاع اسم الموظف مع قص حرفين وعرض الاسم بالحروف الكبيرة

 

select to_char(sysdate,'DD-MM-YYYY') from dual; -- ارجاع تاريخ السيرفرالان بصيغة معينة

 

select to_char(sysdate,'DAY*MON*YYYY') from dual; -- ارجاع تاريخ السيرفرالان بصيغة معينة

 

select first_name , to_char(hire_date,'DD-MON-YYYY') as hire_date from employees; -- ارجاع اسم الموظف وتاريخ توظيفة بصيغة معينة

 

select to_char(sysdate,'DD-MM-YYYY HH:MI AM') from dual; -- ارجاع التاريخ والوقت بصيغة معينة

 

select to_char(sysdate,'DAY-MONTH-YEAR HH24:MI:SS') "date" from dual; -- ارجاع التاريخ والوقت بصيغة معينة

 

select to_char(sysdate ,'DD " OF " MM') from dual; -- ارجاع التاريخ بصيغة معينة ودراج نص بداخل التاريخ

 

select to_char(sysdate ,'ddth "of" MON') from dual; -- ارجاع التاريخ بصيغة معينة ودراج نص بداخل التاريخ

 

select to_char(sysdate , 'DDSP MON YYYY') from dual; -- ارجاع التاريخ والوقت بصيغة معينة

 

select first_name , hire_date from employees where to_char(hire_date,'YYYY') = '2008'; -- ارجاع اسم الموظف وتاريخ توظيفة مع البحث في التاريخ بصيغة معينة

 

select first_name , salary , to_char(salary,'99,999') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select first_name , salary , to_char(salary,'99999.99') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select first_name , salary , to_char(salary,'99999D99') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select first_name , salary , to_char(salary,'99999$') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select first_name , salary , to_char(salary,'L99999') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين للعملة المحلية

 

select first_name , salary , to_char(salary,'09999') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين واضافة صفر

 

select first_name , salary , to_char(salary,'99G999') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select first_name , salary , to_char(salary,'99,999') from employees; -- ارجاع اسم الموظف والراتب وتحويل صيغة عرض الراتب بشكل معين

 

select to_char(189.53,'99,999') from dual; -- ارجاع رقم عشري وتم تقريب الرقم العشري الى رقم صحيح تلقائي

 

select to_number('1520','9999') from dual; -- ارجاع رقم وتحويلة من نص الى رقم

 

select to_number('1,520','9,999') from dual; -- ارجاع رقم وتحويلة من نص الى رقم

 

select to_number('$1,520','$9,999') from dual; -- ارجاع رقم وتحويلة من نص الى رقم

 

select to_date('10-MAR-1993','DD-MON-YYYY') from dual; -- ارجاع تاريخ معين بالصيغة الافتراضية للسيرفر

 

select to_date('10-MAR-               1993','DD-MON-YYYY') from dual; -- ارجاع تاريخ معين وتقوم اوراكل بازالة المسافات كاملة تلقائياً

 

select to_char(to_date('10-MAR-1993','DD-MON-YYYY'),'yyyy') from dual; -- ارجاع تاريخ معين وتم تحويلة ليظهر الى سنوات فقط

 

select first_name , nvl(COMMISSION_PCT , 0) from employees; -- ارجاع اسم الموظف والزيادة المئوية وتحويل الصفوف التي لها قيمة نل الى الصفر

 

select first_name , nvl(job_id , 'لا يوجد لدية وظيفة') from employees; -- ارجاع اسم الموظف واسم الوظيفة وتحويل الصفوف التي لها قيمة نل الى نص

 

select first_name , nvl(to_char(COMMISSION_PCT),'لا يوجد لة نسبة') from employees; -- ارجاع اسم الموظف والزيادة المئوية وتحويل الصفوف التي لها قيمة نل الى نص

 

select first_name , nvl2(commission_pct , commission_pct , 0) from employees; -- رجاع اسم الموظف والزيادة المئوية وتحويل الصفوف التي لها قيمة نل الى الصفر

 

select first_name , nvl2(commission_pct , 'لدية نسبة' , 'لا يوجد لة نسبة') income from employees; -- رجاع اسم الموظف والزيادة المئوية وتحويل الصفوف التي لها قيمة نل الى لا يوجد له نسبة والذي لدية نسبة يظهر نص لدية نسبة

 

select first_name , last_name , length(first_name) , length(last_name) ,

nullif(length(first_name),length(last_name)) result from employees; -- ارجاع الاسم الاول والاخير وحساب طول الاسم الاول مع طول الاسم الاخير اذا تساوى الطول يرجع القيمة نل ماعدا ارجاع القيم الاولى

 

select first_name , commission_pct , manager_id , department_id ,

coalesce(commission_pct,manager_id,department_id) result from employees; -- ارجاع الاسم الاول والنسبة المئوية ورقم المدير ورقم القسم ويتم فحص النسبة المئوية اذا كان هناك قيمة نل يرجع رقم المدير  واذا كان هناك قيمة نل يرجع رقم قسم

 

select first_name , salary , job_id,

case job_id WHEN 'SH_CLERK' THEN 1.15*salary

            WHEN 'MK_MAN' THEN 1.18*salary

            ELSE salary

END Result

from employees; -- ارجاع الاسم الاول وراتبة واسم الادارة وتحديد اذا كان الموظفين في الادارات المحددة اضف الى راتبهم زيادة معينة

 

select first_name , salary , job_id,

case        WHEN job_id='SH_CLERK' THEN 1.15*salary

            WHEN job_id='MK_MAN' THEN 1.18*salary

            ELSE salary

END Result

from employees; -- ارجاع الاسم الاول وراتبة واسم الادارة وتحديد اذا كان الموظفين في الادارات المحددة اضف الى راتبهم زيادة معينة

 

select first_name , salary , case when salary = 2800 then salary+1000  end new_add_sal from employees; -- ارجاع اسم الموظف وراتبه ومن هو راتبة الذي يساوي 2800 قم باضافة 1000 الى راتبة

 

select first_name , salary , case

when salary between 5000 and 15000 then salary - 1000

when salary between 1000 and 4500 then salary + 500

else 0 end subs from employees;

 -- ارجاع اسم الموظف وراتبة ومن هم رواتبهم ما بين 5000 و 15000 يتم خصم 1000 من راتبه ومن هم الموظفين الذي رواتبهم مابين 1000 و 4500 يتم زيادة 500 فوق رواتبهم

 

select first_name , salary ,

DECODE(salary , 2000 ,salary + 1000,

                2500 ,salary + 1000,

                2800 ,salary + 1000,0) AD from employees; -- ارجاع اسم الموظف وراتبة ومن هم الموظفين الذي رواتبهم تساوي 2000 و 2500 و 2800 ويقوم بزيادة لهم ب 1000 فوق رواتبهم

               

select first_name , salary ,

DECODE(salary , 13000, salary-0.05*salary,0) Subs from employees; -- ارجاع اسم الموظف وارتبة ومن هو الموظف الذي راتبة 13000 ويتم خصم 5% من راتبة

 

select max(salary) , min(salary) from employees; -- ارجاع اعلى راتب واقل راتب

 

select max(first_name) , min(first_name) from employees; -- اعلى ترتيب لاسم الموظف واقل ترتيب لاسم الموظف من ناحية الحروف الهجائية

 

select max(hire_date) , min(hire_date) from employees; -- اعلى تاريخ توظيف واقل تاريخ توظيف

 

select sum(salary) , avg(salary) from employees; -- ارجاع اجمالي الرواتب ومجموع كل الرواتب وتقسيمة بعدد الموظفين

 

select count(*) from employees; -- ارجاع عدد السجلات في جدول الموظفين

 

select count(1) from employees; -- ارجاع عدد السجلات في جدول الموظفين

 

select count(commission_pct)from employees; -- ارجاع عدد السجلات لحقل النسبة المئوية دون حساب القيمة نل

 

select count(department_id) from employees; -- ارجاع عدد السجلات لحقل الاقسام من جدول الموظفين

 

select count(distinct department_id) from employees; -- ارجاع عدد السجلات لحقل الاقسام من جدول الموظفين دون تكرار

 

select count(nvl(commission_pct,0)) from employees; -- ارجاع عدد السجلات لحقل النسب المئوية وحساب القيم الفارغة

 

select count(department_id) from employees where department_id = 90; -- ارجاع عدد سجلات لحقل الاقسام وتحديد رقم قسم معين

 

select listagg(upper(first_name),' | ') within group (order by first_name) list_emp from employees where department_id = 30; -- ارجاع اسماء الموظفين الذ هم في القسم رقم 30 في سطر واحد وترتيبهم بحسب اسم الموظف تنازلي

 

select department_id , sum(salary) from employees group by department_id; -- ارجاع رقم القسم ومجموع الرواتب لكل قسم

 

select department_id DD , sum(salary) from employees group by department_id order by DD; -- ارجاع رقم القسم ومجموع الرواتب لكل قسم

 

select department_id DD , sum(salary) from employees where department_id < 50 group by department_id order by DD; -- ارجاع رقم القسم ومجموع الرواتب للاقسام التي هي اصغر من 50

 

select department_id , sum(salary) from employees

group by department_id having sum(salary) > 152225 order by department_id; -- ارجاع رقم القسم ومجموع الرواتب لكل قسم مع تحديد من هم الاقسام التي رواتبهم اكبر من 152225

 

select max(sum(salary)) from employees group by department_id; -- ارجاع اعلى ومجموع الرواتب للاقسام

 

select employees.first_name , DEPARTMENTS.DEPARTMENT_NAME from employees , departments

where employees.DEPARTMENT_ID = departments.DEPARTMENT_ID; -- ارجاع اسم الموظف من جدول الموظفين واسم القسم من جدول الاقسام وفين رقم القسم الذي في جدول الموظفين يساوي رقم القسم في جدول الاقسام

 

select emp.first_name , dept.department_name , loc.city from employees emp ,

departments dept , locations loc where

emp.DEPARTMENT_ID = dept.DEPARTMENT_ID and loc.LOCATION_ID = dept.LOCATION_ID order by emp.EMPLOYEE_ID; -- ارجاع اسم الموظف واسم القسم واسم المدينة من الجداول الموظفين والاقسام والمدن

 

select * from job_grade order by grades; -- ارجاع كل السجلات في جدول الدرجة الوظيفية

 

select e.EMPLOYEE_ID, e.first_name , e.salary , g.grades from employees e ,

job_grade g where e.salary between g.LOWSAL and g.HIGHTSAL; -- ارجاع اسم الموظف وراتبة والبحث في جدول الدرجة الوظيفية بحسب راتبة

 

select employees.first_name , DEPARTMENTS.DEPARTMENT_NAME from employees , departments

where employees.DEPARTMENT_ID = departments.DEPARTMENT_ID(+); -- ارجاع اسم الموظف من جدول الموظفين واسم القسم من جدول الاقسام وفين رقم القسم الذي في جدول الموظفين يساوي رقم القسم في جدول الاقسام والموظف الذي لا ينتمي لأي قسم || Outer Join

 

select employees.first_name , DEPARTMENTS.DEPARTMENT_NAME from employees , departments

where employees.DEPARTMENT_ID(+) = departments.DEPARTMENT_ID; -- ارجاع اسم الموظف من جدول الموظفين واسم القسم من جدول الاقسام وفين رقم القسم الذي في جدول الموظفين يساوي رقم القسم في جدول الاقسام والاقسام التي لا يتنتمي لاي موظف || Outer Join

 

select w.employee_id , w.first_name , w.manager_id , e.first_name

from employees w , employees e where w.manager_id = e.employee_id(+) order by w.employee_id; -- ارجاع رقم واسم الموظف ورقم واسم المسؤول عن الموظف ومن هة الموظف الذي ليس لدية مسؤول || Outer Join

 

select emp.employee_id , emp.first_name , dept.department_id , dept.department_name , loc.location_id , loc.city

from employees emp , departments dept , locations loc where

emp.department_id = dept.department_id(+)

and

dept.LOCATION_ID = loc.LOCATION_ID(+); -- ارجاع رقم الموظف واسم الموظف ورقم واسم القسم ورقم واسم المدينة ومن هو الموظف الذي ليس لدية بيانات في الجداول  || Outer Join

 

select emp.first_name , dept.department_name from employees emp cross join departments dept; -- ارجاع اسم الموظف واسم القسم مع تكرار البيانات || New Syntax for table join 1999

 

select department_id , department_name , city , location_id from departments natural join locations; -- ارجاع رقم القسم اسم القسم المدينة رقم المدينة من جدولين || New Syntax for table join 1999

 

select e.first_name , d.department_name from employees e join departments d using(department_id); -- ارجاع اسم الموظف واسم الاقسام من جدولين الموظفين والاقسام || New Syntax for table join 1999

 

select e.first_name , d.department_name from employees e

join departments d on (e.DEPARTMENT_ID = d.DEPARTMENT_ID); -- ارجاع اسم الموظف واسم الاقسام من جدولين الموظفين والاقسام || New Syntax for table join 1999 يعتبر من اهم الاستخدامات في الاستعلامات عن اكثر من جدول

 

select e.first_name , d.department_name , l.city from employees e join departments d

on d.DEPARTMENT_ID = e.DEPARTMENT_ID join locations l on d.LOCATION_ID = l.LOCATION_ID; -- ارجاع اسم الموظف واسم الموظف واسم المدينة من 3 جداول  || New Syntax for table join 1999

 

select e.first_name , d.department_name , l.city from employees e left outer join departments d

on d.DEPARTMENT_ID = e.DEPARTMENT_ID left outer join locations l on d.LOCATION_ID = l.LOCATION_ID; -- ارجاع اسم الموظف واسم الموظف واسم المدينة من 3 جداول وراجاع الموظف الذي ليس لدية بيانات || New Syntax for table join 1999

 

select e.first_name , d.department_name

from employees e left outer join departments d on(e.DEPARTMENT_ID = d.DEPARTMENT_ID); -- ارجاع اسم الموظف واسم القسم وارجاع الموظف الذي لا ينتمي لاي قسم || New Syntax for table join 1999

 

select e.first_name , d.department_name 

from employees e right outer join departments d on(e.DEPARTMENT_ID = d.DEPARTMENT_ID); -- ارجاع اسم الموظف واسم القسم وارجاع الاقسام التي لا تنتمي لاي موظف || New Syntax for table join 1999

 

select e.first_name , d.department_name

from employees e full outer join departments d on(e.DEPARTMENT_ID = d.DEPARTMENT_ID); -- ارجاع اسم الموظف واسم القسم وارجاع الموظف والاقسام التي لا تنتمي لاي منهم || New Syntax for table join 1999

 

/* الاستعلامات المتداخلة

 

main query = outer query -- same meaning

 

sub query = inner query -- same meaning

 

top in = using groups function like min , max , round ....

 

*/

 

select first_name , salary from employees where

salary > (select salary from  employees where first_name = 'Hermann'); -- ارجاع اسم الموظف وراتبة ومن هم الموظفين الذين رواتبهم اكبر من الموظف هارمن وترجع عمود واحد فقط وتستخدم الاشارات التالية || - | + | > | < | >= | <= | <>

 

select first_name , salary , job_id from employees where job_id =

(select job_id from employees where first_name = 'Girard') and

salary < (select salary from employees where first_name = 'Girard'); -- ارجاع اسم الموظف وراتبة والمسمى الوظفي وماهو المسمى الوظيفي للموظف جيرارد ومن هم الموظفين الذين رواتبهم اقل من الموظف جيرارد بنفس قسمة

 

select first_name , salary , job_id from employees where salary = (select min(salary) from employees); -- ارجاع اسم الموظف وراتبة والمسمى الوظيفي واقل راتب من بين الموظفين

 

select * from employees where salary = (select max(salary) from employees); -- ارجاع جميع بيانات الموظف ومن هو الموظف الذي لدية اعلى راتب

 

select department_id , count(employee_id) from employees group by department_id

having count(employee_id) > (select count(*) from employees where department_id = 90); -- ارجاع رقم القسم ومجموع عدد الموظفين وماهي اجمالي عدد الموظفين الذي اكبر من الادارة 90

 

select * from employees where department_id in (select department_id from employees where department_id = 90); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو للادارة 90

 

select * from employees where department_id in (30,40); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو للقسمين 30 و 40

 

select * from employees where salary >= any (select salary from employees where department_id = 90); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي رواتبهم اعلى رواتب او تساوي بداخل القسم 90

-- (17000 >= 24000) or (17000 >= 24000) or (24000 >= 24000)

 

select * from employees where salary >= all (select salary from employees where department_id = 90); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي رواتبهم اعلى رواتب و تساوي بداخل القسم 90

-- (17000 >= 24000) and (17000 >= 24000) and (24000 >= 24000)

 

 /* معنى any

 

< any = اقل قيمة من اعلى قيمة

 

> any = اعلى قيمة من اقل قيمة

 

= any = بنفس استخدام الــ IN

 

< all = اقل من اقل قيمة

 

> all = اعلى من اعلى قيمة

 

= all = null

 

 */

 

select * from employees where department_id < any (30,40); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو الى الادارات التي اقل من 30 و 40

 

select * from employees where department_id = any (30,40); -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو للقسمين 30 و 40

 

select * from employees where department_id < all (30,20);

 -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو اقل من رقم القسم 20 و 30

 

select * from employees where department_id > all (60,80);

 -- ارجاع جميع بيانات الموظف ومن هم الموظفين الذي ينتمو اعلى من رقم القسم 60 و 80

 

/* الاستعلامات المدمجة Compound Queries:

 

  -- Union دمج استعلامين او اكثر وحذف البيانات المكررة من الاستعلامات

 

  -- Union all دمج استعلامين او اكثر وادراج البيانات المكررة من الاستعلامات

 

  -- Minus السجلات الموجودة في الاستعلام الاول وليست موجودة في الاستعلام الثاني

 

  -- Intersect السجلات المشتركة بين الاستعلامات

 

  -- ملاحظات مهمة

 

  -- يجب ان يكون الجدول الاول مساوي لعدد الحقول للجدول الاول

 

  -- يجب ان يكون انواع بيانات الحقول للجدول الاول مساوي للجدول الثاني

 

  -- لا يمكن اهمال القيمة نل (الفارغة)

 

  -- تقوم اوراكل بترتيب البيانات تلقائياً ما عدا الــ (union all)

 

  -- اسماء الحقول سوف تكون من الجدول الاول

 

  -- Dummy Coloum حقل اضافي يتم اضافتة يدوي مؤقت في حالة لم تساوي الحقول في الجدولين الذي تم العمل لهم دمج

 

*/

 

select * from a union select * from b; -- ارجاع البيانات كاملة من الجدول الاول والجدول الثاني وعدم اظهار البيانات المتكررة

 

select * from a union all select * from b; -- ارجاع البيانات كاملة من الجدول الاول والجدول الثاني مع السجلات المتكررة

 

select * from a intersect select * from b; -- ارجاع البيانات كاملة من الجدول الاول والجدول الثاني مع استرجاع البيانات المشتركة في الجدولين

 

select * from a minus select * from b; -- ارجاع البيانات كاملة من الجدول الاول والجدول الثاني مع ارجاع البيانات الموجودة في الجدول الاول وليست في الجدول الثاني

 

select employee_id , job_id , first_name||' '||last_name "Full Name" from employees

union

select hist.employee_id , hist.job_id , emp.first_name||' '||emp.last_name from job_history hist

join employees emp on (emp.employee_id=hist.employee_id);

 

/*

ارجاع رقم الموظف والوظيفة ودمج الاسم الاول والاخير من جدول الموظفين

 

ارجاع رقم الموظف والوظيفة واضافة اسم الموظف كامل من جدول تاريخ تغيير الوظيفة

 

ربط جدول الموظفين مع تاريخ تغيير الوظيفة لكي يتم دمج الاسم الاول والاخير في جدول تاريخ تغيير الوظيفة

*/

 

select employee_id , job_id , salary from employees

union

select employee_id , job_id , 0 sal from job_history order by employee_id desc; -- ارجاع رقم الموظف والوظيفة وراتبة من جدول الموظفين ودمج الجدول الثاني بحسب رقم الموظف وراتبة واضافة صفر للحقل الراتب لان الحقل ليس موجود في الجدول الثاني

 

select * from emp for update; -- ارجاع بيانات جدول الموظفين وحجزها للجلسة حتى لا يتمكن اي شخص التعديل عليها ولفك حجز بيانات الجدول يا بحفظ او تراجع

 

select * from emp for update nowait; -- ارجاع بيانات جدول الموظفين وحجزها للجلسة حتى لا يتمكن اي شخص التعديل عليها واذا كانت محجوزة لا تنتظر اظهر رسالة خطأ

 

select * from emp for update wait 10; -- ارجاع بيانات جدول الموظفين وحجزها للجلسة حتى لا يتمكن اي شخص التعديل عليها اذا كانت محجوزة من شخص اخر انتظر 10 ثوان مالم اظهر رسالة خطأ

 

select employees.first_name , departments.department_name

from employees , departments where employees.department_id = departments.department_id for update; -- ارجاع اسم الموظف والادارة من الجدولين الموظفين والادارات وحجزها للجلسة

 

select employees.first_name , departments.department_name

from employees , departments where employees.department_id = departments.department_id for update of salary; -- ارجاع اسم الموظف والادارة من الجدولين الموظفين والادارات وحجز جدول الموظفين فقط لتعديل رواتبهم

 

select table_name from user_tables; -- لعرض جميع الجداول التي انشئها المستخدم من الــ DATA DICTIONARY

 

insert into jobs (job_id,job_title,min_salary,max_salary) values ('DBA','Database administrator',18000,35000); -- ادراج سجل جديد لجدول الوظائف

 

insert into employees (employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id)

values (210,'Mohammed','Almahfadi','Orelbase','776462030',to_date('01/21/2019','MM/DD/YYYY'),'DBA',20000,0.3,210,null); -- ادراج سجل جديد لجدول الموظفين

 

insert into departments (department_id,department_name,manager_id,location_id) values (280,'DATABASE',210,2400); -- ادراج سجل جديد لجدول الاقسام

 

insert into a (fname,lname) values ('&firstName','&lastName'); -- يقوم المستخدم ادراج سجل جديد للجدول

 

insert into b (fname,lname) select fname,lname from a; -- ادراج سجلات الجدول الف للجدول باء

 

update employees set salary = 18000 where employee_id = 210; -- تعديل راتب الموظف 210 من 20000 الى 18000

 

update employees set salary = 19000 , commission_pct = 0.4 where employee_id = 210; -- تعديل راتب والزيادة المئوية للموظف 210

 

update employees set department_id = 280 where employee_id = 210; -- تعديل رقم ادارة الموظف التي ينتمي لها الى 280

 

update employees set manager_id = null where employee_id = 210; -- تعديل رقم المدير الذي ينتمي له الموظف 210 الى فارغ

 

update employees set salary = 1000; -- تم تعديل جميع رواتب الموظفين الى 1000 ويعتبر هذا من الاخطاء الفادحة من الضرور استخدام شرط في التعديل

 

update employees set salary = (select salary from employees where employee_id = 100) where employee_id = 210; -- تعديل راتب الموظف 210 بنفس راتب الموظف 100

 

update employees set (salary,commission_pct) = (select salary,commission_pct from employees where employee_id = 100)

where employee_id = 210; -- نعديل راتب والنسبة المئوية للموظف 210 بنفس راتب والنسبة المئوية للموظف 100

 

update employees set salary = (select salary from employees where employee_id = 100) ,

commission_pct = (select commission_pct from employees where employee_id = 100) where employee_id = 210; -- نعديل راتب والنسبة المئوية للموظف 210 بنفس راتب والنسبة المئوية للموظف 100

 

savepoint s0; -- نقطة استعادة قبل عملية الحفظ او التراجع

 

update emp set salary = 0; -- تم تعديل رواتب الموظفين الى صفر وهذا خطأ فادح

 

savepoint s1; -- نقطة استعادة قبل عملية الحفظ او التراجع

 

update emp set salary = 1000; -- تم تعديل رواتب الموظفين الى 1000 وهذا خطأ فادح

 

savepoint s2; -- نقطة استعادة قبل عملية الحفظ او التراجع

 

rollback to savepoint s1; -- الرجوع الى نقطة الاستعادة

 

update emp set salary = (select salary from employees where emp.employee_id = employees.employee_id);

/*

استرجاع رواتب الموظفين من  جدول الاول الى جدول الموظفين الذي رواتبهم صفر ولكن اذا لم يتساوى عدد سجلات الجدول الاول مع الجدول الثاني سوف يعديل رواتب الجدول

الثاني الى فارغ ويعتبر هذا خطأ فادح

*/

 

update emp set salary = (select salary from employees where emp.employee_id = employees.employee_id)

where exists (select * from employees where emp.employee_id = employees.employee_id); -- استرجاع رواتب الموظفين من الجدول الاول الى الجدول الثاني بإستثناء رواتب الموظفين الجدد الذي تم اضافتهم بعد تغيير رواتبهم الى صفر

 

delete from emp where employee_id = 210; -- تم حذف سجل الموظف رقمة 210

 

delete emp where employee_id = 210; -- تم حذف سجل الموظف رقمة 210

 

delete from emp where salary < 2500; -- تم حذف سجلات الموظفين الذي رواتبهم اقل من 2500

 

delete from emp where employee_id in (select employee_id from emp where first_name like 'A%'); -- تم حذف سجلات الموظفين الذي يبدأ اسمهم الاول بحرف الــ A

 

delete from emp where not exists (select * from employees where emp.employee_id = employees.employee_id); -- تم حذف سجلات الموظفين من الجدول الثاني والذين هم غير موجودين في الجدول الاول

 

delete from emp; -- تم حذف جميع بيانات الجدول

 

delete emp; -- تم حذف جميع بيانات الجدول

 

truncate table emp; -- حذف جميع السجلات  مع اعادة ترقيم الجدول

 

/* Diffrent Between Delete and Truncate

 

    Delete                    Truncate

   

    -- DML Statment           -- DDL Statment

    -- You Can Rollback       -- You Can't Rollback

    -- Fire the trigger       -- Not fire the trigger

    -- You can use where      -- No where clause

    -- Not recover space      -- Recover space

*/

 

/* Data Types أنواع البيانات

 

    -- Varchar2(size) = 32767 bytes(max_sql_string_size = Extended) OR 4000 bytes(max_sql_string_size = Legacy) Change these parameters by DBA

    -- Char(size) = 2000 bytes || Default 1

    -- Number(p,s) = -84 to 127 | example number(5,2) the result show like 99999.99 | Default MAX

    -- Date = 31-12-9999

    -- Long = same like varchar but up to 2GB

    -- Clob = bigger than long (4GB - 1) * DB_BLOCK_SIZE

    -- Nclob = bigger than long (4GB - 1) * DB_BLOCK_SIZE || The (N) letter it's mean you can use a unicode like arabic words or france ...

    -- Raw(size) = for binary data | 32767 bytes(max_sql_string_size = Extended) OR 4000 bytes(max_sql_string_size = Legacy) Change these parameters by DBA

    -- Long raw = for binary data same like Raw but up to 2GB

    -- Blob = for binary data | (4GB - 1) * DB_BLOCK_SIZE

    -- Bfile = for binary data to store external files (up to 4GB)

    -- Rowid = for store address of row

    -- Timestamp

    -- interval year to month

    -- interval day to secound

*/

 

/* Constraints القيود

 

    -- Primary key

    -- Foreign Key

    -- Unique

    -- Check

    -- Not null

*/

 

create table tst(

emp_id number(2), -- رقم الموظف من نوع بيانات رقمي

emp_name varchar2(50), -- اسم الموظف من نوع بياتات نصي

emp_gender char (1), -- جنس الموظف من نوع بيانات نصي

emp_mail clob, -- ايميل الموظف من نوع بيانات نصي بمساحة كيبيرة

emp_sal number(8,2), -- راتب الموظف من نوع بيانات رقمي وعدد المسموح به 8 و 2 تعني القيمة العشرية

emp_img blob, -- صورة الموظف من نوع بيانات بيناري

emp_date date default sysdate -- تاريخ دخول الموظف من نوع بيانات تاريخ مع قيمة افتراضية وهي تاريخ ووقت السيرفر الان

); -- انشاء جدول اسمة تست ولدية حقول رقم واسم وجنس وايميل وراتب وصورة الموظف

 

create table tst1(

emp_id number(2), -- رقم الموظف من نوع بيانات رقمي

emp_name varchar2(50), -- اسم الموظف من نوع بياتات نصي

emp_gender char (1), -- جنس الموظف من نوع بيانات نصي

emp_mail varchar2(150), -- ايميل الموظف من نوع بيانات نصي بمساحة كيبيرة

emp_sal number(8,2) not null, -- راتب الموظف من نوع بيانات رقمي وعدد المسموح به 8 و 2 تعني القيمة العشرية ولا يقيل قيمة فارغة

emp_img blob, -- صورة الموظف من نوع بيانات بيناري

emp_date date default sysdate, -- تاريخ دخول الموظف من نوع بيانات تاريخ مع قيمة افتراضية وهي تاريخ ووقت السيرفر الان

emp_status char, -- حالة الموظف : ملاحظة لم يتم تحديد حجم نوع البيانات فهذا النوع يأخذ القيمة 1 افتراضياً

department_id number, -- حقل لرقم القسم لجدول الاب لم يتم تحديد حجم نوع البيانات فهذا النوع يأخذ القيمة القصوى له

constraint emp_id_pk primary key (emp_id), -- قيد رقم الموظف بان لا يتكرر ولا يكون فارغ

constraint emp_name_ck check(emp_name > 3), -- قيد للاسم فحص عدد حروف المدخل اكبر من 3 حروف

constraint emp_gen_ck check(emp_gender in ('F','M')), -- قيد الجنس فحص المدخل بين الحرفين F و M

constraint emp_email_unq unique(emp_mail), -- قيد الايميل بأن لا يتكرر ويقبل القيمة الفارغة

constraint dept_id_fk foreign key(department_id) references departments (department_id) -- قيد رقم القسم الذي هو من يعود للحقل رقم القسم للجدول الاب

); -- انشاء جدول اسمة تست ولدية حقول رقم واسم وجنس وايميل وراتب وصورة الموظف مع القيود تعتبر افضل طريفة لانشاء الجدزول مع القيود

 

 

 

/* ----------------مثال مهم--------------- */

 

/*إنشاء جدولين الاقسام والموظفين وربط رقم القسم في جدول الموظفين وعمل لهم قيود وكذلك قيود في حالة حذف البيانات من جدول الابن ولدية بيانات في جدول الاب*/

 

-- example 1

 

create table sec ( sec_id number(2) primary key, sec_name varchar(15) unique); -- انشاء جدول الاقسام مع حقلين

 

insert into sec (sec_id,sec_name) values (1,'DBA'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (2,'WEB'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (3,'IT'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (4,'HR'); -- ادخال بيانات لجدول القسم

 

select * from sec; -- ارجاع جميع بيانات القسم

 

create table emp_tst (

emp_id number(2) primary key, emp_name varchar(20),

sec_id number, constraint sec_id_fk foreign key (sec_id) references sec on delete cascade

); -- انشاء جدول موظفين مع حقلين وعمل قيد مع جدول الاقسام

 

insert into emp_tst (emp_id,emp_name,sec_id) values (1,'MOHAMMED',1); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (2,'SARAH',3); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (3,'ALI',2); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (4,'AHMED',2); -- ادخال بيانات لجدول الموظفين

 

select * from emp_tst; -- ارجاع جميع بيانات الموظفين

 

delete sec where sec_id = 1;

-- حذف بيانات قسم 1 واذا كان هناك بيانات مربوطة بهذا القسم سيفوم بحذفها نظراً لوجود قيد في جدول الابن بحذف البيانات اجباري

-- on delete cascade والقيد هو في جدول الموظفين

 

drop table sec;

 

drop table emp_tst;

 

-- example 2

 

create table section ( sec_id number(2) primary key, sec_name varchar(15) unique); -- انشاء جدول الاقسام مع حقلين

 

insert into sec (sec_id,sec_name) values (1,'DBA'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (2,'WEB'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (3,'IT'); -- ادخال بيانات لجدول القسم

 

insert into sec (sec_id,sec_name) values (4,'HR'); -- ادخال بيانات لجدول القسم

 

select * from sec; -- ارجاع جميع بيانات القسم

 

create table emp (

emp_id number(2) primary key, emp_name varchar(20),

sec_id number, constraint sec_id_fk foreign key (sec_id) references sec on delete set null

); -- انشاء جدول موظفين مع حقلين وعمل قيد مع جدول الاقسام

 

insert into emp_tst (emp_id,emp_name,sec_id) values (1,'MOHAMMED',1); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (2,'SARAH',3); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (3,'ALI',2); -- ادخال بيانات لجدول الموظفين

 

insert into emp_tst (emp_id,emp_name,sec_id) values (4,'AHMED',2); -- ادخال بيانات لجدول الموظفين

 

delete sec where sec_id = 1;

-- حذف بيانات قسم 1 واذا كان هناك بيانات مربوطة بهذا القسم سيقوم بعمل قيمة فارغة للبيانات المربوطة بجدول الابن

-- on delete set null والقيد هو في جدول الموظفين

 

select * from emp_tst; -- ارجاع جميع بيانات الموظفين

 

/* ----------------مثال مهم--------------- */

 

create table employees1 as select * from employees; -- تم انشاء جدول من جدول الموظفين الموجود مسبقاً دون عمل له قيود وادراج البيانات من الجدول

 

create table emp (emp_id, emp_fname)

as select employee_id , first_name from employees; -- تم انشاء جدول بتحديد حقلين من جدول الموظفين

-- ملاحظة :: لا يمكن عمل انواع بيانات للحقول الجديدة ويمكنك عمل قيمة افتراضية فقط

 

create table emp3 (id number(2) , name varchar2 (50)); -- إنشاء جدول من حقلين دون قيود

 

create table emp11 as select * from employees where department_id = 90; -- تم انشاء جدول من جدول الموظفين مع تحديد البيانات المدخلة وهي الادارة 90

 

alter table employees2 add emp_lastname varchar(20); -- تم تعديل على هيكل الجدول واضافة حقل جديد

 

alter table employees2 add (emp_lastname varchar(20), phone number(2)); -- تم تعديل على هيكل الجدول واضافة حقلين جديدين

 

alter table employees2 modify emp_lastname varchar(200); -- نم نعديل على حقل وتوسيع نوع البيانات الى 200

 

alter table employees2 modify (emp_lastname varchar(200), phone number(6)); -- نم نعديل على الحقلين الاسم الاخير والرقم

 

alter table employees2 modify emp_fname default 'NAME'; -- تم تعديل على حقل الاسم واضافة له قيمة افتراضية

 

alter table employees2 drop column emp_lastname; -- تم حذف حقل معين من الجدول

 

alter table employees2 drop  (emp_lastname,phone); -- تم حذف اكثر من حقل

 

alter table employees2 set unused (emp_lastname); -- تم تعديل حقل الاسم الاخير الى غير مستخدم ولا يمكنك ادحال اي بيانات له

 

select * from user_unused_col_tabs; -- استرجاع الحقول الغير مستخذمة من الجداول

 

alter table employees2 drop unused columns; -- تم حذف الحقول التي ليست مستخدمة

 

alter table employees2 read only; -- تم تعديل الجدول للقراءة فقط ولا يمكنك ادخال او تعديل وا حذف على البيانات

 

alter table employees2 read write; -- نم تعديل الجدول لوضعة السابق قراءة وكتابة

 

alter table employees2 rename column emp_id to employee_id; -- تم تعديل اسم الحقل

 

rename employees2 to emp2; -- تم تعديل اسم الجدول

 

drop table employees2; -- نقل الجدول الى سلة المحذوفات الخاصة بمحرك اوراكل

 

drop table employees2 purge; -- حذف الجدول نهائياً من اوراكل

 

select * from employees2; -- الاستعلام من الجدول الذي تم انشائة من جدول الموظفين

 

alter table emp3 add constraint id_pk primary key (id); -- تم انشاء قيد جديد للجدول الذي ليس له قيود

 

alter table emp3 disable constraint id_pk; -- id_pk تم تعطيل القيد

 

alter table emp3 enable constraint id_pk; -- id_pk تم تفعيل القيد

 

alter table emp3 drop constraint id_pk; -- id_pk تم حذف القيد

 

select * from user_constraints; -- اظهار جميع القيود التي انشئها المستخدم

 

/*----------------------------------------------- تمارين عامة ----------------------------------------------------*/

 

-- Note1: INTERVAL (YEAR TO MONTH / DAY TO SECOND)

 

-- Year() = تقبل ارقام موجبة وسالبة

 

-- Month = تقبل من 00 الى 11

 

-- Day() = تقبل ارقام موجبة وسالبة

 

-- Hour() = تقبل من 00 الى 23

 

-- Second = تقبل من 00 لى 59.9

 

select * from employees order by commission_pct; -- استرجاع بيانات الموظف بحسب ترتيب النسب المئوية تنازلي

 

select * from employees order by commission_pct nulls first; -- استرجاع بيانات الموظف بحسب ترتيب النسب المئوية الفارغة اولاً

 

select * from employees order by commission_pct nulls last; -- استرجاع بيانات الموظف بحسب ترتيب النسب المئوية الفارغة اخيراً

 

select * from employees order by salary+100; -- استرجاع بيانات الموظف وترتيبها بحسب الراتب + 100

 

select first_name fname from employees order by fname; -- استرجاع بيانات الموظف وترتيبها بالاسم المستعار الذي تم اضافتة

 

select interval '5-2' year to month from dual; -- استرجاع القيمة 2-5 وتعني خمس سنوات وشهرين

 

select interval '153-10' year(3) to month from dual; -- استرجاع القيمة 10-153 وتعني مئة وثلاثة وخمسون سنه وعشرة اشهر في حالة كان رقم السنة اكبر من 2 فضروري تحديد لمتغير السنة قيمة بعدد المدخل

 

select interval '532' month from dual; -- استرجاع القيمة 532 دون تحديد السنةفسيتم تحويلها للسنة وستظهر القيمة 04-44 وتعني اربعة واربعين سنة واربعة اشهر

 

select interval '22' year from dual; -- استرجاع القيمة 22 وتعني اثنان وعشرون سنة وصفر شهر

 

select interval '25 15:12:25' day to second from dual; -- استرجاع عدد الايام والساعة مع الدقائق والثواني واجزاء من الثانية

 

select interval '2552 15:12:25' day(4) to second from dual; -- استرجاع عدد الايام والساعة مع الدقائق والثواني واجزاء من الثانية

 

select interval '54' hour from dual; -- استرجاع عدد الساعات بالايام والوقت

 

select interval '5456' hour(3) from dual; -- استرجاع عدد الساعات بالايام والوقت

 

-- مثال لاستعلامات ترجع نفس القيمة

 

select avg(salary) sal from employees where department_id = 90; -- استرجاع متوسط رواتب الادارة 90

 

select avg(decode(department_id,90,salary,null)) sal from employees; -- استرجاع متوسط رواتب الادارة 90

 

select avg(case when department_id = 90 then salary else null end) sal from employees; -- استرجاع متوسط رواتب الادارة 90

 

select to_char(hire_date, 'YYYY') , count(employee_id) from employees group by to_char(hire_date, 'YYYY'); -- استرجاع اجمالي عدد الموظفين الذين تم قبولهم في جميع السنوات

 

select count(employee_id) from employees group by department_id; -- استرجاع عدد الموظفين لكل ادارة

 

select count(employee_id) from employees group by (salary-commission_pct); -- استرجاع اجمالي عدد الموظفين ومجموع راتبة ناقص النسبة المئوية

 

select to_char(1231.5,'9,999.9') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة

 

select to_char(1231.5,'0,000.0') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة

 

select to_char(1231.5,'9G999D9') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة

 

select to_char(1231.5,'9G909D9') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة

 

select to_char(1231.5,'09G909D9') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة واذا اضفنا رقم صفر في البداية سيظهرها واذا اضفنا نسعة لن يظهر اي شيء

 

select to_char(1231.5,'99G909D9') from dual; -- استرجاع الرقم وتحويلة لنص مع تغيير الصيغة واذا اضفنا رقم صفر في البداية سيظهرها واذا اضفنا نسعة لن يظهر اي شيء

 

select first_name , nvl(commission_pct,0) from employees; -- استرجاع اسم الموظف والنسب المئوية والذين ليس لديهم نسب ضع القية 0

 

select first_name , nvl(to_char(commission_pct),'No commission') from employees; -- استرجاع اسم الموظف والنسب المئوية والذين ليس لديهم نسب ضع نص بداخل الحقل

 

select employee_id , decode(department_id , 90 ,'dept 90',20 , 'dept 20',30,'dept 30',department_id) dept from employees; -- استرجاع رقم الموظف ورقم القسم وضع امام القسم 90و 20و30 نص بحسب الشرط

 

select employee_id , decode(department_id,90,to_char(salary+1000),30,to_char(salary+500),'N/A') sal_plus from employees; -- استرجاع اسم الموظف ورقم الادارات مع زيادة للادارة 90 و 30 واظهر بدل رقم الادارة نص

 

select 'Yello''s' text from dual; -- استرجاع نص مع فاصلة بداخل النص

 

select first_name||' Work in |--| '||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'[ Work In' ]'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'( Work In' )'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'/ Work In' /'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'' Work In' ''||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'| Work In' |'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'7 Work In' 7'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select first_name||q'a Work In' a'||job_id from employees; -- استرجاع اسم الموظف ووظيفتة وربطهم بحقل واحد

 

select * from employees where hire_date = '21-jan-2019'; -- استرجاع بيانات الموظف ومن هو الموظف الذي تقدم للوظيفة بتاريخ معين

 

select * from employees where hire_date = '21-january-2019'; -- استرجاع بيانات الموظف ومن هو الموظف الذي تقدم للوظيفة بتاريخ معين

 

select * from employees where hire_date = '21-jan-19'; -- استرجاع بيانات الموظف ومن هو الموظف الذي تقدم للوظيفة بتاريخ معين

 

select * from employees where to_char(hire_date,'DD/MM/YYYY') = '21/01/2019'; -- استرجاع بيانات الموظف ومن هو الموظف الذي تقدم للوظيفة بتاريخ معين

 

select * from employees where salary is not null order by salary desc fetch first 3 rows only; -- استرجاع بيانات الموظفين لاعلى 3 رواتب وترتيبها تنازلي

 

select * from employees where salary is not null order by salary desc fetch first 3 /*rows*/ row only; -- استرجاع بيانات الموظفين لاعلى 3 رواتب وترتيبها تنازلي

 

select * from employees where salary is not null order by salary desc fetch first 3 rows with ties; -- استرجاع بيانات الموظفين لاعلى 3 رواتب ومن هم مشتركين بنفس الراتي وترتيبها تنازلي

 

select * from employees where salary is not null order by salary desc fetch first 20 percent row only; -- استرجاع بيانات الموظفين لاعلى 20 في المئة من البيانات وترتيبها تنازلي

 

select * from employees where salary is not null order by salary desc fetch first 20 percent row with ties; -- استرجاع بيانات الموظفين لاعلى 20 في المئة من البيانات وترتيبها تنازلي ومن هم مشتركين بالرواتب

 

create table tst2 (id number primary key , note long unique); -- انشاء جدول بحقلين ولكن الحقل الثاني لا يقبل اي قيد لان نوع البيانات لاتقبل فستظهر خطأ في انشاء الجدول

 

create table e as select * from employees where 1=2; -- انشاء جدول من جدول الموظفين بنفس اسماء الحقول وانواع البيانات دون ادراج البيانات

 

/*---------------------------------------------------------------------------------------------------*/

 

SELECT * FROM DICTIONARY /*or DICT */; -- استرجاع جميع اسماء قاموس البيانات Data Dictionary

 

select * from dict where table_name like 'USER_%'; -- استرجاع جميع اسماء قاموس البيانات Data Dictionary

 

select * from tabs /* or user_tables*/; -- استرجاع الجداول الخاصة بالمستخدم

 

comment on table section is ' This table like departments table'; -- انشاء تعليق نصي على جدول ويمكنك ان تكتب نص لحد 4000 حرف

 

comment on column section.sec_id is 'This is section id column'; -- انشاء تعليق نصي على حقل بداخل جدول

 

select * from user_tab_comments; -- استرجاع جميع التعليقات من الجداول الخاصة بالمستخدم

 

select * from user_col_comments; -- استرجاع جميع التعليقات من الحقول الخاصة بالجداول الخاصة بالمستخدم

 

select * from user_objects; -- اسنرجاع جميع انواع الكائنات للمستخدم

 

select * from all_tables; -- استرجاع جميع الجداول الخاصة بالمستخدم والجداول التي لدية الصلاحيات عليها

 

select * from all_objects; -- استرجاع جميع الكائنات الخاصة بالمستخدم والكائنات التي لدية الصلاحيات عليها

 

select * from user_catalog; -- استرجاع بيانات مختصرة عن جميع الكائنات

 

select * from user_tab_columns; -- استرجاع اسماء الحقول لجميع الجداول الخاصة بالمستخدم

 

select * from user_constraints; -- استرجاع جميع القيود للجداول الخاصة بالمستخدم

 

select a.owner,a.constraint_name,a.r_constraint_name,b.table_name

from user_constraints a , user_constraints b where a.r_constraint_name = b.constraint_name(+); -- استرجاع المالك واسم القيد واسم مصدر القيد واسم الجدول من جدول عرض جميع القيود الغرض منه معرفة القيود مع اي من الجداول مرتبطة

 

select * from user_cons_columns; -- استرجاع جميع البيانات ومعرفة ماهي الحقول التي عليها قيود

 

select a.owner,a.constraint_name,a.table_name,b.constraint_name,b.COLUMN_NAME from

user_constraints a , user_cons_columns b where a.CONSTRAINT_NAME = b.CONSTRAINT_NAME; -- استرجاع بيانات لاسماء القيود المربوطة بالجداول لكل حقل من جدولين القيود على مستوى الجدول وجدول القيود على مستوى الحقل

 

/* The Sequences

   

    - increment by n = default value 1

    - start with n = default value 1

    - maxvalue

    - nomaxvalue = default

    - minvalue n

    - nominvalue = default

    - order

    - noorder = default

    - cycle = do not use when you use a primary key constraint

    - nocycle = default

    - cache n = default value 20

    - nocache

*/

 

create sequence tst_seq; -- انشاء مسلسل لارقام مع القيم الافتراضية

 

create sequence tst_seq1 increment by -20 start with -1000 maxvalue -500 nocache nocycle; -- إنشاء مسلسل لارقام بقيم مخصصة

 

select tst_seq.nextval from dual; -- لاستخدام المسلسل وعرض الرقم

 

select tst_seq.currval from dual; -- عرض الرقم الحالي للمسلسل

 

insert into tst (id) values (tst_seq.nextval); -- إدراج حقل للجدول بالمسلسل

 

select * from tst; -- استرجاع جميع بيانات الجدول

 

alter sequence tst_seq increment by 2 maxvalue 30; -- تم تعديل المسلسل بتزايد ب 2 واعلى قيمة 30

 

drop sequence tst_seq1; -- حذف المسلسل

 

desc tst_seq; -- إسترجاع هيكل المسلسل tst_seq

 

truncate table tst; -- ROWID حذف بيانات الجدول وتصفير ال

 

select * from user_sequences; -- إسترجاع جميع المسلسل التي انشئها المستخدم

 

create table tst1 (id number default tst_seq.nextval , name varchar2(100)); -- إنشاء جدول واسناد للحقل قيمة افتراضية وهي المسلسل ولا ينصح استخدام المسلسل كقيمة افتراضية بداحل الجدول

 

insert into tst1 (name) values ('Ali'); -- ادخال بيانات الاسم دون الحاجة لادخال في حقل الرقم لاننا اعطينا حقل الرقم قيمة افتراضية وهي المسلسل

 

select * from tst1; -- استرجاع جميع البيانات التي تم ادخالها في الامر السابق

 

/* سؤال: قم بإدخال ادارة جديدة باستخدام المسلسل وكذلك قم بإدخال 3 موظفين من النفس الادارة التي قمت ادخالها بالمسلسل*/

 

create table tst_dept (id number primary key, deptname varchar2(20)); -- انشاء جدول بحقلين للادارات

 

create table tst_emp (id number primary key, empname varchar2(20), deptname varchar2(20)); -- انشاء جدول بثلاثة حقول للموظفين

 

create sequence tst_seq1; -- انشاء مسلسل

 

insert into tst_dept (id, deptname) values (tst_seq1.nextval, 'DBA'); -- ادخال بيانات لجدول الادارات باستخدام المسلسل

 

insert into tst_emp (id, empname, deptname) values (100, 'Mohammed', tst_seq1.currval); -- ادخال  بيانات لجدول الموظفين واستخدام المسلسل للقيمة الحالية في حق الاقسام

 

insert into tst_emp (id, empname, deptname) values (101, 'Ali', tst_seq1.currval); -- ادخال  بيانات لجدول الموظفين واستخدام المسلسل للقيمة الحالية في حق الاقسام

 

insert into tst_emp (id, empname, deptname) values (102, 'Ahmed', tst_seq1.currval); -- ادخال  بيانات لجدول الموظفين واستخدام المسلسل للقيمة الحالية في حق الاقسام

 

select * from tst_emp;

 

create synonym test for tst_emp; -- tst_emp انشاء اسم مستعار لجدول 

 

select * from test; -- tst_emp إسترجاع جميع البيانات من جدول بالاسم المستعار الذي تم انشائة

 

select * from user_synonyms; -- استرجاع جميع الاسماء الاستعارة التي انشئها المستخدم

 

drop synonym test; -- حذف الاسم المستعار

 

create public synonym glop for employees; -- create public synonym انشاء اسم مستعار عام لجدول الموظفين يستطيع جميع المستخدمين الاستعلام عنه || ولا يمكن انشاء هذا النوع من الاسماء المستعارة الا اذا كان لدى المستخدم صلاحيات

 

drop public synonym glop; -- حذ ف الاسم المستعار العام

 

create table emp (id number constraint id_emp primary key, fname varchar2(100) constraint fn_uq unique, lname varchar2(100), email varchar2(100), status char(1)); -- انشاء جدول موظفين واسناد قيود لبعض الحقول

 

select * from user_indexes where table_name = upper('emp'); -- استرجاع جميع بيانات الفهرس لجدول الموظفين الذي انشئناه ونلاحظ انه تم انشاء فهرسين تلقائيين للحقلين واخذ نفس اسماء القيود

 

select * from user_ind_columns where table_name = upper('emp'); -- استرجاع جميع بيانات الفهرس لجدول الموظفين الذي انشئناه ونلاحظ انه تم انشاء فهرسين تلقائيين للحقلين واخذ نفس اسماء القيود

 

insert into emp (id,fname) values (1, 'Mohammed'); -- إدخال بيانات لجدول الموظفين

 

insert into emp (id,fname) values (2, 'Ali'); -- إدخال بيانات لجدول الموظفين

 

insert into emp (id,fname) values (3, 'Ahmed'); -- إدخال بيانات لجدول الموظفين

 

insert into emp (id,fname) values (4, 'NASER'); -- إدخال بيانات لجدول الموظفين

 

select * from emp where id = 1; -- استرجاع جميع البيانات للموظف رقم 1 فأفضل طريقة للبحث بداخل الجدول استخدام شرط لكي يتم استخدام الفهرس

 

create index ln_ind on emp(lname); -- إنشاء فهرس للحقل الثالث في جدول الموظفين لتسريع البحث بداخل الجدول

 

create unique index email_ind_uq on emp(email); -- إنشاء فهرس فريد لا يمكن تكرار البيانات للحقل الرابع ويفضل انشاء قيد فريد للحقل وبذلك سيتم انشاء فهرس تلقائياً

 

create index uppr_ind on emp (upper(fname)); -- انشاء فهرس لحقل الاسم مع فانكشن الحروف الكبيرة لاستخدامها في البحث بشكل متكرر

 

select * from user_ind_expressions; -- استرجاع بيانات من جدول الفهرس التعبيرات لاستعلام عن الحقل الذي تم علية استخدام الفانكشن

 

drop table emp; -- حذف جدول الموظفين

 

create table emp (id number constraint id_ind_pk primary key using index (create index id_index on emp(id))); -- انشاء جدول الموظفين مع حقل بقيد معين وكذلك تم انشاء فهرس بإسم مختلف يدوياً

 

create index ind_dual on emp(lname,email); -- إنشاء فهرس واحد لحقلين

 

create bitmap index status_ind on emp(status); -- انشاء فهرس بيت ماب ويستخدم للبيانات الصغير

 

drop index ind_dual; -- حذف الفهرس

 

/* The Views

 

    - or replace = اذا كان هناك فيو (عرض) بنفس الاسم قم بإستبدالة بالجديد

    - force = اذا كنت اريد انشاء فيو لجدول ليس موجود وسوف انشأ الجدول لاحقاً

    - noforce = defaukt value

    - view = العرض

    - alias = اسم المستعار للعرض

    - subquery = الاستعلام

    - with check option = نستطيع ادخال او تعديل او حذف بيانات للعرض بس بشرط فحص القيود التي تضعها في العرض(فيو)

    - constraint = القيود

    - with read only = لعمل استعلام عن هذا العرض (فيو) فقط

*/

 

create or replace view emp_dept_10 as select employee_id,first_name,salary from employees where department_id = 10; -- انشاء عرض (فيو) لثلاثة حقول من جدول الموظفين للادارة 10

 

select * from emp_dept_10; -- استرجاع جميع البيانات من العرض (فيو)

 

create or replace view emps as select employee_id ID_NO, first_name FNAME, last_name LNAME, salary+100 ADDITIONAL from employees; -- انشاء عرض (فيو) لبعض الحقول من جدول الموظفين وتغيير اسماء الحقول وعمل زيادة 100 في حق الراتب

 

create or replace view emps (ID_NO,FNAME,LNAME,ADDITIONAL) as select employee_id, first_name, last_name, salary+100 from employees; -- انشاء عرض (فيو) لبعض الحقول من جدول الموظفين وتغيير اسماء الحقول وعمل زيادة 100 في حق الراتب

 

create or replace view emps (deptname, minsal, maxsal, avgsal) as select d.department_name, min(e.salary), max(e.salary), avg(e.salary)

from employees e join departments d on (e.department_id = d.department_id) group by d.department_name; -- انشاء عرض (فيو) للحقل اسم القسم من جدول الاقسام واعلى واقل ومتوسط الراتب من جدول الموظفين وربط الجدولين مع بعض لاسترجاع اسماء الادارات

 

create or replace view emps as select employee_id id, first_name fname, salary sal from employees

where department_id = 20 with check option constraint dept20; -- انشاء عرض (فيو) لرقم الموظف واسمة وراتبة للادارة 20 وتم انشاء قيد على العرض بأن لا يمكن اضافة او تعديل او حذف الى ع الادارة 20

 

create or replace view emps as select employee_id id, first_name fname, salary sal from employees

where department_id = 20 with read only; -- انشاء عرض (فيو) لرقم الموظف واسمة وراتبة للادارة 20 مع قيد للقراءة فقط

 

create or replace view emps as select * from tst_emp with read only constraint read_view;

 

create or replace force view emps as select * from notable; -- انشاء عرض (فيو) لجدول غير موجود وهذا العرض نادر الاستخدام

 

desc emps; -- استرجاع هيكل الجدول من العرض (فيو)

 

insert into emps (id, empname, deptname) values (1, 'Mohammed Aref', 'DBA'); -- ادخال بيانات لجدول عن طريق العرض (فيو) مراعاة القيود الموجودة في الجدول

 

select * from emps; -- استرجاع جميع البيانات من العرض (فيو)

 

drop view emps; -- حذف العرض (فيو)

 

select * from user_views; -- استرجاع جميع بيانات العرض (فيوز)

 

select * from user_constraints where table_name = 'EMPS'; -- استرجاع جميع بيانات العرض (فيو) التي هي من نوع للقراءة فقط من جدول القيود

 

create table emps as select * from employees; -- انشاء جدول من جدول الموظفين بجميع بياناته

 

alter table emps modify employee_id primary key; -- انشاء قيد على حقل رقم الموظف

 

select * from user_constraints where table_name = 'EMPS'; -- استرجاع جميع البيانات من جدول القيود واين معلومات الجدول المحدد

 

alter table emps drop constraint EMP_ID_PK; -- حذف قيد محدد من الجدول الذي تم انشائة مسبقاً

 

alter table emps modify employee_id constraint emp_id_pk primary key; -- انشاء قيد لحقل رقم الموظف مع اضافة اسم للقيد

 

alter table emps add constraint EMP_ID_PK primary key(employee_id); -- انشاء قيد لحقل رقم الموظف مع اضافة اسم للقيد

 

alter table emps add constraint DEPTS_ID_FK foreign key(department_id) references departments(department_id); -- انشاء قيد لرقم الادارات الموجود في جدول الموظفين مع اضافة الاسم لهذا القيد

 

alter table emps modify first_name not null; -- تعديل على الحقل وجعلة لا يقبل قيمة فارغة

 

select * from emps; -- استرجاع جميع البيانات من الجدول الذي تم انشائة مسبقاً

 

create table depts as select * from departments; -- انشاء جدول من جدول الادارات بجميع بياناتة

 

alter table depts add constraint DEPTS_ID_PK primary key(department_id); -- انشاء قيد لحقل رقم الادارة مع اضافة اسم للقيد

 

alter table depts drop primary key; -- لحذف القيد الرئيسي من جدول الادارات واذا كان هذا الحقل لدية بيانات مربوطة بجدول اخر لا نستطيع حذف هذا القيد

 

alter table depts drop primary key cascade; -- لحذف القيد الرئيسي من جدول الادارات اجباري حتى وان كان لدية بيانات مربوطة بجدول اخر مع البيانات المربوطة

 

alter table depts drop column department_id; -- لحذف حقل معين من جدول واذا كان في الحقل بيانات مربوطة بجداول اخرى لا يمكن الحذف

 

alter table depts drop column department_id cascade constraint; -- لحذف حقل معين اجباري حتى وان كان هناك بيانات مربوطة

 

alter table depts rename column department_id to dept_id; -- تعديل اسم الحقل

 

alter table depts rename constraint depts_id_pk to depts_pk; -- تعديل اسم القيد

 

select * from depts; -- استرجاع جميع البيانات من الجدول الذي تم انشائة مسبقاً

 

/* Deferrable constraint  القيود المؤجلة

 

    - Deferrable = NOT DEFERRABLE || Default value غير مؤجل

    - Deferred = أجل عمل القيد ولا تظهر أي خطأ حتى قيام المستخدم بالحفظ

    - immediate = قيد غير مؤجل واظهر رسالة خطأ في الحال

   

*/

 

create table mark (id number constraint id_pk primary key, prod varchar2(100) constraint prod_uq unique

, bonus number constraint bon_chk check(bonus>0)); -- انشاء جدول من ثلاثة حقول مع القيود

 

insert into mark (id,prod,bonus) values (1,'CD',0); -- ادخال بيانات للجدول السابق مع كسر القيد للحقل الثالث فستظهر رسالة خطأ لان القيد غير مؤجل

 

alter table mark drop constraint bon_chk; -- bon_chk حذف القيد

 

alter table mark add constraint bon_chk check(bonus>0) deferrable initially deferred; -- انشاء قيد على حقل معين مع امكانية تأجيل عملية القيد للحفظ

 

alter table mark add constraint bon_chk check(bonus>0) deferrable initially immediate; -- انشاء قيد على حقل معين دون تأجل اي عملية خطأ على القيد

 

insert into mark (id,prod,bonus) values (1,'CD',0); -- ادخال بيانات للجدول السابق مع كسر القيد للحقل الثالث فسيقبل البيانات لان القيد من نوع مؤجل لحين الحفظ

 

set constraint bon_chk deferred; -- تحويل قيد معين الى مؤجل على مستوى الجلسة ولا يمكن استخدام هذا الامر الا اذا كان القيد مخصص انه مؤجل او غير مؤجل

 

set constraint bon_chk immediate; -- تحويل قيد معين الى غير مؤجل على مستوى الجلسة  ولا يمكن استخدام هذا الامر الا اذا كان القيد مخصص انه مؤجل او غير مؤجل

 

/* Global Temporary table الجداول المؤقتة

 

    - تحفظ البيانات بشكل مؤقت وتنتهي هذه البيانات عند انتهاء الجلسة

 

*/

 

create global temporary table cart (id number primary key, prod varchar2(1223)) on commit delete rows; -- انشاء جدول مؤقت يحتفظ بالبيانات لمدة الجلسة فقط او عند الحفظ سيحذف البيانات

 

insert into cart (id,prod) values (1,'CD'); -- ادخال بيانات للجدول المؤقت

 

insert into cart (id,prod) values (2,'DVD'); -- ادخال بيانات للجدول المؤقت

 

insert into cart (id,prod) values (3,'BLURAY'); -- ادخال بيانات للجدول المؤقت

 

select * from cart; -- استرجاع جميع البيانات من الجدول

 

commit; -- Cart بعد عمل حفظ او الانتهاء من الجلسة ستحذف البيانات من جدول

 

create global temporary table cart1 (id number primary key, prod varchar2(1223)) on commit preserve rows; -- انشاء جدول مؤقت يحتفظ بالبيانات لمدة الجلسة كامة حتى وان استخدمنا حفظ لا يحذفها

 

insert into cart1 (id,prod) values (1,'CD'); -- ادخال بيانات للجدول المؤقت

 

insert into cart1 (id,prod) values (2,'DVD'); -- ادخال بيانات للجدول المؤقت

 

insert into cart1 (id,prod) values (3,'BLURAY'); -- ادخال بيانات للجدول المؤقت

 

select * from cart1; -- استرجاع جميع البيانات من الجدول

 

commit; -- Cart1 بعد عمل حفظ  لا يحذف البيانات من جدول لاننا استخدمنا جدول مؤقت يحفظ البيانات لمدة الجلسة كاملة

 

/* SQL LOADER

 

    - Sql loader اداة اضافية تأتي مع تحميل أوراكل || sqllder.exe

   

    - سنقوم بادخال بيانات خارجية على شكل جدول من ملف اكسيل لداخل قاعدة البيانات

   

    - pwrusg.csv اسم الملف

   

    - Control file لكي يتم نقل ملفات خارجية قم بإنشاء كنترول فايل بنفس اسم الاكسل او الملف بنفس مسار الملف المراد رفعة || pwrusg.ctl

   

    - قم بكتابة هذا الامر بداخل ملف الكنترول فايل الذي تم انشائة

   

    load data

    infile 'D:\load\pwrusg.csv'

    append

    into table pwr_usg

    fields terminated by ','

    (id,

    postion,

    watts

    )

   

    - cmd --> sqlldr control=D:\load\pwrusg.ctl log=D:\load\pwrusg.log قم بتنفيذ هذا الامرعلى الشاشة السوداء

   

    video 89

*/

 

create table pwr_usg (id number, postion varchar2(20), watts number); -- انشاء جدول بنفس ملف الاكسيل الخارجي

 

select * from pwr_usg order by id; -- استرجاع جميع البيانات التي تم ادخالها من الملف الاكسيل بنجاح

 

/* External Tables الجداول الخارجية

 

    - هي عبارة عن جداول خارجية للقراءة فقط لا يمكن التعديل عليها

   

    - البيانات التي تم تخزينها في هذه الجداول ليست موجودة على قاعدة البيانات انما موجودة بداخل ملفات في الهارد ديسك

   

    - فائدة الجداول الخارجية انها تخفف من الضغط على قاعدة البيانات مثلا لدينا بيانات ما قبل 5 سنوات فاصبحت قاعدة البيانات بطيئة يقوم مسؤول قواعد البيانات بنقلها

   

    vid 90 - 91

*/

 

create or replace directory pwr_ext as 'D:\exttable\'; -- انشاء مسار خارجي يستطيع المستخدم الوصول له

 

select * from all_directories where directory_name = 'PWR_EXT'; -- استرجاع جميع البيانات من جدول المسارات بحسب اسم مسار معين

 

CREATE TABLE olds (num char(5), postion char(20), watts char(5)) -- انشاء جدول مطابق للملف الاكسيل الخارجي

ORGANIZATION EXTERNAL -- نوع الجدول خارجي

(TYPE ORALCE_LOADER /* or ORACLE_DATAPUMP */ -- نوع البرنامج المستخدم

DEFAULT DIRECTORY pwr_ext -- اقرأ الملف من هذا المسار

ACCESS PARAMETERS

(RECORDS DELIMITED BY NEWLINE -- ينتهي السجل بسطر جديد

FIELDS TERMINATED BY ',') -- ينتهي الحقل بفاصلة

LOCATION ('oldpwrusg.csv') -- اسم الملف المراد استخدامة

)

REJECT LIMIT UNLIMITED; /* or nubmer ex: reject limit 5 || تجاوز الاخطاء لحد خمسة واخرج*/ -- تجاوز الاخطاء كاملة المهم ترجع لي بيانات

 

select * from olds; -- استرجاع جميع البيانات من ملف الاكسيل لداخل الجدول الخارجي

 

CREATE TABLE oldemps (num, fname, sal) -- انشاء جدول خارجي وملف دمب

ORGANIZATION EXTERNAL -- نوع الجدول خارجي

(TYPE ORACLE_DATAPUMP -- نوع البرنامج المستخدم

DEFAULT DIRECTORY pwr_ext -- اقرأ الملف من هذا المسار

LOCATION ('emp.dmp') -- انشئ ملف خارجي وخزن البيانات بداحلة

)

as select employee_id,first_name,salary from employees; -- البيانات التي سينم اخراجها للجدول الخارجي

 

select * from oldemps; -- استرجاع جميع البيانات من الملف الخارجي

 

CREATE TABLE oldempsread (num number, fname varchar2(100), sal number) -- انشاء جدول خارجي لملف دمب موجود مسبقاً

ORGANIZATION EXTERNAL -- نوع الجدول خارجي

(TYPE ORACLE_DATAPUMP -- نوع البرنامج المستخدم

DEFAULT DIRECTORY pwr_ext -- اقرأ الملف من هذا المسار

LOCATION ('emp.dmp') -- انشئ ملف خارجي وخزن البيانات بداحلة

);

 

select * from oldempsread; -- استرجاع البيانات من الملف الخارجي للقراءة فقط

 

 

/*---------------------------------------------------------------------تمارين مهمة-------------------------------------------------------------------------------*/

 

-- vid 92 - 96

 

select location_id, city from locations; -- استرجاع رقم المدينة واسم المدينة من جدول المناطق

 

select department_id, department_name, location_id from departments; -- استرجاع رقم القسم واسم القسم ورقم المدينة

 

select d.department_id, d.department_name, d.location_id, l.city from departments d ,

(select location_id, city from locations) l where d.location_id = l.location_id; -- استرجاع رقم الادارة واسم الادارة ورقم المدينة واسم المدينة باستخدام ربط بالاستعلامات

 

create table students (std_id number constraint std_id_pk primary key, std_name varchar2(50)); -- انشاء جدول بحقلين للطلاب

 

insert into students (std_id,std_name) values (1,'Mohammed Aref'); -- ادخال بيانات لجدول الطلاب

 

insert into students (std_id,std_name) values (2,'Rafat Aref'); -- ادخال بيانات لجدول الطلاب

 

insert into students (std_id,std_name) values (3,'Diana Aref'); -- ادخال بيانات لجدول الطلاب

 

insert into students (std_id,std_name) values (4,'Ali Aref'); -- ادخال بيانات لجدول الطلاب

 

create table stud_major (term_no varchar2(10),std_id number,std_maj varchar2(50),

constraint std_mjr_pk primary key(term_no,std_id),

constraint std_id_fk foreign key(std_id) references students(std_id)); -- انشاء جدول تخصصات الطلاب مربوط بجدول الطلاب

 

insert into stud_major (term_no,std_id,std_maj) values (20201,1,'DBA'); -- ادخال بيانات لجدول التخصصات

 

insert into stud_major (term_no,std_id,std_maj) values (20202,1,'SECURITY'); -- ادخال بيانات لجدول التخصصات

 

insert into stud_major (term_no,std_id,std_maj) values (20191,4,'IT'); -- ادخال بيانات لجدول التخصصات

 

insert into stud_major (term_no,std_id,std_maj) values (20192,4,'IT'); -- ادخال بيانات لجدول التخصصات

 

insert into stud_major (term_no,std_id,std_maj) values (20201,2,'Engineer'); -- ادخال بيانات لجدول التخصصات

 

insert into stud_major (term_no,std_id,std_maj) values (20212,2,'Doctor'); -- ادخال بيانات لجدول التخصصات

 

select s.std_id,s.std_name,m.std_maj from students s, stud_major m

where term_no =(select max(term_no) from stud_major m where s.std_id = m.STD_ID); -- استرجاع رقم الطالب واسم الطالب وتخصصة وماهو اخر تخصص يدرسة في الترم

 

select * from employees where first_name = 'John'; -- استرجاع جميع بيانات الموظفين الذي اسمائهم الاولى جون

 

select * from employees where manager_id  = 108 and department_id = 100 and first_name != 'John'

union all

select * from employees where manager_id  = 100 and department_id = 80 and first_name != 'John'

union all

select * from employees where manager_id  = 123 and department_id = 50 and first_name != 'John'

; -- استرجاع الموظفين الذين مديرهم واداراتهم بنفس مدير وادارات الموظفين الذي اسمهم الاول جون وتسمى مقارنة زوجية

 

select * from employees where (department_id,manager_id) in

(select department_id,manager_id from employees where first_name = 'John') and first_name <> 'John'; -- استرجاع الموظفين الذين مديرهم واداراتهم بنفس مدير وادارات الموظفين الذي اسمهم الاول جون وتسمى مقارنة زوجية

 

select * from employees where department_id in(100,80,50) and manager_id in(108,100,123) and first_name <> 'John';  -- استرجاع الموظفين الذين يعملون بنفس ادارة الموظفين الذي اسمائهم جون ومديرهم بنفس الموظفين الذي اسمائهم جون وتسمى مقارنة غير زوجية

 

select * from employees where department_id in (select department_id from employees where first_name = 'John')

and manager_id in (select manager_id from employees where first_name = 'John') and first_name <> 'John'; -- استرجاع الموظفين الذين يعملون بنفس ادارة الموظفين الذي اسمائهم جون ومديرهم بنفس الموظفين الذي اسمائهم جون وتسمى مقارنة غير زوجية

 

select e.department_id,e.first_name,e.last_name,e.salary,e.hire_date,d.department_name from

employees e , departments d where e.DEPARTMENT_ID = d.department_id; -- استرجاع رقم الادارة واسم الموظف وراتبة وتاريخ توظيفة واسم الادارة من جدول الموظفين والادارات طريقة 1

 

select e.department_id,e.first_name,e.last_name,e.salary,e.hire_date,nvl((select d.department_name

from departments d where e.department_id = d.department_id),'No Dept') department_name from employees e; -- استرجاع رقم الادارة واسم الموظف وراتبة وتاريخ توظيفة واسم الادارة من جدول الموظفين والادارات طريقة 2

 

 

select e.first_name, e.department_id, e.salary from employees e where salary >

(select round(avg(salary)) from employees c where c.department_id = e.department_id) order by department_id; -- استرجاع اسم ورقم وراتب الموظفين ومتوسط الراتب لكل ادارة ومن هو الموظف الذي راتبة اكبر من المتوسط رواتب القسم

 

select e.first_name, e.department_id, salary, (select round(avg(salary)) from employees c where e.department_id = c.department_id) avrg

from employees e where salary > (select round(avg(salary)) from employees c where c.department_id = e.department_id) order by department_id; -- استرجاع اسم ورقم وراتب الموظفين ومتوسط الراتب لكل ادارة ومن هو الموظف الذي راتبة اكبر من المتوسط رواتب القسم

 

select * from employees a where exists (select * from employees b where a.department_id = b.department_id); -- استرجاع جميع البيانات للموظفين الذين ينتمون للادارات طريقة 1

 

select * from employees a where a.department_id in (select department_id from employees b); -- استرجاع جميع البيانات للموظفين الذين ينتمون للادارات طريقة 2

 

select * from employees a where not exists (select * from employees b where a.department_id = b.department_id); -- استرجاع جميع البيانات للموظفين الذين لا ينتمون للادارات طريقة 1

 

select * from employees a where a.department_id not in (select department_id from employees b); -- استرجاع جميع بيانات الموظفين الذين لا ينتمون لاي ادارة وسيظهر الجدول فارغ لان (نوت ان) لا ترجع القية نل (فارغة)

 

select department_name , cnt from departments d,

(select department_id, count(*) cnt from employees group by department_id) de where d.department_id = de.department_id; -- استرجاع اسم الادارة وعدد الموظفين لكل ادارة من جدولي الموظفين والادارة

 

select d.department_name, sum(e.salary) sal from employees e join departments d on (e.DEPARTMENT_ID=d.department_id) group by d.department_name; -- استرجاع مجموع رواتب لكل ادارة

 

create table emps (fname varchar2(20),salary number,status varchar2(20) default 'Active'); -- انشاء جدول بثلاثة حقول ولدى الحق الثالث قيمة افتراضية

 

insert into emps (fname,salary) values ('Mohammed',15232); -- ادخال بيانات للحقلين من الجدول والحقل الثالث بيأخذ القيمة الافتراضية

 

insert into emps (fname,salary,status) values ('Ali',65456,default); -- ادخال بيانات لجميع الحفول مع تحديد المدخل للحقل الثالث بالقيمة الافتراضية

 

insert into emps (fname,salary,status) values ('Ahmed',54241,null); -- ادخال البيانات لجميع الحقول مع تحديد المدخل للحقل الثالث بقيمة فارغة

 

insert into emps (fname,salary) select first_name,salary from employees; -- ادخال جميع اسماء ورواتب من جدول الموظفين

 

select * from emps; -- استرجاع جميع البيانات من الجدول

 

update emps set status = default where fname = 'Ahmed'; -- تعديل بيانات الحقل الثالث بالقيمة الافتراضية للموظف احمد

 

-- قم بإنشاء جدولين لمعلومات الموظف والراتب وجدول معلومات الموظف والمدير وقم بإدخال البيانات من جدول الموظفين للجدولين بإستعلام واحد بنفس الوقت vid 107-108

 

create table sal_info (ids number, fname varchar2(20), salary number); -- انشاء جدول معلومات الموظف والراتب

 

create table man_info (mid number, fname varchar2(20)); -- انشاء جدول معلومات رقم المدير واسم الموظف

 

insert all

into sal_info (ids,fname,salary) values (employee_id,first_name,salary)

into man_info (mid,fname) values (manager_id,first_name)

select employee_id,first_name,salary,manager_id from employees; -- ادخال رقم واسم وراتب الموظف ورقم المدير واسم الموظف للجدولين من دون اي شروط

 

insert all

when salary > 6000 then

into sal_info (ids,fname,salary) values (employee_id,first_name,salary)

when manager_id is not null then

into man_info (mid,fname) values (manager_id,first_name)

select employee_id,first_name,salary,manager_id from employees; -- ادخال رقم واسم وراتب الموظفين الذي رواتبهم اكبر من 6000 وادخال  ارقام المدراء الذين يحملون ارقام ادارات للجدولين وهذه العملية بشروط

 

insert first

when salary > 6000 then

into sal_info (ids,fname,salary) values (employee_id,first_name,salary)

when manager_id is not null then

into man_info (mid,fname) values (manager_id,first_name)

select employee_id,first_name,salary,manager_id from employees; -- ادخال رقم واسم وراتب الموظفين الذي رواتبهم اكبر من 6000 وادخال  ارقام المدراء الذين يحملون ارقام ادارات للجدولين واذا تحقق الشرط الاول لا يتحقق باقي الشروط

 

select * from sal_info; -- استرجاع جميع البيانات من جدول معلومات الراتب

 

select * from man_info; -- استرجاع جميع بيانات من جدول معلومات المدير

 

create table sales (week_id number, sat number, sun number, mon number, tue number, wed number, thu number, fri number); -- انشاء جدول مبيعات الاسبوع

 

insert into sales values (1,542,213,2315,5642,6421,6654,4565); -- ادخال لجميع الحقول لجدول المبيعات

 

select * from sales; -- استرجاع جميع البيانات

 

create table sales_vertical (week_id number,sale number,day varchar2(20)); -- انشاء جدول مبيعات الاسبوع بطريقة منظمة للبيانات

 

insert all

into sales_vertical values (week_id,sat,'sat')

into sales_vertical values (week_id,sun,'sun')

into sales_vertical values (week_id,mon,'mon')

into sales_vertical values (week_id,tue,'tue')

into sales_vertical values (week_id,wed,'wed')

into sales_vertical values (week_id,thu,'thu')

into sales_vertical values (week_id,fri,'fri')

select week_id,sat,sun,mon,tue,wed,thu,fri from sales; -- ادخال جميع البيانات من جدول المبيعات لكل يوم سجل منفصل

 

select * from sales_vertical; -- استرجاع جميع البيانات

 

drop table sales; -- نقل الجدول لسلة المحذوفات

 

select * from recyclebin; -- استرجاع جميع بيانات سلة المحذوفات

 

flashback table sales to before drop; -- استعادة الجدول المبيعات من سلة المحذوفات

 

/*---------------------------------------------------------------------تمارين مهمة-------------------------------------------------------------------------------*/

 

/* With clause vid 96 */

 

insert into (select std_id,std_name from students) values (5,'Mohammed ali'); -- ادحال بيانات لجدول الطلاب عن طريق استعلام

 

insert into (select department_id, department_name from departments where department_id = 10) values (215,'AKA'); -- ادحال بيانات لجدول الاقسام عن طريق استعلام

 

insert into (select department_id, department_name from departments where department_name like 'OREL%' with check option) values (512,'OREL1'); -- ادخال بيانات لجدول الاقسام مع وضع شرط ان يبدأ اسم الجديد بنص معين

 

update (select * from employees where department_id = 20) set salary=salary+salary; -- تعديل راتب الموظفين الذي ينتمون للادارة 20 عن طريق الاستعلام

 

create table emp as select * from employees; -- انشاء جدول من جدول الموظفين

 

select * from emp; -- استرجاع جميع بيانات الموظفين من الجدول الجديد

 

update emp set salary = 0; -- تعديل رواتب الموظفين الى صفر وهذا خطأ فادح

 

insert into (select employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, manager_id, department_id from emp) values

(165,'TEST','TASS','A@A>COM',56423215,sysdate,'DBA',23555,100,90); -- ادخال موظف جديد لجدول الموظفين وراتبة 23555 بعد تصفير رواتب الموظفين

 

update emp set salary = (select e.salary from employees e where e.employee_id = emp.employee_id); -- تعديل رواتب الموظفين بعد تصفيرها من الجدول الاساسي ولكن سيتم التعديل حتى على الموظف الذي لدية راتب فهذا يعتبر خطأ لان البيانات ليست متساوية في الجدولين

 

update emp set salary = (select salary from employees e where e.employee_id = emp.employee_id)

where exists (select 1 from employees e where e.employee_id = emp.employee_id); -- تعديل رواتب الموظفين التي تم تصفيرها من الجدول الاساسي باستثناء الموظفين الذين تم ادخالهم بعد التصفير

 

select * from emp; -- استرجاع جميع بيانات الموظفين من الجدول الجديد

 

delete from emp where exists(select 1 from employees e where e.employee_id = emp.employee_id); -- حذف جميع البيانات من الجدول الجديد بحسب عدد سجلات الجدول القديم

 

/* Managing users ادارة المستخدمين */

 

alter session set container = orelpdb; -- orelpdb تعديل الجلسة والدخول لقاعدة بيانات

 

select * from session_privs; -- استرجاع جميع الصلاحيات التي يملكها المستخدم

 

select * from all_users; -- استرجاع جميع البيانات من جدول المستخدمين لقاعدة البيانات

 

select * from user_tab_privs_recd; -- استرجاع جميع البيانات وماهي الجداول الممنوحة للمستخدم استخدامها

 

select * from user_col_privs_recd; -- استرجاع جميع البيانات وماهي الحفول الممنوحة للمستخدم استخدامها

 

create user demo identified by demo; -- انشاء مستخدم جديد مع كلمة المرور بشكل عادي

 

alter user demo identified by dd; -- demo تعديل كلمة المرور للمستخدم

 

grant create session to demo; -- demo منح صلاحية اتصال لقاعدة البيانات للمستخدم

 

grant unlimited tablespace to demo; -- منح مساحة لانهائية في النطاق للمستخدم

 

grant create table to demo; -- منح صلاحية انشاء جدول للمستخدم

 

grant create view to demo; -- منح صلاحية اشاء عرض للمستخدم

 

grant select on hr.employees to demo; -- hr منح صلاحية استرجاع بيانات من جدول المستخدمين الخاص بالمستخدم

 

grant insert on hr.employees to demo; -- hr منح صلاحية ادخال بيانات لجدول الموظفين الحاص بالمستخدم

 

grant update on hr.employees to demo; -- hr منح صلاحية تعديل بيانات لجدول الموظفين الحاص بالمستخدم

 

grant update (email) on hr.employees to demo; -- hr منح صلاحية تعديل بيانات الراتب فقط من جدول الموظفين الخاص بالمستخدم

 

grant delete on hr.employees to demo; -- hr منح صلاحيةحذف بيانات لجدول الموظفين الحاص بالمستخدم

 

grant select on hr.employees to public; -- منح صلاحية استرجاع بيانات جدول الموظفين الخاص بمستخدم معين لجميع المستخدمين

 

revoke create session, unlimited tablespace, create table, create view from demo; -- demo سحب صلاحية انشاء اتصال والمساحة التخزينة وانشاء جدول وانشاء عرض من المستخدم

 

revoke select, insert, update, delete on hr.employees from demo; -- hr سحب صلاحية استرجاع وادخال وتعديل وحذف من جدول الموظفين الخاص بالمستخدم

 

create role man; -- انشاء قاعدة لوضع داخلها عددت صلاحيات

 

grant create session to man; -- منح صلاحية اتصال للقاعدة

 

grant create table, create view, create any index to man; -- منح صلاحية انشاء جدول انشاء عرض انشاء فهرس للقاعدة

 

grant man to demo; -- demo منح القاعدة بجميع الصلاحيات الموجودة داخلها للمستخدم

 

select * from role_sys_privs where role = 'MAN'; -- استرجاع جميع البيانات والصلاحيات التي بداخل قاعدة محددة

 

drop user demo /* or cascade */; -- حذف المستخدم مع جميع بياناتة

 

rollback; -- لعمل تراجع عن التغييرات او الاضافات الجديدة لجدول قبل استخدام امر الحفظ

 

commit; -- لحفظ التغييرات او الاضافات الجديدة

 

يبحث الزوار عنجميع اوامر sql, تعلم sql من الصفر حتى الاحترافأوامر لغة sql, لغة sql قواعد البيانات pdf, شرح sql بالعربي pdf, تعلم لغة sql

 


التطبيق أمن وبرابط مباشر
شاهد ايضا
هناك تعليق واحد
  • بارك الله فيكم
  • كورسات وكتب مجانية