# نظام معالجة البيانات/لغة الإستفسار SQL

لغة الإستفسار SQL هي اختصار لـ Structured Query Language والتي تعني “لغة الاستعلامات البنيوية” وهي هي لغة معيارية للوصول والتعديل على قواعد البيانات. تحتوي قاعدة البيانات في معظم الأحيان على جدول واحد أو أكثر . يتم تعريف كل جدول باسم ، على سبيل المثال : “الزبائن” ، “الطلبات” .. تحتوي الجداول على تسجيلات (صفوف) يتم بها الاحتفاظ بالبيانات. وهي لغة خاصة بقواعد البينات من أجل الاستعلام وتعديل قواعد البينات العلائقية، وتم اعتبارها لغة قياسية من قبل ANSI عام 1980 وتستخدم من أجل الوصول وتمثبل نضم قواعد البينات، وستخدم من استرجاع وتعديل وادخال البينات في قواعد البينات , ويمكن استخدامها مع العديد من برامج قواعد البينات ,مثل:
MS Access,Oracle,SQL Server و MySQL, PostgreSQL

## مزايا SQL

* يمكن لـ SQL تنفيذ أوامر لقاعدة بيانات .
* يمكن لـ SQL استخراج بيانات من قاعدة بيانات محددة .
* يمكن لـ SQL إدخال تسجيلات لقاعدة بيانات .
* يمكن لـ SQL تحديث تسجيلات في قاعدة بيانات.
* يمكن لـ SQL حذف تسجيلات من قاعدة بيانات .
* يمكن لـ SQL إنشاء قواعد بيانات جديدة .
* يمكن لـ SQL إنشاء جداول جديدة في قواعد بيانات .
* يمكن لـ SQL إنشاء تعليمات مخزنة في قاعدة بيانات .
* يمكن لـ SQL إنشاء عروض في قاعدة بيانات .
* يمكن لـ SQL ضبط الصلاحيات للجدوال ، التعليمات والعروض .

## تصريحات SQL

نقصد هنا بـ “تصريحات” أسطر الأوامر لـ sql أي الجملة المؤلفة لأوامر sql .
معظم الأمور التي تحتاج القيام بها في قواعد البيانات يمكن تأديتها بواسطة تصريحات (أوامر) SQL
يختار تصريح SQL التالي جميع التسجيلات في جدول الزبائن "customers":
تذكر أن SQL ليست حساسة للأحرف الكبيرة . فـ select هي نفس SELECT بالنسبة لـ SQL.

### تصريح SELECT

يستخدم تصريح SELECT لتحديد بيانات في قاعدة البيانات. تُخزن النتائج في جدول للنتائج يدعى مجموعة النتائج result-set

### تصريح INSERT INTO

يستخدم تصريح INSERT INTO لإدراج تسجيلات جديدة في جدول. من الممكن كتابة تصريح INSERT INTO بشكلين مختلفين:
* الشكل الأول لا يحدد أسماء الأعمدة التي ستدرج البيانات بداخلها ، بل يحدد القيم التي سيتم إدراجها فقط
* الشكل الثاني يحد كلاً من أسماء الأعمدة والقيم التي سيتم إدراجها

### تصريح UPDATE

يستخدم تصريح UPDATE لتحديث تسجيلات موجودة مسبقاً في جدول .
لاحظ عبارة WHERE في تصريح UPDATE !عبارة WHERE تحدو تسجيلات يجب أن تُحدّث ، إذا قمت بحذف عبارة WHERE ، فسوف تُحدّث جميع التسجيلات!

### تصريح DELETE

