0% found this document useful (0 votes)
29 views54 pages

Databases in A Nutshell - by Abdelrahman Anwar

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views54 pages

Databases in A Nutshell - by Abdelrahman Anwar

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 54

DATABASES SUMMARY

:‫شوية تعريفات بسيطة‬


• Database:
A well-organized collection of relevant data.

• Database management system (DBMS):


Program used to build, modify & query the database

‫ هي البرامج أو األليات اللى‬DBMS ‫ ال‬،‫ هي مجموعة البيانات نفسها‬Database ‫ال‬


.‫بتخليك تتعامل مع مجموعة البيانات دى‬
‫‪RDBMS:‬‬
‫‪• It’s a type of DBMS based on the relational model.‬‬

‫• نوع من أنواع ال ‪ DBMS‬معمول عشان يتعامل مع ال ‪ ،relational database‬اللى‬


‫هي الداتا اللى فيها حاجات ليها عالقة ببعضها و لما تبص عليها تالقى إن أفضل طريقة‬
‫تتكتب أو تتحفظ بيها هي حفظها في جداول‪ ،‬زى كده مثال‪:‬‬

‫• ال ‪ RDBMS‬هي األساس اللى قايم عليه ال ‪ SQL SERVER ،MY SQL‬و غيرهم‪.‬‬
‫طرق حفظ الداتا‪:‬‬
‫• قولنا ان في داتا شكلها يتحفظ في جداول‪ ،‬دى طريقة من طرق حفظ الداتا و ده اللى بتتبناه‬
‫ال ‪ relational databases‬و ده اللى احنا بندرسه‪.‬‬
‫• الجدول بيبقا عبارة صفوف (‪ )rows‬و أعمده (‪. )columns‬‬
‫‪column‬‬ ‫‪column‬‬ ‫‪column‬‬ ‫‪column‬‬ ‫‪column‬‬

‫‪Id‬‬ ‫‪First_name‬‬ ‫‪Sur_name‬‬ ‫‪Tell‬‬ ‫‪Address‬‬


‫‪row‬‬ ‫‪10‬‬ ‫‪Ali‬‬ ‫‪Saeed‬‬ ‫‪0213511354‬‬ ‫‪12 Dokki St.‬‬
‫‪row‬‬ ‫‪20‬‬ ‫‪Sayed‬‬ ‫‪Mohamed‬‬ ‫‪0294621877‬‬ ‫‪2 Shehab St.‬‬
‫‪row‬‬ ‫‪30‬‬ ‫‪Ahmed‬‬ ‫‪Saleh‬‬ ‫‪0251684198‬‬ ‫‪7 Sudan St.‬‬
‫‪row‬‬ ‫‪40‬‬ ‫‪Fatma‬‬ ‫‪Anas‬‬ ‫‪0218482332‬‬ ‫‪5001 Belal St.‬‬

‫ملحوظة برة المنهج‪ :‬ده مش النوع الوحيد للداتابيز‪ ،‬في أنواع تانية زى ال ‪ 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‬‬ ‫الصفوف‪.‬‬

‫‪Ahmed Yasser‬‬ ‫‪22‬‬ ‫• العالمة دى هي ال ‪.Primary key‬‬


‫‪Fatma‬‬ ‫‪21‬‬ ‫• يعنى لو خدنا الجدول اللى على الشمال ده مثال ممكن نضيف عمود جديد نسميه ‪ id‬و يبقا‬
‫هو ده ال ‪ primary key‬و يميز كل صف عن التانى‪.‬‬

‫‪Name‬‬ ‫‪Age‬‬ ‫‪id‬‬


‫‪Ali‬‬ ‫‪21‬‬ ‫‪10‬‬
‫‪Ahmed Yasser‬‬ ‫‪22‬‬ ‫‪20‬‬
‫‪Ahmed Yasser‬‬ ‫‪22‬‬ ‫‪30‬‬
‫‪Fatma‬‬ ‫‪21‬‬ ‫‪40‬‬
‫‪• Primary key:‬‬
‫‪unique identifier for each row in a table.‬‬
‫من الشروط و األحكام لل ‪:Primary keys‬‬
‫• كل صف له ‪ primary key‬فريد مش متكرر في اى صف تانى‪.‬‬
‫• ماينفعش يكون ‪ Null‬في اى صف‪.‬‬
‫• لو مسحت صف من الجدول‪ ،‬بيتمسح معاه ال ‪ Primary key‬و ماينفعش تستخدمه تانى‪.‬‬
‫• بمجرد ما يتكتب في الجدول ماينفعش يتغير‪.‬‬
‫• تقدر تستخدم أكتر من عامود مع بعض كا ‪ ، PRIMARY KEY‬ساعتها بيبقا اسمهم‬
‫‪.COMPOSITE KEY‬‬

