الوحدة الثامنة: لغة الإستفسار 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":

SELECT * FROM Customers;

تذكر أن SQL ليست حساسة للأحرف الكبيرة . فـ select هي نفس SELECT بالنسبة لـ SQL.

تصريح SELECT[عدل]

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

SELECT * FROM table_name;

تصريح INSERT INTO[عدل]

يستخدم تصريح INSERT INTO لإدراج تسجيلات جديدة في جدول. من الممكن كتابة تصريح INSERT INTO بشكلين مختلفين:

  • الشكل الأول لا يحدد أسماء الأعمدة التي ستدرج البيانات بداخلها ، بل يحدد القيم التي سيتم إدراجها فقط 
  INSERT INTO table_name

  VALUES (value1,value2,value3,...);
  • الشكل الثاني يحد كلاً من أسماء الأعمدة والقيم التي سيتم إدراجها
  INSERT INTO table_name (column1,column2,column3,...)

  VALUES (value1,value2,value3,...);

تصريح UPDATE[عدل]

يستخدم تصريح UPDATE لتحديث تسجيلات موجودة مسبقاً في جدول .

UPDATE table_name

SET column1=value1,column2=value2,...

WHERE some_column=some_value;

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

تصريح DELETE[عدل]

يستخدم تصريح DELETE لحذف تسجيلات من جدول.

	DELETE FROM table_name

	WHERE some_column=some_value;

عبارة WHERE تحدد التسجيل أو التسجيلات التي يجب ان تُحذف ، إذا قمت بحذف عبارة WHERE فسيتم حذف جميع التسجيلات!


	Data Defination Language Statements.1
	Data Manipulation Language Statements.2
	Data Controll Language Statements.3
	Create Procedure.4
	Create Function.5
	Create Trigger.6
 	SQL Function.7


Data Defination Language Statements.1

تستخدم في تعريف الكاءن () على سبيل المثال " الجدول " الداتا بيز وما عليه من عمليات Create, Drop , Alter وسنشرح بالتفاصيل كل ما يمكن ان نعمل عليه هذه العمليات الكائن الوصف DataBase تحتوى على مجموعه من الجداول Table عبارة عن مجموعة من الصفوف والاعمدة View دى جزء انت بتاخده من الداتا بيز بتعمل علية العمليات بتاعتك من اجل تخثفيف الضغط على الداتا بيز

1-انشاء داتا بيز Coding Create DataBase Company

2-انشاء جدول

create table employee (

ID int primary Key ,
Name Varchar(50) ,
Addr varchar(50),
Tel nchar(10) ,

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

 Alter Proc Procedure_name

-Dropping Procedure

 Drop Proc Procedure_name
  • -*-*-*-*-*-*-*-*-*-*-*-*-***-*-*-

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

    Update Room 
    Set Occupied=’yes’
    From Room R ,Inserted I
    Where R.Room_No=I.R_No

دعنا نلاحظ الجدول الذى قلنا عليه وهو الجدول الوهمى 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)


المراجع والمصادر[عدل]