يستخدم تصريح DELETE لحذف تسجيلات من جدول.
عبارة WHERE تحدد التسجيل أو التسجيلات التي يجب أن تُحذف ، إذا قمت بحذف عبارة WHERE فسيتم حذف جميع التسجيلات!
Data Defination Language Statements.1
تستخدم في تعريف الكاءن على سبيل المثال " الجدول " الداتا بيز وما عليه من عمليات Create, Drop , Alter وسنشرح بالتفاصيل كل ما يمكن أن نعمل عليه هذه العمليات الكائن الوصف DataBase تحتوى على مجموعه من الجداول Table عبارة عن مجموعة من الصفوف والاعمدة View دى جزء انت بتاخده من الداتا بيز بتعمل علية العمليات بتاعتك من أجل تخثفيف الضغط على الداتا بيز
1-إنشاء داتا بيز Coding Create DataBase Company
2-إنشاء جدول
create table employee (
E_Mail varchar(50) )
ادخال البيانات داخل الجدول
Insert into employee Values('Yahia Galal' ,' Aiat-Giza' ,0110486560 ,'Yahiagalal_89@yahoo.com') Insert into employee Values('Helal Ahmed' ,'El Ma3sara' ,0189452137 ,'helal_elazmy@yahoo.com')
Dropping Database And Table
* to Drop DataBase
drop database Company
* to Drop Table
drop table Employee
Create View ؟ Viewما هي ال
جزء من الداتا بيز انا بستخدمه
وكمان في حاجة مهمة اوى لو مثلا عندى كويرى معقد انا بفضل استخدام الفيو عشان بيريح في التعامل مع البيانات
بدل من استخدام الداتا بيز كلها
مثال بسيط create view first_view as select [Name] from employee دلوقتى انا أنشأت الفيو دا ممكن اعمل عليه أي عملية عادى جدا زى الجدول بالظبط
select * from first_view
لازلة ال View Drop view furst_view
3-Data Manupilation Language 1-Insert 2-Update 3-Delete 4-Select
1-Insert تستخدم لأدخال بيانات إلى الداتا بيز الشكل العام INSERT INTO table_name VALUES (value1, value2, value3,...) insert into EMployee values('Yahia Galal Ahmed' ,'Aiat-Giza' ,0110486560,'yahiagalal_89@yahoo.com') لادخال بيانات إلى أعمدة محددة بنحدد الأسماء المرادالادخال فيها insert into Employee(Name, Add) values('Yahia Galal Ahmed' ,'Aiat-Giza')
2-Update تستخدم لتعديل البيانات UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value
مثال Update Employee set Name='ahmed Galal' where ID=1; 3-Delete تستخدم لحذف البيانات DELETE FROM table_name WHERE some_column=some_value مثال delete from employee where id=1;
لحذف كل البيانات الموجودة بالجدول Delete * from employee
4-Select دى أهم حاجة SELECT * FROM table_name
مثال
select * from employee SELECT DISTINCT دى لو محتاجين نجيب من الداتا بيز ولكن ليست مكررة select Distinct Addr from employee
4-Data Controll Language Statements 1-Grant 2-Revoke 1-Grant من أجل منح المستخدم صلاحية للدخول إلى الداتا بيز
2-Revoke لاخذ الصلاحيات من ال المستخدم
5-Stored Procedure ما هي ال Stored Procedure ? هي قواعد سيكول عادية جدا لكن الفرق أنه إذا وجدت نفسك تستخدم نفس الكويرى كثير فمن الأفضل ان تضعه في Stored Procedure وعند الاستخدام مرة أخرى ما عليك فقط الأ ان تنادى على اسم Stored Procedure بدل كتابة الكود مرة أخرى وبالتالى فهي تتمتع ببعض من الميزات في حالة عدم استخدامها وهي تتلخص في الأتى
1-توفير في الوقت والمجهود "حيث أنه بدل من أستخدام الكود أكثر فأنك بذلك توفر كثير من الوقت والمجهود في كتابة الكود" 2-التمتع بنوع من السرية "في حالة وضعك المركزى في الشركة فأنك تريد مثلا الأحتفاظ ببعض الاكواد السرية التى تريد ان لا يعرفها الأخرون" 3- تسرع في الاستخدام والأداء
مثال create proc use_define
as select [name] from Table_Name where id=5
لتنفيذ هذه
exec use_define 2
-Altering Procedure
-Dropping Procedure
6-Trigger دا نوع من Stored Procedure بيتم عند تنفيذ حدث ما )INSERT/UPDATE/DELETE( على جدول أو فيو بمعنى آخر لما اوصل ل عملية معينة أطلق الكود دا زى مثلا لما في الموبايل بتاعك لما الرصيد بيكون اقل من 2 جنيه هو بيعمل فحص على الرصيد لو لقيه اقل من القيمة المحددة تنطلق الرسالة ال بتقول لك رصيدك الحالة اق من 2 جنيه
CREATE TRIGGER trigger_name
ON table_name
{FOR,After,Instead Of}[INSERT/UPDATE/DELETE] AS
IF UPDATE(column_name)
[{AND/OR} UPDATE(COLUMN_NAME)...]
{ sql_statements
نلاحظ هنا ان For &After لهم نفس النهج أي انهم واحد في الاستخدام لــــــــــــكن Instead Of وظيفتها انهاء عمل Trigger وتقوم بتفعيل مهمة جديدة بدل التي تم ايقافها
لاحظ الأتى
Stored Procedure نستخدم جدولين وهميين وهم
1-Inserted Table 2-Deleted Table لماذا نستخدم هذه الجداول؟ 1-Inserted Table نستخدم هذا الجدول الوهمى عند تفعيل عملية الأضافة بمعنى انه قبل عملية الأضافة في الداتا بيز الأساسية يتم الأضافة في هذا الجدول ثم بعد ذلك يتم الأضافة في الداتا بيز الأساسية انظر هذا المثال ولاحظ الجدول الوهمى Inserted
الذي يحدث أنه يتم وضع عمليه الأضافة في جدول وهمى ثم بعد ذلك يتم وضعها في الداتا بيز
2-Deleted Table كذلك الأمر هو جدول وهمى عند الحذف من الداتا بيز يتم الحذف في هذا الجدول ثم بعد ذلك تتم عملية الحذف
لاحظ هذا المثال للتوضيح
هنا في حالة الحذف يتم وضع المطلوب في جدول وهمى
دعنا نلاحظ هذه الأمثلة 1-You Have The Following Table Hotel(Hotel_ID,h_name,Contact_Person) Room(Room_NO,Floor_NO,Occupied) Reserve(H_ID,R_NO,Guest_Name,Date) Q-Create Trigger That Update The Occupied Field In The Room to ‘yes’ if the Room is Reserved to guest
Solution Create trigger t1 On Reserve For Inserted AS
دعنا نلاحظ الجدول الذي قلنا عليه وهو الجدول الوهمى Inserted حيث قبل اضافة البيانات في الجدول الأساسي نتعامل مع هذا الجدول الوهمى .
مثال آخر 2-Having The following Table. Building(b_no,b_name,status) Customer(c_id,c_name) Cust_build(s_no,c_id,b_id) Q.Create Trigger that make the building not occupied when no customer on it.
Solution
Create Trigger t2 On cust_build For Delete As If(select count(*) from Inserted I ,Reserve R where I.m.id=R.m_no)>3 Begin Rollback transaction End Endif
8-SQL Function 1. AVG - Returns the average value 2. COUNT - Returns the number of rows 3. MAX - Returns the largest value 4. MIN - Returns the smallest value 5. SUM - Returns the sum 6. Group By- && 7. Having
1-AVG متوسط نسبة ما بالنسبة لكل الصفوف SELECT AVG(column_name) FROM table_name
2-COUNT عدد الصفوف في الجدول SELECT COUNT(column_name) FROM table_name مثال select count(ID) from employee
3- MAX لاسترجاع أكبر قيمة عندى في الجدول SELECT MAX(column_name) FROM table_name مثال Select Max(salary ) from Bubing
4- MIN لاسترجاع أكبر قيمة عندى في الجدول SELECT MIN(column_name) FROM table_name مثال Select MIN(salary ) from Buying 5-SUM لاسترجاع مجموع صف ما SELECT SUM(column_name) FROM table_name
مثال
SELECT SUM(ٍSalary) FROM Buying
6-Group By من أجل الحصول على مثلا المرتب للموظفين لديك كل موظف منهم لديه حساب في مكان مختلف 7-Having دى بتكون البديلة عن Where في الأستعلامات العادية بمعنى مااستخدام الشرط في SQl Function يكون عن طريق Group By بدل من Where
مثال
Select Aggregate Function(Column name) From table_name Group By Columan Name Having aggregate_fun(Columan Name)

## المراجع والمصادر

* https://www.w3schools.com/SQl/sql_intro.asp
* https://mulham.github.io/sql/intro