‫ملحوظة برة المنهج‪ :‬ال ‪ Primary Key‬مفهوم مهم و بيفرق جدا في عملية البحث في الجداول الكبيرة ألنه بيتحفظ مع ال ‪ index‬في داتا ستراكشر‬
‫تانية غير الجدول اسمها ‪ b-tree‬بتساعد أكتر في سرعة البحث‪ ،‬فا لو ناوى تتعامل مع الداتابيز مستقبال دور في الموضوع ده‪.‬‬
‫‪Data Types‬‬
‫• كل ‪ field‬أو ‪ Column‬بيبقا له نوع بيانات بيحكم البيانات المسموحة في ال ‪ field‬ده‪.‬‬
‫• من أنواع البيانات اللى عندنا‪:‬‬

‫‪Data Type‬‬ ‫‪Description‬‬


‫)‪Char(n‬‬ ‫كلمة ‪ string‬بعدد حروف (‪ )n‬بمساحة ثابته‬
‫)‪Varchar(n‬‬ ‫كلمة ‪ string‬بعدد حروف (‪ )n‬بس بمساحة مش ثابته‬
‫‪Int‬‬ ‫رقم صحيح‬
‫)‪Float(p‬‬ ‫أرقام عشرية بعدد أرقام (‪ )p‬يتضمن ما قبل و بعد العالمة العشرية‬
‫)‪Decimal(p, s‬‬ ‫أرقام عشرية بعدد أرقام (‪ )p‬يتضمن عدد (‪ )s‬من األرقام بعد العالمة العشرية‬
‫‪Datetime‬‬ ‫تاريخ ‪ +‬وقت‬
‫‪Time‬‬ ‫وقت بس‬
‫أمثلة‪:‬‬
‫‪Data type Declarations‬‬ ‫‪Allowed inputs‬‬ ‫‪Not allowed‬‬
‫)‪Char(10‬‬ ‫’‪‘hello’ | ‘world’ | ‘abcdefghij‬‬ ‫’‪‘abcdefghijk‬‬
‫)‪Varchar(n‬‬ ‫’‪‘hello’ | ‘world’ | ‘abcdefghij‬‬ ‫’‪‘12345678910‬‬
‫‪Int‬‬ ‫‪1 | 4 | 2147483647 | -2147483648‬‬ ‫‪2147483648 | 123.456‬‬
‫)‪Float(6‬‬ ‫‪123.456 | 1234.1 | 0.0123 | 99999‬‬ ‫‪12,345.67 | 1234567 | 123.4567‬‬
‫)‪Decimal(5, 2‬‬ ‫‪123.45 | 123 | 0.01 | -0.02‬‬ ‫‪1234.5 | 1234‬‬
‫‪Datetime‬‬ ‫'‪'2022-04-13 12:34:56‬‬ ‫‪2022-02-31 12:34:56‬‬
‫‪Time‬‬ ‫'‪'12:34:56‬‬ ‫'‪>’838:59:59’ | '12:34:56 PM‬‬

‫ملحوظة‪ :‬ال ‪ 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.

• DML (Data Manipulation Language)


SELECT, INSERT, UPDATE, DELETE.
‫ملحوظات على ال ‪syntax‬‬
‫• جمل ال ‪ sql‬بتبدأ بأوامر زى‪SELECT, INSERT, UPDATE, DELETE,…:‬‬

‫• تقدر تحط في النهاية سيميكولون(;) أو أل براحتك بس األفضل اكتبها تجنبا للمشاكل‪.‬‬

‫• ال ‪ SQL‬مش بيهتم بال ‪ case‬بتاعة الحروف لألوامر يعنى ‪ select‬هي ‪.SELECT‬‬

‫• في برامج بتفرق في ال ‪ case‬بتاعة أسامى العواميد زى ‪.MYSQL‬‬


SQL Operators
:sql ‫ في ال‬operators ‫ أنواع من ال‬3 ‫• عندنا‬

• Arithmetic (+, -, *, /, %);

• Comparison (=, !=, >, <, >=, <=, !<, !>)

• Logical (AND, OR, NOT, ALL, ANY, LIKE, BETWEEN, EXISTS, IN,
IS NULL)

.‫• هانشرحهم منهم حاجات قدام شوية عشان االحسن يتشرحوا بأمثلة‬
‫‪Syntax‬‬

‫;‪• CREATE DATABASE School‬‬


‫• بتنشئ داتابيز اسمها ‪.School‬‬
‫;‪• SHOW DATABASES‬‬
‫• بتعرض كل ال ‪ Databases‬اللى عندك عالجهاز‪.‬‬
‫‪• DROP DATABASE School.‬‬
‫• بتمسح الداتابيز اللى اسمها ‪ School‬بكل ما فيها من جداول‪.‬‬
‫(‪• CREATE TABLE Students‬‬
‫‪id INT PRIMARY KEY,‬‬
‫)‪name VARCHAR(50‬‬
‫;)‬
‫• بتنشئ جدول اسمه ‪ Students‬فيه عمودين واحد اسمه ‪ id‬و نوعه ‪ INT‬و معينه انه‬
‫‪ PRIMARY KEY‬و التانى اسمه ‪ name‬و نوعه )‪.VARCHAR(50‬‬
‫;‪• DESC Students‬‬
‫• بتعرض وصف الجدول زى العواميد ونوعها و الشروط و القيم االفتراضية بتاعتها‪.‬‬
‫;‪• DROP TABLE Students‬‬
‫• بتمسح جدول اسمه ‪.Students‬‬
‫;‪• TRUNCATE TABLE Students‬‬
‫• بتمسح البينات كلها من الجدول بس بتسيبه موجود بحيث تقدر تضيف او تعدل فيه‪.‬‬
• INSERT INTO Students(id, name) VALUES (10, ‘Omar’);

Omar ‫ يساوى‬name ‫ و‬10 ‫ يساوى‬id ‫ صف جديد ب‬Students ‫• بتضيف في جدول ال‬

• INSERT INTO Students(name, id) VALUES (‘momen’, 20);

momen ‫ يساوى‬name ‫ و‬20 ‫ يساوى‬id ‫ صف جديد ب‬Students ‫• بتضيف في جدول ال‬

• INSERT INTO Students(id) VALUES (20);

.‫ و سايب االسم فاضى‬20 ‫ يساوى‬id ‫ صف جديد ب‬Students ‫• بتضيف في جدول ال‬


ALTER (‫)تعديل مواصفات جدول موجود‬
• ALTER TABLE students
ADD COLUMN department VARCHAR(20);
.students ‫ للجدول اللى اسمه‬department ‫• بتضيف عامود اسمه‬
• ALTER TABLE employees
DROP COLUMN department;
.students ‫ من الجدول اللى اسمه‬department ‫• بتشيل عامود اسمه‬
• ALTER TABLE employees
MODIFY COLUMN name VARCHAR(50) NOT NULL;
.NOT NULL ‫ و انه‬VARCHAR(50) ‫ انه نوعه‬name ‫• بتعدل وصف عامود ال‬
.constraints ‫ بس هنشوفها قدام لما نوصل لل‬constraint ‫ لل‬drop ‫• في‬
Select (‫)استخراج الداتا‬
• SELECT name, id FROM Students;

.Students ‫ من الجدول‬id ‫ و عامود ال‬name ‫• بتستخرج عامود ال‬

• SELECT * FROM Students;

.Students ‫• بتستخرج كل الداتا صفوف و عواميد من الجدول‬

• SELECT name FROM Students;

.Students ‫ بس من الجدول‬name ‫• بتستخرج عامود ال‬


id Name Age City Salary
10 Ahmed Ali 20 cairo 1200
20 Ahmed Saeed 30 alex 2000 :employee ‫• هانتخيل ان معانا الجدول ده اسمه‬
30 Samy Ashraf 20 aswan 3000
40 Wael Said 40 cairo 2000 .‫عشان األمثلة اللى جاية تبقا أوضح‬
50 Sara Saeed 45 alex 5000

• SELECT DISTINCT city FROM employee;


city
cairo :city ‫• بتستخرج القيم المختلفة بس من عامود‬
alex
aswan
• SELECT DISTINCT city, salary FROM employee;
City Salary
cairo 1200
:salary ‫ و‬city ‫• بتستخرج المجموعات المختلفة المكونة من عامود‬
alex 2000
aswan 3000
cairo 2000
alex 5000

• SELECT * FROM employee WHERE salary >=3000;

:3000 ‫ أكبر من أو تساوى‬salary ‫• بتستخرج كل العواميد للصفوف اللى فيها ال‬


id Name Age City Salary
30 Samy Ashraf 20 aswan 3000
50 Sara Saeed 45 alex 5000
• SELECT * FROM employee WHERE salary>=3000 AND city=aswan;
:aswan ‫ ب‬city ‫ و ال‬3000 <= salary ‫• بتستخرج كل العواميد للصفوف اللى فيها ال‬
id Name Age City Salary
30 Samy Ashraf 20 aswan 3000

• SELECT * FROM employee WHERE salary>=3000 OR age<25;


:25 > age ‫ أو ال‬salary>=3000 ‫• بتستخرج كل العواميد للصفوف اللى فيها ال‬
id Name Age City Salary
10 Ahmed Ali 20 cairo 1200
30 Samy Ashraf 20 aswan 3000
50 Sara Saeed 45 alex 5000
• SELECT * FROM employee ORDER BY salary;
.salary ‫• بتستخرج كل الداتا من الجدول و يرتبهم تصاعدى حسب ال‬
id Name Age City Salary
10 Ahmed Ali 20 cairo 1200
20 Ahmed Saeed 30 alex 2000
40 Wael Said 40 cairo 2000
30 Samy Ashraf 20 aswan 3000
50 Sara Saeed 45 alex 5000

• SELECT * FROM employee ORDER BY salary DESC ;


.salary ‫• بتستخرج كل الداتا من الجدول و يرتبهم تنازلى حسب ال‬

FROM ‫ و ال‬WHERE ‫ ماينفعش تيجى قبل ال‬ORDER BY ‫ ال‬:‫• ملحوظة‬


‫)استخراج صفوف فيها نمط معين( ‪LIKE‬‬
‫;’‪• SELECT * FROM employee WHERE name LIKE ‘Wael Said‬‬
‫• في الحالة دى ال ‪ LIKE‬بيبقا زيها زى ال = و هاتستخرج الصف اللى فيه االسم ’‪‘Wael Said‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age‬‬ ‫‪City‬‬ ‫‪Salary‬‬ ‫• بس هي مش معمولة عشان كده‪ ,‬هي‬
‫‪40‬‬ ‫‪Wael Said‬‬ ‫‪40‬‬ ‫‪cairo‬‬ ‫‪2000‬‬
‫معمولة عشان تستخرج الصفوف الى‬
‫فيها ‪ pattern‬معين‪.‬‬
‫;’‪• SELECT * FROM employee WHERE name LIKE ‘a%‬‬
‫• بتستخرج الصفوف اللى فيها االسم بيبتدى بحرف ‪ a‬و بعده أي حروف تانية بأى عدد‪:‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age‬‬ ‫‪City‬‬ ‫‪Salary‬‬
‫‪10‬‬ ‫‪Ahmed Ali‬‬ ‫‪20‬‬ ‫‪cairo‬‬ ‫‪1200‬‬
‫‪20‬‬ ‫‪Ahmed Saeed‬‬ ‫‪30‬‬ ‫‪alex‬‬ ‫‪2000‬‬
• SELECT * FROM employee WHERE name LIKE ‘%d’;
:‫ و قبله أي حروف تانية بأى عدد‬d ‫• بتستخرج الصفوف اللى فيها االسم بينتهى بحرف‬
id Name Age City Salary
20 Ahmed Saeed 30 alex 2000
40 Wael Said 40 cairo 2000
50 Sara Saeed 45 alex 5000

• SELECT * FROM employee WHERE name LIKE ‘%S%’;


:‫ و قبله و بعده أي حروف تانية بأى عدد‬S ‫• بتستخرج الصفوف اللى فيها االسم بيحتوى على حرف‬
id Name Age City Salary
20 Ahmed Saeed 30 alex 2000
30 Samy Ashraf 20 aswan 3000
40 Wael Said 40 cairo 2000
50 Sara Saeed 45 alex 5000
‫;’‪• SELECT * FROM employee WHERE city LIKE ‘_a%‬‬
‫• بتستخرج الصفوف اللى فيها ال‪ city‬تانى حرف فيها ‪ a‬و بعده أي حروف تانية بأى عدد‪:‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age‬‬ ‫‪City‬‬ ‫‪Salary‬‬
‫‪10‬‬ ‫‪Ahmed Ali‬‬ ‫‪20‬‬ ‫‪cairo‬‬ ‫‪1200‬‬
‫‪40‬‬ ‫‪Wael Said‬‬ ‫‪40‬‬ ‫‪cairo‬‬ ‫‪2000‬‬

‫;’_‪• SELECT * FROM employee WHERE name LIKE ‘%e‬‬


‫• بتستخرج الصفوف اللى فيها ال ‪ name‬الحرف القبل األخير فيه يساوى ‪.e‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age‬‬ ‫‪City‬‬ ‫‪Salary‬‬
‫‪20‬‬ ‫‪Ahmed Saeed 30‬‬ ‫‪alex‬‬ ‫‪2000‬‬
‫‪50‬‬ ‫‪Sara Saeed‬‬ ‫‪45‬‬ ‫‪alex‬‬ ‫‪5000‬‬

‫ملخص الموضوع انه معاك العالمتين دول (‪ )_ , %‬عشان تمثل بيهم النمط اللى انت عايز تالقيه‪ ،‬العالمة دى ‪ %‬بتمثل أي عدد من الحروف‪ ،‬و دى _‬
‫بتمثل حرف واحد بس‪.‬‬
‫• عندنا كلمة اسمها ‪ Limit‬بتحط حد أقصى للصفوف اللى ترجعلك من ال ‪ SELECT‬زى مثال‪:‬‬
‫;‪• SELECT * FROM employee LIMIT 2‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age City‬‬ ‫‪Salary‬‬ ‫• بترجعلك أول صفين‪:‬‬
‫‪10‬‬ ‫‪Ahmed Ali‬‬ ‫‪20‬‬ ‫‪cairo‬‬ ‫‪1200‬‬
‫‪20‬‬ ‫‪Ahmed Saeed 30‬‬ ‫‪alex‬‬ ‫‪2000‬‬

‫;‪• SELECT * FROM employee WHERE salary>=2000 LIMIT 2‬‬


‫• هنا بيعمل عملية البحث األول و بعدين يعمل ال ‪LIMIT‬‬
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age‬‬ ‫‪City‬‬ ‫‪Salary‬‬
‫‪20‬‬ ‫‪Ahmed Saeed 30‬‬ ‫‪alex‬‬ ‫‪2000‬‬
‫‪30‬‬ ‫‪Samy Ashraf‬‬ ‫‪20‬‬ ‫‪aswan‬‬ ‫‪3000‬‬

‫ملحوظات‪:‬‬
‫‪ -‬بالنسبة ل ‪ :MYSQL‬ال‪ LIMIT‬بتيجى أخر حاجة في الجملة‪.‬‬
‫‪ -‬البرامج التانية غير ‪ MYSQL‬لها كلمات تانية تعمل الوظيفة دى بقوانين تانية‪ ،‬زى كلمة ‪ TOP‬في ‪ SQL SERVER‬و كلمة ‪ ROWNUM‬في ‪ORACLE‬‬
‫‪ -‬الدكتور قال استخدم منهم اللى انت عاوزه في االمتحان‪.‬‬
:LIMIT ‫• مثال اتذكر في المحاضرة إلستخدام ال‬

:LIMIT ‫ في الجدول باستخدام ال‬salary ‫لو عايز اجيب صف أكبر‬

• SELECT * FROM employee ORDER BY salary DESC LIMIT 1;

id Name Age City Salary


50 Sara Saeed 45 alex 5000
‫• عندنا كلمة بتجمع الصفوف مع بعضها على حسب عامود انت تختاره اسمها ‪.GROUP BY‬‬

‫• لو هاتكتبها و عندك في الجملة ‪ WHERE‬أو ‪ ORDER BY‬يبقا هي هاتيجى بعد ال ‪WHERE‬‬


‫و قبل ال ‪.ORDER BY‬‬

‫• عادة بتستخدم مع حاجة اسمها ‪ aggregate function‬عشان تستخرج معلومة إحصائية من‬
‫الجدول زى مثال عدد الصفوف اللى ليهم نفس ال ‪ city‬أو ال‪. salary‬‬

‫• لو استخدمتها من غير ‪ aggregate function‬بتعمل زى ال ‪ DINSTINCT‬و بتجبلك‬


‫الصفوف نسبة لعامود معين بالترتيب بدون تكرار‪.‬‬
‫;‪• SELECT salary, COUNT(salary) FROM employee GROUP BY salary‬‬
‫‪Salary‬‬ ‫)‪COUNT(salary‬‬ ‫• اللى حصل هنا انه‪:‬‬
‫‪1200‬‬ ‫‪1‬‬
‫‪2000‬‬ ‫‪2‬‬
‫‪3000‬‬ ‫‪1‬‬
‫‪5000‬‬ ‫‪1‬‬

‫• أوال جاب القيم المختلفة في عامود ال ‪ 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 ‫اسمها‬

• SELECT salary, SUM(salary) FROM employee GROUP BY salary


HAVING SUM(salary)<=3000;

Salary SUM(salary)
1200 1200
2000 4000
3000 3000
‫‪Constraints:‬‬
‫• هي شروط بتحكم الداتا الى بتدخل الجدول أو العامود بحيث يبقا ليها صفات معينة‪.‬‬
‫• عندنا شروط على مستوى الجدول كله و شروط على مستوى عامود في الجدول‪.‬‬
‫• من الشروط الموجودة في ال ‪ SQL‬و تقدر تحددها للعواميد‪:‬‬

‫‪NOT NULL‬‬ ‫بتحدد ان العمود ماينفعش يبقا فاضى في أي صف‬

‫‪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)
);

