Professional Documents
Culture Documents
1
DataBase 1/Lab part
هو نظام إدارة قواعد البيانات الذي تم تطويره من قبل شركة ,Microsoftبغرض
تخزين واسترجاع البيانات التي تطلبها التطبيقات البرمجية المختلفة ,سواء أكان
التطبيق البرمجي على نفس الحاسوب الذي يشتغل عليه الخادم ,أو كان على جهاز
آخر(زبون )Clientيتصل بالجهاز الخادم عبر شبكة .وهناك العديد من
اإلصدارات من هذا النظام أحدها .MS SQL Server 2014
• كيف يخزن نظام MS SQL Serverالبيانات؟
يتعامل نظام الخادم مع نوعين من الملفات ,ملفات البيانات Data filesالتي
تستعمل لتخزين بيانات المستخدم وأي كائنات يقوم بتعريفها باإلضافة إلى بيانات
أخرى ضرورية لعمل القاعدة ,وملفات سجل اإلجراءات Transaction Log files
التي تخزن بها كل اإلجراءات التي تنفذ على القاعدة تلقائيا من قبل الخادم ,ويستفاد
منها في الحفاظ على تماسك بيانات القاعدة وإجراء عمليات اإلسترداد .Recovery
وال يمكن خلط البيانات واإلجراءات في ملف واحد.
مالحظة :يقصد باإلجراء Transactionهنا مجموعة جمل ( T-SQLسواء أكانت جملة واحدة أو
أكثر) التي تعامل كوحدة واحدة عند التنفيذ واإلسترداد ,بمعنى أنها إما تنفذ بالكامل أو ال.
-أنواع الملفات:
.1ملفات البيانات :Data filesوتشمل:
▪ ملف البيانات الرئيسي :Primary Data fileوهو يمثل نقطة
البداية للقاعدة ,حيث يشير إلى الملفات األخرى بها ,فبمجرد
تكوين القاعدة يتم إدراج نسخة من جداول النظام System
tablesإلى هذا الملف ,وباإلضافة إلى ذلك يمكن تخزين بيانات
المستخدم في هذا الملف .يوجد في كل قاعدة بيانات ملف رئيسي
واحد فقط ,ويكون له اإلمتداد (.).mdf
مالحظة :جداول النظام هي جداول تضم بيانات عن امللفات والكائنات
والتصاريح والشروط وغير ذلك من الكائنات املوجودة في قاعدة البيانات.
الحظ أنه في كل مرة تعرف فيها كائن جديد (جدول مثال) يضاف سطر
جديد إلى جدول أو أكثر من جداول النظام ,وبالتالي فإن حجم هذه
الجداول ليس ثابت.
▪ ملفات البيانات الثانوية :Secondary Data filesوهي
الملفات التي قد يقوم المستخدم بإنشائها لتخزين بياناته ويكون لها
اإلمتداد (.).ndf
2
DataBase 1/Lab part
3
DataBase 1/Lab part
بشكل متكرر لهذه الـ filegroupمن أجل تحسين األداء .أو نقوم بوضع البيانات
التي يتم تحديثها بشكل مستمر في filegroupونضع البيانات الثابتة نسبيا في
filegroupأخرى ,حتى نتمكن من تنفيذ سياسة نسخ إحتياطي خاصة بكل واحدة
منهما بناء على مدى ثبوتية البيانات.
-أنواع الـ :filegroups
:Primary filegroup .1وتنشأ تلقائيا من قبل الخادم عند إنشائك لقاعدة
البيانات ,وتضم ملف البيانات الرئيسي ,primary data fileكما يمكن
أن تضيف إليها أي ملفات ثانوية secondary data filesقد تقوم
بإنشائها .وتحتوي كل قاعدة بيانات على primary filegroupواحدة
بالضبط.
:User-defined filegroups .2وهي أي filegroupقد يقوم المستخدم
بتعريفها ,ويضيف إليها أي ملف ثانوي يقوم بتعريفه.
• مالحظات:
.1ملفات اإلجراءات Log filesال تتبع ألي .filegroup
.2كل ملف بيانات يتبع filegroupمعينة ,يتم تحديدها عند إنشاء امللف,
وفي حالة عدم ذكر الـ filegroupالتي يتبعها امللف ,فإنه يضاف مباشرة
إلى الـ .default filegroup
.3كل قاعدة بيانات يوجد بها ,default filegroupوتعتبر الـ primary
filegroupهي الـ default filegroupللقاعدة عند إنشائها ,ولكن
بوسعك أن تغير ذلك وتضبط أي user-defined filegroupقمت
بتعريفها لتكون هي الـ.default filegroup
.4عندما نقول عن filegroupأنها للقراءة فقط ,read onlyفإننا نعني أنه
ال يمكن تعديل البيانات التي بها .الحظ أن الـ primary filegroupال
يمكن أن تكون .read only
• أوامر لغة :SQL
أوال :أوامر لغة DDL
• تكوين قاعدة بيانات :Create DataBase
CREATE DATABASE database_name
[ ON
4
DataBase 1/Lab part
[ PRIMARY ]
[
<filespec> [ ,...n ]
[ , <filegroup> [ ,...n ] ]
[ LOG ON { <filespec> [ ,...n ] } ]
]
[ COLLATE collation_name ]
[ WITH <external_access_option> ]
]
:حيث أن
<filespec>::=
{
(
NAME =logical_file_name,
FILENAME = { 'os_file_name' | 'filestream_path' }
[ , SIZE =size [ KB | MB | GB | TB ] ]
[ , MAXSIZE = { max_size [ KB | MB | GB | TB ] |
UNLIMITED }
]
[ , FILEGROWTH =growth_increment [ KB | MB | GB |
TB | % ] ]
) [ ,...n ]
}
و
<filegroup> ::=
{
FILEGROUP filegroup_name
[ CONTAINS FILESTREAM ] [ DEFAULT ]
<filespec> [ ,...n ]
}
:• مالحظات
, تمثل الكلمات املحجوزةuppercase الكلمات املكتوبة بالحروف الكبيرة.1
واألقواس املربعة ] [ تعني أن املقاطع املحصورة بينهما اختيارية ويمكن
بينهما تمثل أقواس املجموعة } { األجزاء الضرورية من,االستغناء عنها
والعالمة | تستعمل للفصل ما بين املكونات املحصورة ما بين,الصيغة
. وتعني أنه عليك أن تختار واحدة فقط من هذه املكونات,األقواس
5
DataBase 1/Lab part
ونقصد بالرمز ] [, …nأن العنصر السابق لهذه الرمز يمكن أن يكرر nمن
املرات مع الفصل بين هذه التكرارات بالفاصلة.
ونستعمل الرمز= < > ::لتعريف مقطع من الكود ,block of syntaxبينما
نستعمل الرمز > < لإلشارة لهذا املقطع عندما نحتاج إليه ,والغرض من
ذلك هو جعل الصيغة العامة مختصرة وواضحة.
.2اسم القاعدة ويجب أن يكون فريدا بالنسبة لكل حالة Instanceمن
الخادم ,كما يجب أن يخضع لشروط تسمية املعرفات حسب لغة .SQL
ON .3وتستعمل لتعريف ملفات البيانات وال ـ filegroupsالتي تستعمل
من أجل تخزين البيانات على القرص ,ويجب أن تتبعها قائمة من
عناصر> <filespecلتعريف ملفات البيانات التابعة للـ primary
,filegroupكما يمكن أن تتبعها قائمة من عناصر > < filegroupلتعريف
أي filegroupsقد يرغب املستخدم بتكوينها.
.4الكلمة املحجوزة Primaryتعني أن قائمة عناصر > <filespecالتي تليها
مباشرة تخص ملفات البيانات التابعة للـ ,primary filegroupويمثل
أول عنصر من هذه القائمة ملف البيانات الرئيس ي .primary data file
وحتى وإن لم نستعمل هذه الكلمة املحجوزة ,فإن أول عنصر في القائمة
يمثل ملف البيانات الرئيس ي.
< filespec > .5وتعني مواصفات امللف كما سيتم شرحه الحقا.
< filegroup > .6وتستعمل لتعريف أي user-defined filegroupsقد
يرغب املستخدم في تعريفها ,كما سيتم شرحه الحقا.
Log on .7تستعمل لتعريف ملفات اإلجراءات ,وتليها قائمة من
عناصر> <filespecلتحديد مواصفات هذه امللفات.إذا لم تعرف ملف
إجراءات واحد على األقل عند إنشائك للقاعدة ,فإن الخادم ينشأ ملف
إجراءات حجمه %25من مجموع حجم ملفات البيانات أو 512KBعلى
حسب أيهما يكون األكبر.
Collate .8خارج نطاق دراستنا.
With .9خارج نطاق دراستنا.
6
DataBase 1/Lab part
Name .10وتستخدم لتحديد االسم املنطقي للملف .وهذا االسم يجب أن
يكون فريدا خالل القاعدة ,ومطابقا لشروط تسمية املعرفات حسب لغة
.SQL
FILENAME .11وتستخدم لتحديد االسم الفيزيائي للملف ,os_file_name
ومسار امللف يجب أن يكون موجودا قبل تنفيذ جملة تكوين القاعدة.
القيمة ' 'filestream_pathخارج نطاق دراستنا.
SIZE .12وتستخدم لتحديد الحجم األولي للملف ,ويجب أن يكون عددا
صحيحا .أقل حجم مسموح به هو 1MBمللف البيانات و 512KBمللف
اإلجراءات ,والقيمة اإلفتراضية مللفات البيانات الثانوية ومللفات
اإلجراءات هي .1MBوالوحدة األفتراضية للحجم هي .MB
MAXSIZE .13وتستخدم لتحديد أقص ى حجم يمكن أن يصل إليه امللف,
ويجب أن يكون عددا صحيحا .الوحدة األفتراضية للحجم هي ,MB
وعندما ال نحدد الحد األقص ى املسموح به لنمو امللف ,فإن امللف يستمر
في النمو حتى يغطى كامل القرص .القيمة Unlimitedتعني السماح
للملف بمواصلة نموه حتى يغطى كامل القرص.
FILEGROWTH .14وتستخدم لتحديد املقدار الذي ينبغي أن يزداد به حجم
امللف تلقائيا عند الحاجة ,ويجب أن يكون أقل من أقص ى حجم للملف
.Maxsizeيمكن أن يعطى مقدار الزيادة في شكل قيمة ثابتة ,وفي هذه
الحالة تكون الوحدة املستعملة افتراضيا هي ,MBأو قد يعطى في شكل
نسبة مئوية ,وتحسب هذه النسبة املئوية بناءا على الحجم الذي وصل
إليه امللف .عندما تكون قيمة الزيادة 0فهذا يعني أنه ال يسمح للملف
بالنمو وتجاوز حجمه األولي .أقل قيمة للنمو التلقائي هي ,64KBوالقيمة
األفتراضية هي 1MBمللفات البيانات و 10%مللفات اإلجراءات.
FILEGROUP .15كلمة محجوزة تستخدم لتحديد خصائص الـ .filegroup
filegroup_name .16اسم الـ filegroupويجب أن يكون فريدا بالنسبة
لقاعدة البيانات ,وأن يكون مطابقا لشروط تسمية املعرفات,مع تجنب
استعمال الكلمات املحجوزة Primaryو .primary_log
7
DataBase 1/Lab part
8
DataBase 1/Lab part
9
DataBase 1/Lab part
MAXSIZE = 200,
FILEGROWTH = 20)
10
DataBase 1/Lab part
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'E:\SalesLog\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
11
DataBase 1/Lab part
الحظ أن:
column_name .1اسم العمود أو الحقل ,ويجب أن يتبع شروط تسمية
املعرفات ,كما يجب أن يكون فريدا خالل الجدول.
Type_name .2يقصد به نوع البيانات .... int, char, nvarcharإلخ.
Precision .3يقصد به عدد الخانات التي يمكن أن يحويها الحقل ,أما scale
فيمثل عدد الخانات التي على يمين العالمة العشرية .مثال بالنسبة للعدد
132.45تكون الـ precision=5و الـ . scale=2
12
DataBase 1/Lab part
13
DataBase 1/Lab part
بينما الشرط:
)constraint SubNameUNIQUE unique (SubName,SubID
يعني أن التوليفة املكونة من الحقل managerو الحقل Departmentال
يمكن أن تكون مكررة:
manager Department
Ali IT
14
DataBase 1/Lab part
Ali Networks
Omar IT
Omar IT
Managers
Man_ID Man_Name
1 Ali
2 Osama
لتمثيل هذه العالقة وعند إنشاء الجدول ,Departmentsنعرف الشرط
DepFKالذي يحدد العمود Manager_IDكمفتاح أجنبي Foreign keyفي
الجدول ,Departmentsلنربطه بالجدول managersمن خالل الحقل
Man_IDهكذا:
)constraint DepFK Foreign key (Manager_ID
)refrences managers (Man_ID
الشرط DepFKيعني أن القيم التي تظهر في الحقل Manager_IDفي الجدول
( Departmentsالجدول األبن) يجب أن تكون موجودة سلفا في الحقل
Man_IDفي الجدول (managersالجدول األب) ,ولو حاولت أن تدخل القيمة
3مثال في الحقل Manager_IDعند إدخال البيانات للجدول Departments
فإنك ستحصل على رسالة خطأ من النظام.
الحظ أنه ليس من الضروري أن تتطابق أسماء الحقول التي نريد أن نربط من
خاللها الجداول ,ولكن البد لهذه الحقول من أن تكون من نفس النوع والحجم
حتى تتم عملية الربط.
وأخيرا فإنه الحقل/الحقول املناظرة في الجدول األب يجب أن تمثل PRIMARY
KEYأو أن تكون فريدة .UNIQUE
15
DataBase 1/Lab part
16
DataBase 1/Lab part
: • أمثلة
: باملواصفات التاليةStudents قم بتكوين جدول باسم-1
Students
مالحظات النوع الحقل
. وهكذا2 وللذي يليه1 قيمة الحقل ألول سجلTinyint StuID
. ال يقبل أي قيم خالية أو مكررةnvarchar(50) StuName
.0 القيمة األفتراضيه هي, ال يقبل أي قيم خاليةBit StuGender
. يقبل قيما خاليةDate BirthDate
" يقبل القيم الخالية وقيمته األفتراضية "مصراتهnvarchar(50) StuAddress
17
DataBase 1/Lab part
18
DataBase 1/Lab part
(
19
DataBase 1/Lab part
PaintID tinyint ,
ArtistID tinyint Not Null ,
PaintName nvarchar(15) Not Null ,
Genre nvarchar (20) Null ,
Describtion nvarchar (50) Null default 'unknown' ,
price float check (price between 50.00 and 50000.00)
constraint PaintsPK primary key (PaintID) ,
constraint PaintsFK foreign key (ArtistID) references Artists (ArtID)
);
: بحيث تكون مواصفاته كما يليDepartments كون جدول باسم-4
Paints
مالحظات النوع الحقل
--------------------------------------- char (2) CompID
--------------------------------------- char(2) DepID
ويجب أن ال تحتوي قيمه على, ال يقبل قيما خاليةchar(10) DepName
يجب أن تكون قيم هذا.Department السلسلة
.CompID الحقل فريدة بالنسبة لكل
على الترتيب مفتاحا رئيسيا مركباDepID وCompID يمثل كال من الحقلين
.للجدول
create table Sales..Departments
(
CompID char (2),
DepID char(2) ,
DepName char(10) Not Null check( DepName Not Like '%Department')
constraint DepartmentsPK primary key (CompID,DepID),
constraint DepartmentsUQ Unique (CompID,DepName)
);
Not نستخدم املؤثرDepartment من أجل أقصاء السالسل التي تحتوي على السلسة
"ال يشبه" القيمةDepName ومعنى الشرط هنا أن محتوى الحقل,Like واملؤثر
وهذا, أو أكثر0 إلى أي مجموعة من الحروف طولها% تشير العالمة,‘%Department’
. قد يسبقه حرف أو أكثرأو ال ش يءDepartments يعني أن املقطع
20
DataBase 1/Lab part
CmpID char(2) ,
DepID char(2) ,
empID char(4) ,
salary float Not Null check (salary >= 200 and salary <= 2500) ,
(CompID,DepID)
) on "default" ;
21
DataBase 1/Lab part
{
| MODIFY NAME =new_database_name
>| <add_or_modify_files
>| <add_or_modify_filegroups
}
];[
الخيار MODIFYيسمح لنا بتعديل اسم القاعدة وتغييره من االسم الحالي
database_nameإلى االسم الجديد ,new_database_nameبواسطة
الخاصية .NAME
مثال :1كون قاعدة بيانات باسم Salesثم عدل اسمها ليصبح
.CompanySales
;CREATE DATABASE Sales
GO
;ALTER DATABASE Sales MODIFY NAME=CompanySales
GO
مالحظة :مك يوجد ملف يف هذه القاعدة؟ ومك filegroup؟ ومايه الـ default filegroup؟
=<filespec>::
( NAME =logical_file_name
][,NEWNAME =new_logical_name
]'[,FILENAME = 'os_file_name
]][,SIZE =size [KB |MB |GB |TB
|][,MAXSIZE={max_size[KB|MB|GB|TB
}UNLIMITED
]
]][,FILEGROWTH=growth_increment[KB|MB|GB|TB|%
)
23
DataBase 1/Lab part
24
DataBase 1/Lab part
25
DataBase 1/Lab part
(NAME=tdatafile,FILENAME='C:\tdatafile.ndf')
TO FILEGROUP othergroup;
GO
ALTER DATABASE CompanySales
MODIFY FILEGROUP othergroup READ_ONLY;
GO
ALTER DATABASE CompanySales
MODIFY FILEGROUP othergroup NAME=readonlygroup;
GO
ALTER DATABASE CompanySales
MODIFY FILE
(NAME=fdatafile,NEWNAME=fdf,FILENAME='D:\fdf.ndf',
SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=500KB);
GO
ALTER DATABASE CompanySales
ADD FILE
(NAME=mylog,FILENAME='C:\mylog.ldf',SIZE=3MB,
MAXSIZE=UNLIMITED, FILEGROWTH=10%);
GO
ALTER DATABASE CompanySales
REMOVE FILE fdf;
GO
26
DataBase 1/Lab part
إالfdf بعد أن قمنا بحذف الملفsdatafile الحظ أنه ال يمكننا حذف الملف
بدالdefault filegroup لتصبح هي الـreadonlygroup بعد أن نضبط
ألنه ال يمكن حذف أي ملف في حالة كونه هو الملف,defilegroup من
.default filegroup الوحيد في الـ
:ALTER TABLE • أمر تعديل جدول
:الصيغة العامة
ALTER TABLE [ database_name .. ] table_name
{
ALTER COLUMN column_name
{
type_name [( { precision [ ,scale ]| max } )]
[NULL | NOT NULL ]
}
| ADD
{<column_definition>|<table_constraint>}[,...n ]
| DROP
{ [CONSTRAINT] constraint_name |
COLUMN column_name
} [ ,...n ]
| { CHECK | NOCHECK }
CONSTRAINT { ALL | constraint_name [ ,...n ]}
} [ ; ]
عمليات تعديل مختلفة على الجدول4 بواسطة هذه الصيغة بإمكاننا أن نجري
:وهي
: تعديل حقل-1
نستطيع أن نعدل في مواصفات الحقلALTER COLUMN بواسطة الخيار
,type_name وهذا يشمل تعديل نوعه,column_name الذي اسمه
. إلى جانب كونه يقبل قيما خالية أم ال,سعته
27
DataBase 1/Lab part
GO
CREATE TABLE companySales..machines
(
machineID char(2) ,
Price decimal(6,2) Not NULL ,
MadeIn )varchar(30 Null
)constraint machinesPK primary key (machineID
)
;on readonlygroup
GO
ALTER TABLE companySales..machines
;ALTER COLUMN Price decimal(6,2) Null
GO
مثال :4قم بتعديل الجدول machinesبناءا على مايلي:
التعديل المطلوب الحقل
machineIDتعديل النوع إلى )char(4
Priceتعديل النوع إلى )decimal(5,3
MadeInاجعل النوع ) nvarchar(30واجعله ال يقبل القيم الخالية
حتى تخصص لكل سجل بالجدول عند إضافة الحقل ,وإال فإن عملية
اإلضافة ستمنع!
مثال :5أضف إلى الجدول machinesمايلي:
.2حقل باسم typesنوعه ) varchar(20بحيث يكون
Not Nullوله قيمة افتراضية "."Unknown
.3شرط يحصر قيمة الحقل Priceلتكون أعلى من أو
تساوي 50.000مع إعطائه قيمة افتراضية .50.000
.4حقل باسم Mnameنوعه ) char(30ويقبل القيم
الخالية.
الحل:
ALTER TABLE CompanySales..machines
ADD
types varchar(20) Not Null default 'Unknown',
)CONSTRAINT PriceCK check (Price>=50.000 ,
CONSTRAINT PriceDF default 50.000 for price ,
;Mname char(30) Null
31
DataBase 1/Lab part
: أضف الشروط.5
. فريداvname لجعل الحقل vnameUN
’USA,FL’ قيمة افتراضية هيvaddress ألعطاء الحقلvaddressDF
ALTER TABLE CompanySales..vendors
ADD CONSTRAINT vnameUN UNIQUE (vname),
CONSTRAINT vaddressDF default 'USA,FL'for vaddress;
32
DataBase 1/Lab part
إذا أردت حذف جدول table1وكان هذا الجدول مرتبطا بجدول آخر
,table2بحيث كان الجدول األب هو table1والجدول األبن , table2
فإنك ال تستطيع حذف الجدول table1إال بعد أن:
.1تحذف الشرط Foreign keyالذي يكون العالقة مابين
الجدولين.
أو
.2تحذف الجدول األبن table2أوال ثم تحذف الجدول
األب .table1بإمكانك أن تحذفهما في نفس األمر ,هكذا:
;DROP TABLE table2,table1
وعليك في هذه الحالة أن تراعي ذكر الجدول األبن أوال
وقبل الجدول األب.
33
DataBase 1/Lab part
34
DataBase 1/Lab part
عند اسناد القيم للحقول بواسطة الجملة insertيجب مراعاة الترتيب ,حيث
تكتب القيمة التي ستستند للحقل األول أوال ,تليها القيمة التي ستخصص
للحقل الثاني ,وهكذا .مع الحرص على تزويد كل الحقول بالقيمة المناسبة,
ويستثنى من ذلك الحقل المعرف identity columnالذي يقوم النظام
بتخصيص القيمة المناسبة له تلقائيا .في المثال السابق تخصص القيمة
1001للحقل ,col1وقمنا بإحاطة هذه القيمة بعالمتي تنصيص مفرد,
وذلك ألن الحقل col1من النوع ,charوتخصص القيمة 3.5للحقل
,col2بينما تخصص القيمة orangeللحقل ,col4ونستخدم الحرف N
قبل هذه القيمة نظرا ألن الحقل col4من النوع .nvarcharالحظ أننا لم
نسند قيمة صريحة للحقل ,col3وذلك ألن هذا الحقل يمثل حقال معرفا
,Identity columnوبالتالي يقوم النظام باسناد القيمة المناسبة له تلقائيا.
في الواقع لو أنك قمت باسناد قيمة للحقل ,col3فإنك ستحصل على رسالة
خطأ ,ولن يتم تنفيذ األمر.
-2السجل الثاني:
col1 col2 col3 col4
1003 4.5 2 Null
35
DataBase 1/Lab part
: السجل الرابع-4
col1 col2 col3 col4
Null 2.5 4 Red
بإمكاننا إضافة هذا.col2 في هذا السجل نستخدم القيمة األفتراضية للحقل
:السجل على النحو التالي
insert into tb1 values(Null,default,N'red');
:أو
insert into tb1 values(Null,2.5,N'red');
: السجل الخامس-5
col1 col2 col3 col4
Null 2.5 5 Null
36
DataBase 1/Lab part
37
DataBase 1/Lab part
38
DataBase 1/Lab part
ولكن عليك أن تعلم جيدا أن الجداول المؤقتة التي يتم إنتاجها خالل تنفيذ
جملة االستعالم ال يتم االحتفاظ بها أو تخزينها ( على عكس الجداول الدائمة
التي تكون بواسطة األمر ,)createوال يتم عرضها على المستخدم الذي ال
يرى إال الناتج النهائي ,أيضا من المهم اإلشارة إلى أن الترتيب الذي تنفذ به
جملة االستعالم والموضح في المخطط السابق ,يختلف عن الترتيب الذي
تكتب به هذه الجملة وهو:
1) select 2) from 3) where 4) group by 5) having 6)order by
وعلى الرغم من أن بعض هذه األجزاء اختيارية ويمكن االستغناء عنه ,لكن
عند استعمالها جميعا أو استعمال بعضها يجب التقيد بالترتيب المذكور.
والجدير بالذكر أن الجدول النهائي الذي ينتج عن أمر االستعالم هو جدول
مؤقت ,يتم تكوينه عن تنفيذ االستعالم وال يخزن في القاعدة.
ويمكن تصنيف االستعالمات إلى نوعين:
-1استعالمات على جدول واحد :وهي استعالمات تنفذ على جدول
واحد فقط.
-2استعالمات على أكثر من جدول :وهي استعالمات تنفذ على
أكثر من جدول.
أوال :استعالمات من جدول واحد:
مالحظة :جميع األمثلة التالية مبنية على الجدول empفي القاعدة Sوالذي
يمثل بيانات مجموعة من املوظفين ,كما يلي:
39
DataBase 1/Lab part
40
DataBase 1/Lab part
41
DataBase 1/Lab part
42
DataBase 1/Lab part
43
DataBase 1/Lab part
from S..emp
44
DataBase 1/Lab part
46
DataBase 1/Lab part
from S..emp
where empaddress Is NULL
47
DataBase 1/Lab part
48
DataBase 1/Lab part
الحظ أن:
.1يمكن تصنيف السجالت حسب حقل واحد كما في المثال 1أو
حقلين كما في المثال 2أو أكثر.
.2الحقول التي يمكن إدراجها في جملة selectفي االستعالم
الذي يحوي group byهي فقط تلك التي تظهر في جملة
.group byفي استعالم المثال 1قمنا بعرض الحقل
departmentالذي استعملناه مع جملة ,group byوفي
استعالم المثال 2قمنا بعرض الحقلين departmentو
,qualificationوهما نفس الحقلين الذين استعملناهما في
.group by
.3بإمكاننا استعمال الدوال الجاهزة مع جملة selectفي
االستعالمات التي بها ,group byكما سيلي.
.3اعرض مجموع رواتب الموظفين مصنفين حسب األقسام العاملين
بها:
)select department,sum(salary
from S..emp
group by department
49
DataBase 1/Lab part
:having جملة-
ونستعمل في,group by تستخدم لوضع شرط على مخرجات جملة
باإلضافة إلىgroup by هذه الجملة الحقول المستعملة في جملة
.الدوال الجاهزة
اعرض األقسام المختلفة التي يعمل بها الموظفون في جدول.1
:2 بشرط أن يكون عدد الموظفين في القسم أكثر منemp
select department,count(*)
from S..emp
group by department
having count(*)>2
:order by -
50
DataBase 1/Lab part
وتستخدم لترتيب مخرجات االستعالم بناء على حقل واحد أو أكثر ,إما
تصاعديا وذلك بوضع الكلمة المحجوزة ascمباشرة بعد اسم الحقل
الذي نريد أن نرتب السجالت بناء عليه ,أو تنازليا وذلك باستعمال
الكلمة المحجوزة .descوإذا لم نستعمل أيا منهما يتم الترتيب
تصاعديا بشكل افتراضي.
.1اعرض بيانات الموظفين مرتبة تصاعديا على حسب اسم
الموظف:
* select
from S..emp
order by empName asc
from S..emp
order by department asc,qualification asc
نظرا ألن عملية الترتيب تتم بشكل تصاعدي افتراضيا ,يمكن كتابة
جملة الترتيب السابقة على النحو التالي:
order by department,qualification asc
أو:
order by department,qualification
52