Databases in A Nutshell - by Abdelrahman Anwar
Databases in A Nutshell - by Abdelrahman Anwar
• ال RDBMSهي األساس اللى قايم عليه ال SQL SERVER ،MY SQLو غيرهم.
طرق حفظ الداتا:
• قولنا ان في داتا شكلها يتحفظ في جداول ،دى طريقة من طرق حفظ الداتا و ده اللى بتتبناه
ال relational databasesو ده اللى احنا بندرسه.
• الجدول بيبقا عبارة صفوف ( )rowsو أعمده (. )columns
column column column column column
ملحوظة برة المنهج :ده مش النوع الوحيد للداتابيز ،في أنواع تانية زى ال Graph database ،document-oriented databasesو
غيرهم و بيتم استخدامهم في برامج و مشاريع كتير الفترة دى و استخدامهم بيزيد مع الوقت فا حاول تاخد فكرة عنهم.
عشان لو اتطلبوا منناcolumn والrow تعريف لل
• Row:
One record of data.
or, a collection of different columns to describe information.
• Column:
One field in a table.
or, collection of different rows that have the same data type.
لو عندك جدول ممكن يظهر فيه بيانات متكررة زى مثال جدول فيه االسم و السن
لمجموعة أشخاص ،و حصل عندك تشابه فى االسم و السن لكذا شخص،
هاتفرقهم عن بعض إزاى؟
Name Age
• عن طريق انك تدى كل ريكورد أو صف عندك رقم أو عالمة مميزة تميزه عن باقى
Ali 21
Ahmed Yasser 22 الصفوف.
ملحوظة برة المنهج :ال Primary Keyمفهوم مهم و بيفرق جدا في عملية البحث في الجداول الكبيرة ألنه بيتحفظ مع ال indexفي داتا ستراكشر
تانية غير الجدول اسمها b-treeبتساعد أكتر في سرعة البحث ،فا لو ناوى تتعامل مع الداتابيز مستقبال دور في الموضوع ده.
Data Types
• كل fieldأو Columnبيبقا له نوع بيانات بيحكم البيانات المسموحة في ال fieldده.
• من أنواع البيانات اللى عندنا:
ملحوظة :ال not allowedمش معناها انه دايما هيرفض القيمة و يطلع إيرور ،ال هو هياخدها و يعدل عليها عشان تناسب نوع الداتا بتاع
العمود أو ما يتناسب مع البرنامج نفسه و ده هيسببلك مشاكل ألنك هاتبقا فاكر ان انت دخلت داتا معينة و فعليا اللى اتكتب حاجة تانية.
توضيح:
الفرق بين ) char(nو ):varchar(n
• ال ) char(nدايما بياخد مساحة تقدر تشيل عدد الحروف nحتى لو دخلتله حاجة أقصر
هيكملها بمسافة و ده هيستهلك ميمورى زيادة.
• ال ) varchar(nبياخد ميمورى بحجم يشيل عدد الحروف اللى انت بتديهاله فقط بحد
أقصى عدد nمن الحروف فا بيوفر ميمورى و ده األحسن انك تستخدمه.
SQL(Structured Query Language)
• Computer language for storing, manipulating & retrieving
data stored in a database.
: األوامر األساسية متقسمة لمجاميع بناء على طبيعتهم،• لغة فيها أوامر للتعامل مع الداتابيز
• DDL (Data Definition Language)
CREATE – ALTER – DROP.
• Logical (AND, OR, NOT, ALL, ANY, LIKE, BETWEEN, EXISTS, IN,
IS NULL)
.• هانشرحهم منهم حاجات قدام شوية عشان االحسن يتشرحوا بأمثلة
Syntax
ملخص الموضوع انه معاك العالمتين دول ( )_ , %عشان تمثل بيهم النمط اللى انت عايز تالقيه ،العالمة دى %بتمثل أي عدد من الحروف ،و دى _
بتمثل حرف واحد بس.
• عندنا كلمة اسمها Limitبتحط حد أقصى للصفوف اللى ترجعلك من ال SELECTزى مثال:
;• SELECT * FROM employee LIMIT 2
id Name Age City Salary • بترجعلك أول صفين:
10 Ahmed Ali 20 cairo 1200
20 Ahmed Saeed 30 alex 2000
ملحوظات:
-بالنسبة ل :MYSQLال LIMITبتيجى أخر حاجة في الجملة.
-البرامج التانية غير MYSQLلها كلمات تانية تعمل الوظيفة دى بقوانين تانية ،زى كلمة TOPفي SQL SERVERو كلمة ROWNUMفي ORACLE
-الدكتور قال استخدم منهم اللى انت عاوزه في االمتحان.
:LIMIT • مثال اتذكر في المحاضرة إلستخدام ال
• عادة بتستخدم مع حاجة اسمها aggregate functionعشان تستخرج معلومة إحصائية من
الجدول زى مثال عدد الصفوف اللى ليهم نفس ال cityأو ال. salary
• أوال جاب القيم المختلفة في عامود ال salaryو رتبهم من الصغير للكبير ألننا مختارين التجميع
على أساس ال .salary
• ثانيا أضاف عامود جديد اسمه ) COUNT(salaryفيه عدد الصفوف اللى متكرر فيها كل
.salary
• SELECT salary, SUM(salary) FROM employee GROUP BY salary;
Salary SUM(salary)
1200 1200
2000 4000
3000 3000
5000 5000
.sum لaggregate function • نفس الفكرة بس غيرنا ال
.SUM(salary) جمعها مع بعضها كا أرقام في عامود سماهsalary • الصفوف اللى فيها نفس ال
هاتستخدم كلمة تانية،WHERE ماينفعش تستخدمGROUP BY • لو عايز تفلتر النتائج بعد ال
:HAVING اسمها
Salary SUM(salary)
1200 1200
2000 4000
3000 3000
Constraints:
• هي شروط بتحكم الداتا الى بتدخل الجدول أو العامود بحيث يبقا ليها صفات معينة.
• عندنا شروط على مستوى الجدول كله و شروط على مستوى عامود في الجدول.
• من الشروط الموجودة في ال SQLو تقدر تحددها للعواميد:
DEFAULT بتعمل قيمة افتراضية للعمود في حالة لو حد عمل صف جديد و ساب العامود فاضى
UNIQUE بتحدد انه ماينفعش يبقا فيه قيم متكررة للعمود ده
PRIMARY KEY بتحدد انه ماينفعش يبقا فيه قيم متكررة للعمود ده +انه هو المعرف للصفوف
FOREIGN KEY بتحدد انه العامود ده بيمثل primary keyفي جدول تانى فا التعامل معاه يبقا بحذر
CHECK بتعمل اختبار على القيمة اللى داخلة انها بتوافق شرط معين زى انها تبقا اكبر من كذا
في البداية و انت بتعمل الجدول أو أو تضيفه كا تعديلConstraint • تقدر تضيف ال
.ALTER باستخدام
CREATE TABLE employees (
id INT PRIMARY KEY, :• مثال فى بداية عمل الجدول
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 18),
salary INT,
phone VARCHAR(11) UNIQUE,
department_id INT,
FOREIGN KEY (department_id)
REFERENCES departments(id)
);
:• و تقدر تديله اسم برضو عادى عشان سهولة التعديل بعد كده
• بيبقا مفيد لو عندنا جدول إسمه طويل و أسامى العواميد فيه طويلة فا الجملة هاتطول مننا و
هيبقا صعب قرائتها.
• و مفيد في حالة اننا عايزين نعرض اسامى أوضح للعواميد غير االسامى الحقيقية ليها.
id Name Age City Salary
10 Ahmed Ali 20 cairo 1200
: للعامودalias • مثال على ال
20 Ahmed Saeed 30 alex 2000 : بتاعناemployees • لو معانا جدول ال
30 Samy Ashraf 20 aswan 3000
40 Wael Said 40 cairo 2000
50 Sara Saeed 45 alex 5000
في النتيجة و يبقا اسمه حاجةid بس نغير اسم الname و الid • و عايزين نعرض ال
:employee_id تانية و ليكن
• SELECT id AS employee_id, name FROM employees;
employee_id Name
10 Ahmed Ali و حط الكلمة اللى احنا اديناهالهid • كل الى حصل انه شال كلمة
20 Ahmed Saeed
30 Samy Ashraf
40 Wael Said
50 Sara Saeed
employees
departments :• لو معانا الجدولين دول
id Name Age City Salary D_id
D_id Name
10 Ahmed Ali 20 cairo 1200 1
1 IT
20 Ahmed Saeed 30 alex 2000 1
2 HR
30 Samy Ashraf 20 aswan 3000 2
3 SALES
40 Wael Said 40 cairo 2000 2
50 Sara Saeed 45 alex 5000 3
المعلومة دى مش عارف هي موجودة هنا ليه بس ده مكانها في الكتاب فا هكتبها هنا لغاية مايبانلها مكان أحسن ،لو ملقيتش هسيب الجملة دى مكانها.
• لو حبيت تستخرج من الجدول صف أو الصفوف اللى فيها عامود معين قيمته NULLماينفعش تستخدمها في جملة ال WHEREو تقوم قايل
حاجة زى كده في الشرط:
WHERE salary != NULLأو ;• WHERE salary = NULL
• عشان تعمل كده محتاج تستخدم ISمكان = و IS NOTو مكان =!
WHERE salary IS NOT NULLأو ;• WHERE salary IS NULL
UPDATE()تعديل الصف او الصفوف
id Name Age City Salary D_id
10 Hazem 22 cairo 1200 1
• UPDATE employee
20 Ahmed Saeed 30 alex 2000 1
SET name=‘Hazem’, age = 22 30 Samy Ashraf 20 aswan 3000 2
40 Wael Said 40 cairo 2000 2
WHERE id=10; 50 Sara Saeed 45 alex 5000 3
.22 بage و الHazem بname و يعدل فيه الid=10 • هيجيب الصف اللى فيه ال
Id Customer_id item
1 1 T-SHIRT
: هترد بـsubquery • ال
3 2 T-SHIRT
OPERATOR و بينهمRIGH و الLEFT بس نقدر نعمل وظيفتها عن طريق الجمع بين ال،MYSQL مش موجوده فيFULL JOIN ال:ملحوظة
. هنشوفه قدامUNION اسمه
UNION
• شرط ان الجملتين نتيجتهم يبقا ليها نفس عدد العواميد بنفس أنواع الداتا بنفس الترتيب.