ALTER TABLE employees


MODIFY salary DECIMAL(18, 2) DEFAULT 5000; :‫• مثال على التعديل على جدول موجود‬
‫‪ALTER TABLE employees‬‬
‫;‪ALTER COLUMN salary DROP DEFAULT‬‬
‫• مثال على حذف ‪:CONTRAINT‬‬

‫• تقدر تضيف ‪ constraint‬معتمد على كذا عامود‪:‬‬


‫‪• ALTER TABLE employee‬‬
‫;)‪ADD CONSTRAINT UNIQUE(age, salary‬‬
‫هنا بنقول ان ماينفعش يبقا في تكرار في ال ‪ age‬و ال ‪ salary‬مع بعض في نفس الصف‪،‬‬
‫يعنى لو الجدول فيه عامود ال ‪ age‬ب ‪ 20‬و ال‪ salary‬ب ‪ ،2000‬ماينفعش يدخل صف‬
‫تاني فيه نفس القيمتين دول مع بعض في نفس الصف‪.‬‬
‫ اسم عشان تقدر تشيله بعدين بسهولة لو‬constraint ‫• في الحالة دى األحسن انك تدي ال‬
:‫ زى كده‬،‫احتجت تشيله‬

• ALTER TABLE employee ADD CONSTRAINT


myUniqueConstraint UNIQUE(age, salary);

: ‫• لو احتاجت بعدين تمسحه‬

• DROP CONSTRAINT myUniqueConstraint;


‫• التعامل مع باقى ال ‪ CONSTRAINTS‬بيبقا بنفس الطريقة في اإلضافة و المسح‪ ،‬تقدر‬
‫تضيفهم في البداية و انت بتعمل الجدول أو تضيفهم كا تعديل‪.‬‬
‫• أمثلة‪:‬‬
‫;)‪• ALTER TABLE employee ADD PRIMARY KEY(id‬‬
‫• بتعين العمود ‪ id‬انه ‪ ،primary‬كأننا نسينا نعمله في بداية الجدول يعنى**‬
‫;‪• ALTER TABLE employee DROP PRIMARY KEY‬‬
‫• بتلغى انه ‪.PRIMARY KEY‬‬
‫‪• ALTER TABLE employee ADD CONTSTRAINT‬‬
‫;)‪myUniquePK PRIMARY KEY(id, name‬‬
‫• بتعين العمودين ‪ id,name‬انهم مع بعض ‪ ،primary‬و بتدى ال ‪CONTSTRAINT‬‬
‫اسم عشان تقدر تعدله بعد كده أو تشيله بـ‪:‬‬
‫;‪• ALTER TABLE employee DROP myUniquePK‬‬
‫ فا ال‬،‫ بس في جدول تانى‬PK ‫ اللى قولنا انه عبارة عن‬FOREIGN KEY ‫• عندنا برضو‬
.‫ معمول عشان يربط الجداول ببعض‬FOREIGN KEY

CREATE TABLE orders (


:‫• مثال على إضافته في بداية عمل جدول‬
order_id INT PRIMARY KEY,
customer_id INT REFERENCES employee(id)
);

CREATE TABLE orders ( :‫• أو كده‬


order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES employee(id)
);
:‫• لو الجدول أصال معمول و عايز اضيفه كا تعديل‬

• ALTER TABLE orders ADD CONSTRAINT FOREIGN KEY


(customer_id) REFERENCES employee(id);

:‫• و تقدر تديله اسم برضو عادى عشان سهولة التعديل بعد كده‬

• ALTER TABLE orders ADD CONSTRAINT fk_customer_id


FOREIGN KEY (customer_id) REFERENCES employee(id);

:‫• و تقدر تشيله كده‬

• ALTER TABLE orders DROP FOREIGN KEY;


‫• عندنا مفهوم اسمه ‪ Alias‬فكرته انك بتدى اسم تانى مؤقت للجدول أو للعمود في جملة ال‬
‫‪.sql‬‬

‫• بيبقا مفيد لو عندنا جدول إسمه طويل و أسامى العواميد فيه طويلة فا الجملة هاتطول مننا و‬
‫هيبقا صعب قرائتها‪.‬‬

‫• و مفيد في حالة اننا عايزين نعرض اسامى أوضح للعواميد غير االسامى الحقيقية ليها‪.‬‬
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

‫ و احنا‬departments ‫ بال‬emplyees ‫ اللى بيربط ال‬FOREIGN KEY ‫ هو ال‬D_id ‫• و ال‬


:‫عايزين نعرض معلومات من الجدولين في نفس الجدول‬
SELECT employee.id, employee.name, employee.age, department.name
:Alias ‫• من غير ال‬
FROM employee, department
WHERE employee.d_id= department.d_id;

SELECT e.id, e.name, e.age, d.name


FROM employee AS e, department AS d :Alias ‫• بال‬
WHERE e.d_id=d.d_id;
‫‪id‬‬ ‫‪Name‬‬ ‫‪Age name‬‬
‫‪10‬‬ ‫‪Ahmed Ali‬‬ ‫‪20‬‬ ‫‪IT‬‬ ‫• دى هاتبقا النتيجة‪:‬‬
‫‪20‬‬ ‫‪Ahmed Saeed 30‬‬ ‫‪IT‬‬
‫‪30‬‬ ‫‪Samy Ashraf‬‬ ‫‪20‬‬ ‫‪HR‬‬
‫‪40‬‬ ‫‪Wael Said‬‬ ‫‪40‬‬ ‫‪HR‬‬
‫‪50‬‬ ‫‪Sara Saeed‬‬ ‫‪45‬‬ ‫‪SALES‬‬

‫المعلومة دى مش عارف هي موجودة هنا ليه بس ده مكانها في الكتاب فا هكتبها هنا لغاية مايبانلها مكان أحسن‪ ،‬لو ملقيتش هسيب الجملة دى مكانها‪.‬‬
‫• لو حبيت تستخرج من الجدول صف أو الصفوف اللى فيها عامود معين قيمته ‪ 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=10 ‫• لو في كذا صف ب‬

.‫ هاتعدل العامود ده لكل الصفوف في الجدول‬where ‫• لو محطتش‬


Subquery and EXISTS operator
،‫ جوا بعض‬SELECT ‫ أو بمعنى تانى جملتين‬query ‫ جوا‬query ‫• عندنا إمكانية إننا نعمل‬
.‫ للجملة الخارجية‬INPUT ‫الجملة الداخلية بتمثل‬
:‫• شكلها بيبقا عامل كده‬
• SELECT * FROM customers WHERE EXISTS (
SELECT * FROM orders
WHERE orders.customer_id = customers.id
AND orders.item=‘T-SHIRT’
);
SUBQUERY

. OUTER QUERY‫ بتتنفذ قبل ال‬SUBQUERY ‫• ال‬


.‫ وظيفته انه بيعرض البيانات اللى انت بتطلبها لو موجودة في جدول تانى‬EXISTS ‫• ال‬
CUSTOMERS ORDERS
Id Name Id Customer_id item :‫• لو معانا الجدولين دول‬
1 John 1 1 T-SHIRT
2 Sara 2 1 JEANS
.‫• و طبقنا عليهم الكويرى اللى فاتت‬
3 Michael 3 2 T-SHIRT
4 Samantha 4 3 HOODIE
5 3 HAT

Id Customer_id item
1 1 T-SHIRT
:‫ هترد بـ‬subquery ‫• ال‬
3 2 T-SHIRT

‫ بتاعه موجود في رد ال‬id ‫ ال‬customers ‫ هتشوف مين من ال‬outerquery ‫• ال‬


Id Name :‫ و ترجعه كا نتيجة على حسب الصفوف اللى اخترناها‬subquery
1 John
2 Sara
‫)دمج نتائج من جدولين بينهم عامود مشترك( ‪JOINS‬‬
‫• ال ‪ 4 JOIN‬أنواع ‪:‬‬
‫‪• INNER JOIN:‬‬
‫بيرجعلك البيانات المشتركة بين الجدولين بس‪ ،‬أي بيانات تانية مش بيرجعها‪.‬‬ ‫•‬
‫‪• LEFT JOIN:‬‬
‫بيرجعلك البيانات المشتركة بين الجدولين ‪ +‬كل الصفوف من الجدول األوالنى‪.‬‬ ‫•‬
‫‪• RIGHT JOIN:‬‬
‫بيرجعلك البيانات المشتركة بين الجدولين ‪ +‬كل الصفوف من الجدول التانى‪.‬‬ ‫•‬
‫‪• FULL JOIN:‬‬
‫بيرجعلك البيانات المشتركة بين الجدولين ‪ +‬كل الصفوف من الجدولين‪.‬‬ ‫•‬
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 null
:INNER JOIN ‫• لو عايزين نعمل ال‬
• SELECT e.name, e.Age, e.salary, d.name
FROM employees AS e ‫الجدول األول‬
INNER JOIN departments AS d ‫الجدول الثاني‬
ON e.D_id=d.D_id; ‫العامود المشترك‬

Name Age Salary name


Ahmed Ali 20 1200 IT
Ahmed Saeed 30 2000 IT
Samy Ashraf 20 3000 HR
Wael Said 40 2000 HR
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 null
:LEFT JOIN ‫• لو عايزين نعمل ال‬
• SELECT e.name, e.Age, e.salary, d.name
FROM employees AS e
LEFT JOIN departments AS d
ON e.D_id=d.D_id; Name Age Salary name
Ahmed Ali 20 1200 IT
Ahmed Saeed 30 2000 IT
Samy Ashraf 20 3000 HR
Wael Said 40 2000 HR
Sara Saeed 45 5000
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 null
:RIGHT JOIN ‫• لو عايزين نعمل ال‬
• SELECT e.name, e.Age, e.salary, d.name
FROM employees AS e
RIGHT JOIN departments AS d
ON e.D_id=d.D_id;
Name Age Salary name
Ahmed Ali 20 1200 IT
Ahmed Saeed 30 2000 IT
Samy Ashraf 20 3000 HR
Wael Said 40 2000 HR
SALES
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 null
:FULL JOIN ‫• لو عايزين نعمل ال‬
• SELECT e.name, e.Age, e.salary, d.nameName Age Salary name
FROM employees AS e Ahmed Ali 20 1200 IT
FULL JOIN departments AS d Ahmed Saeed 30 2000 IT
ON e.D_id=d.D_id; Samy Ashraf 20 3000 HR
Wael Said 40 2000 HR
Sara Saeed 45 5000
SALES

OPERATOR ‫ و بينهم‬RIGH ‫ و ال‬LEFT ‫ بس نقدر نعمل وظيفتها عن طريق الجمع بين ال‬،MYSQL ‫ مش موجوده في‬FULL JOIN ‫ ال‬:‫ملحوظة‬
.‫ هنشوفه قدام‬UNION ‫اسمه‬
‫‪UNION‬‬

‫• هو ‪ OPERATOR‬بنستخدمه لما نكون عاوزين نجمع بين نتجيتين جملتين ‪.SELECT‬‬

‫• شرط ان الجملتين نتيجتهم يبقا ليها نفس عدد العواميد بنفس أنواع الداتا بنفس الترتيب‪.‬‬

‫• ال ‪ UNION‬بيجيب بس العواميد الغير متكررة‪ ،‬لو عايزين نجيب العواميد المتكررة‬


‫بنستخدم ‪.UNION ALL‬‬

‫• أسامى العواميد في النتيجة النهائية بتساوى أسامى العواميد في جملة ال ‪ SELECT‬األولى‪.‬‬


Employees_norway Employees_usa
id Name id E_Name
: ‫• لو معانا الجدولين دول‬
1 Ola Hansen 1 Sally turner
2 Tove svendson 2 Clark kent
3 Stephen svendson 3 Stephen svendson
4 Kary pettersen 4 Stephen scott

:‫ بدون تكرار‬SELECT ‫• و عايزين نجيب أسماء العاملين من الجدولين في جملتين‬


• SELECT Name FROM Employees_norway
Name
UNION Ola Hansen
SELECT E_Name FROM Employees_ usa; Tove svendson
Stephen svendson
Kari pettersen
Sally turner
Clark kent
UNION ‫ بدل‬UNION ALL ‫لو عايز اسمح بالتكرار هكتب‬ Stephen scott
‫الترتيب الصح لألوامر كلها‬
SELECT *
FROM table1
JOIN table2 ON table1.column = table2.column
WHERE table1.column = 'value'
GROUP BY table1.column
HAVING COUNT(*) > 1
ORDER BY table1.column DESC
LIMIT 10;

You might also like