Lab 1
Lab 1
اقسام الSQL
SQL
DDL DCL
DML
1
Data Definition Language (DDL):
ـ CREAT
ـ DESC
ـ ALTER
ـ RENAME
ـ DROP
ـ TRANCATE
;)CREATE TABLE ga (no NUMBER(10), name VARCHAR2(20),bd DATE
no name bd
:CREATEامر انشاء
:TABLEمعناها االمر السابق جان لتيبل
:gaاسم التيبل
: noاسم احد الجداول
) :NUMBER(4النوع البياني للجدول الي هو رقم وممكن خزن 4ارقام يعني اكبر رقم يخزنه 9999
:nameاسم عمود
) :VARCHAR2(20نوع بياني يقبل 20كاركتر
:bdاسم عمود
:DATEنوع بياني يخزن تواريخ
;DESC ga
:DESCامر طلب وصف
:gaاسم الجدول
2
;))ALTER TABLE ga ADD(age NUMBER(3
no name Bd age
:ALTERامر تعديل
:TABLEجدول
:gaاسم الجدول
:ADDامر اضافة
:ageاسم العمود الراغب باضافته
) :NUMBER(3النوع البياني للعمود واكبر رقم يخزنه هو 999
:ALTERامر تعديل
:TABLEجدول
:gaاسم الجدول
:MODIFYامر تعديل
:ageاسم العمود الراغب بتعديله
) :NUMBER(3النوع البياني الجديد للعمود واكبر رقم يخزنه هو 999
3
;)ALTER TABLE ga DROP(age
no name bd
:ALTERامر تعديل
:TABLEجدول
:gaاسم الجدول
:DROPامر حذف
:ageاسم العمود المراد حذفه
;RENAME ga TO gc
:RENAMEامر اعادة تسمية جدول
:gaاسم الجدول المراد اعادة تسميته
:TOكلمة محجوزة هنا تشير لالسم الجديد
:gcاالسم الجديد
2 ali
5
;SELECT * FROM gc
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gcاسم الجدول الراح نعرض منه
2 ali
no name
1 ahmed
2 ali
6
;UPDATE gc SET name=’ahmed’ , no=1
:UPDATEامر تحديث بيانات الجدول
:Gcاسم الجدول
:SETكلمة محجوزة تشير لالعمدة الراح نحدث بياناتهن
:nameاسم العمود االول
’ :‘ahmedالقيمة النريدها تصير بهذا العمود
:noاسم العمود الثاني
:1القيمة النريدها تصير بهذا العمود
1 ahmed
7
;CREATE TABLE gb AS SELECT * FROM gc
:CREATEامر انشاء
:TABLEمعناها االمر السابق جان لتيبل
:gbاسم التيبل
:ASكلمة محجوزة هنا دتكول اصنعلي جدول نسخة عن ....
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gcاسم الجدول الراح ننسخ بياناته للgb
SELECT
no+5
8
;SELECT 5+5 FROM DUAL
:SELECTامر عرض
:5+5الشي الي نريد نعرضه
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
: Dualجدول تخلقه اللغة يستخدم لالستعالم عن ايشي ما موجود باي جدول مثل عملية الجمع اعاله
5+5
10
SYSDATE
23-NOV-23
9
no
no
no
10
;SELECT no||’ ‘||name from gb
:SELECTامر عرض
:noالعمود النريد نعرض قيمه
||:معامل الدمج اليدمج عمودين او عمود ونص او عمود ورقم
:nameالعمود النريد نعرضه وي العمود no
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
no||’ ‘||name
name
Relational Operators
< اقل من
> اكبر من
=< اقل او يساوي
=> اكبر او يساوي
<> او =! ال يساوي
= يساوي
11
Logical Operators
AND اذا الشرطين تحققن ترجع
ترو
OR يكفي انو احد الشرطين
يتحقق حتى ترجع ترو
ترجع عكس الشي اليجي
NOT بعدها يعني اذا ترو تطي
فولس والعكس
12
;SELECT * FROM gb WHERE no IS NULL
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
:WHEREاداة شرط
:noاسم الجدول النريد نطلع االرقام منه
:IS NULLكلمة محجوزة تطلع االندكسات الفارغة
;’SELECT * FROM gb WHERE name LIKE ‘A%
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
:WHEREاداة شرط
:nameاسم الجدول النريد نطلع االرقام منه
’ :Like ‘A%كلمة محجوزة تطلع العناصر من الجدول الحددناه اليبدن بA
;’_SELECT * FROM gb WHERE name LIKE ‘A
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
:WHEREاداة شرط
:nameاسم الجدول النريد نطلع العناصر منه
13
’_ :Like ‘Aكلمة محجوزة تطلع العناصر من الجدول الحددناه اليبدن ب Aووراه اكو حرف واحد
;SELECT * FROM gb ORDER BY no DESC
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
:ORDER BYكلمة محجوزة تستخدم لترتيب العناصر
:noاسم الجدول النريد نطلع العناصر منه
:DESCكلمة محجوزة ترتب تنازليا
;SELECT * FROM gb ORDER BY no ASC
:SELECTامر عرض
* :كلشي
:FROMكلمة محجوزة تشير للجدول الراح نعرض منه
:gbاسم الجدول الراح نعرض منه
:ORDER BYكلمة محجوزة تستخدم لترتيب العناصر
:noاسم الجدول النريد نطلع العناصر منه
:ASCكلمة محجوزة ترتب تنازلي
Functions
عدة صفوف
عدة صفوف عدة صفوف
14
الصيغة العامة };{Select FunctionName from TableName
Date functions:
)’ :Months_between(‘1/dec/2003’,’1/dec/2004يطلع عدد االشهر بين التاريخين التدخلهم فهنا
الناتج راح يكون -12اما اذا جنت مدخلهن بالعكس راح يطلع الناتج 12
) :Add_months(‘1/dec/2003’,12ينطيك التاريخ بعد اضافة االشهر الحددتهن انت يعني هنا الناتج
راح يكون 1/dec/2005
)’ :Last_day(‘1/dec/2003تطلع اخر يوم بالشهر الحددته يعني هنا الناتج راح يكون 31/dec/2003
) :Next_day(‘1/dec/2003’,2تطلعلك يوم االسبوع الجاي االنت حددته مثال هنا كلنا يا يوم اثنين يجي
بعد 1/dec/2003فراح يكون الناتج هنا 8/dec/2003وااليام تكون =1االحد =2االثنين =3الثالثاء
=4االربعاء =5الخميس =6الجمعة =7السبت
)’ :Round(to_Date(‘1/dec/2003’),’yearيقرب التاريخ التدخله حسب الشي التدخله بالخانة الثانية
يعني هنا الناتج راح يكون 1/dec/2004
15
)’ :Trunk(to_Date(‘1/dec/2003’),’yearهنا راح يلغي كل االشهر ويرجع السنة الول يوم بيها ولو
حطينا كلمة ’ ‘monthبدل كلمة ’ ‘yearراح يرجع بس االيام الول يوم وماله عالقة باالشهر والسنين
String functions:
)’ :Initcap(‘hiتحول اول حروف داخل السترنج الى حرف كبير يعني هنا راح يكون الناتج Hi
)’ :Concat(‘hi’,’hhتضيف السترنج الثاني عاالول يعني هنا الناتج راح يكون hihh
)’ :Lower(‘Hmaتحول كل الحروف الى حروف صغيرة يعني هنا الناتج راح يكون hma
)’ :Upper(‘hmaتحول كل الحروف الى حروف كبيرة يعني هنا الناتج راح يكون HMA
)’ :Length(‘hmaترجع طول السترنج يعني هنا الناتج راح يكون 3
)’ :Replace(‘hi its me’,’me’,’hmaتبدل المقطع الموجود بالخانة الثانية بالمقطع الموجود بالخانة الثالثة
من السترنج بالخانة االولى فيكون الناتج hi its hma
)’ :Ltrim(‘xyxhma’,’xyتحذف الحروف الي نخليهن بالخانة الثانية من الجهة اليسار للخانة االولى فيكون
الناتج hma
)’ :Rtrim(‘hmaxyx’,’xyتحذف الحروف النخليهم بالخانة الثانية من الجهة اليمين للخانة االولى فيكون
الناتج hma
) :Substr(‘string’,3,3ترجع جزأ من السترنج التدزه بالخانة االولى يبدي من الموقع التدزه بالخانة الثانية
ويستمر لعدد الحروف التدزه بالخانة الثالثة فهنا راح يرجع الناتج rin
)’ :To_number(‘5تحول السترنج الى رقم بس شرط يكون هو رقم يعني مو حرف او رمز او شي
)’ :To_Date(‘1/dec/2003تحول السترنج الى تاريخ بس شرط يكون هو تاريخ مو كلمة او رقم او شي
)’ :To_char(‘1/dec/2003’,’dd/mm/yyyyتحول السترنج الى كاركتر هنا تكدر تتحكم بنمط عرضه
مثال هنا راح يطلع الناتج 1/12/2003
)’:To_char(1.23,’0.9تحول الرقم الى النمط التدزه الها بعدها فراح يكون الناتج 1.2
16
) :Count(degترجع عدد البيانات داخل العمود التدخله الها
)’ :NVL(deg,’failيبدل ال nullبالقمية الندخلها بالخانة الثانية
)’ :Decode(gender,’m’,’mail’,f,’female’,’errorيبدل القيم من العامود الندخله حسب القيم الدخلناهن
بعده واذا ضفنا قيمة باالخير فاي قيمة عدا القمي الدخلناهن بالبداية راح ينحط بمكانها هالقيمة
;Select count(deg) from TableName having deg>=50 GROUP BY gender
:Select count(deg) from TableNameامر عرض عدد االصفوف بالعمود deg
:having deg>=50هذا شرط يكول عد الصفوف بس للصفوف القيمتها اكبر من 50
:GROUP BY genderهاي اداة تجزيء راح تقسم العمود لجزأين حسب العمود التمرره الها وهنا مررنا
العمود genderفراح تجزأهم حسب جنسهم وتنطيك تعداد الصفوف لكل جنس
Male Female
90 90
80 80
70
60
count(deg) from
4
2
17
Join
وهو استرجاع بيانات الكثر من جدول
انواع له4 وتوجد
Students Stages
4 Fourth stage
18
non equal joinال
Select employ.name, employ.salary , details.stage from employ, details
where employ.salary between details.highest AND details.lowest ;
Self joinال
الي هو حرفيا ارتباط الجدول بنفسه
Self
id name Manger_id
1 Wesam
2 Sura 1
3 sara 2
Select e.name employ , m.name manger from self e, self m where m.no =
e.no_manger ;
employ manger
sura wesam
sara sura
امر تحديد عادي بس ضفنا اسم الجدول قبل اسم:Select e.name employ , m.name manger
العمود حتى ال يصير اشتباه
هنا انطينا لكل جدول اسم مستعار نكدر نستخدمه داخل هذا االستعالم:from self e, self m
شرط عادي:where m.no = e.no_manger ;
الي هوouter join ) على يمين او يسار اليساوي باالستعالم وكتها راح يكون+( في حال ضفت
equal المفروض يضهرلك كل الحاالت حتى الما مشتركة حسب الجهة التحط العالمة بيها على عكس ال
الي يضهر بس الحاالت المشتركةjoin
19
Select e.name employ , m.name manger from self e, self m where m.no)+( =
e.no_manger ;
employ manger
sura wesam
sara sura
wesam
او
Select e.name employ , m.name manger from self e, self m where m.no =
e.no_manger)+( ;
employ manger
sura wesam
sara sura
sara
Sub Query
اكتب استعالم يعرض رواتب الموظفين الذين يستلمون راتب اكبر من راتب الموظف علي؟
SELECT salary FROM company WHERE sal>(SELECT sal FROM company WEHRE
name=”ali”);
اعرض درجات الطالب التي تكون مساوية الكبر درجة؟
SELECT degrees FROM students WHERE degrees=(SELECT MAX(degrees) FROM
students);
قم بعرض ارقام االدارات واقل راتب ياخذه الموظف فيها بحيث يكون اقل راتب فيها اكبر من اقل راتب في
؟20 االدارة رقم
SELECT dep_num, MIN(salary) FROM departments HAVING MIN(salary) >( SELECT MIN(salary) FROM
departments WHERE dep_num=20) GROUP BY dep_num;
20
اعرض اسماء ووظائف الموظفين الذين يعملون نفس وظيفة الموظف رقم 70ويأخذون مرتب اكبر من
مرتب الموظف رقم 90؟
SELECT names,jobs FROM employ WHERE jobs=( SELECT jobs FROM employ
WHERE emp_id=70) AND salary>( SELECT salary FROM employ WHERE
;)emp_id=90
االستعالمات التي ترجع اكثر من قيمة
:ALLالزم كل القيم تحقق الشرط
:ANYالزم وحدة من القيم على االقل تحقق الشرط
:INالزم وحدة من القيم على االقل تحقق التساوي
قم بعرض اسماء ورواتب وارقام ادارات الموظفين الذين يأخذون رواتب مساوية القل راتب لكل ادارة؟
)SELECT name,salary,no_mange FROM hma WHERE salary IN(SELECT min(salary
;)from hma group by no_mange
قم بعرض ارقام واسماء ووظائف ورواتب الموظفين الذين يأخذون رواتب اقل من راتب الموظفين
المحاسبين ؟
SELECT no, name, job, salary FROM company WHERE salary<ALL(SELECT salary
;)’FROM company WHERE job=’accouter
21