10
هندسة والتحكمماسبات الثالثة السنة البيانات ر قواعد ا مقرلثالثةعملية اسة الل ال1 ( مثال2 عاملعودة إل نظام: بال) طلوب مهنة, ا: ط ثويل هطE R diagram ذا ناص انظام إل ال بلغةداولك النشاء تل زمةت التعليمابة الول, وكتا جداSQL . طقواعد ثويل هط ل وفقاE-R diagram لدينا: ل يكون إل جداو1 - عامل ال جدولemployee(no, name, birth_date, salary) . 2 - هنة جدول اskill(skill_no, name) . 3 - الربط جدولemp_skill_tab(no, skill_no, skill_level) . قة ما العتمثيل الربط ل جدولضافة إللقوية, بات الكياناص بكل من ا م بإنشاء جدول خا أي سنقو النوعت والث هي منلكيانا تلك ا بmany-to-many . ساسي ح افتا ادول الemployee عامل هو رقم الno دول ال ساسي ح افتا , واskill هوهنة رقم اskill_no . قةميزة لعت اصفا الواضافة إللقوية بات الكياناساسية لتيح افاتوي على ا الربط جدولتقاندرجة ا( رتباط اskill_level ل هو هذا الدو ساسي ح افتا, وا) ساسيةتيح افا لة اة أيت القويلكيانا ل(no, skill_no) . النوعقات منيق العكن ثق many-to-many كلقت إل ع زئتها عمليام تتا ت مباشرة وإ النوعا مننهم مone-to-many . لتالية:ت اقا إذن الع لدينا1 - النوعقة من عone-to-many دول ال بemployee وال دولemp_skill_tab . 2 - النوعقة من عone-to-many دول ال بskill دول والemp-skill-tab . نث يلعب امق وحيno, skill_no مندول الemp-skill-tab قت الع نارجيةتيح افا دور ا تيب.ى ال عللسابقت اداول:ء ال إنشاcreate table employee( no number primary key, name varchar2(20) not null, birth_date date, salary number); create table skill( skill_no number primary key, name varchar2(20) not null); create table emp_skill_tab( no number,

SQL Database - Practical Session

Embed Size (px)

DESCRIPTION

SQL Datatypes. Create and alter table instructions. Adding and Editing constraints on tables.

Citation preview

Page 1: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

1

اخلاص هبذا E – R diagramحتويل خمطط :مهنة, املطلوب –(: بالعودة إىل نظام عامل 2مثال) .SQLجداول, وكتابة التعليمات الالزمة إلنشاء تلك اجلداول بلغة النظام إىل

إىل جداول يكون لدينا: E-R diagramوفقاً لقواعد حتويل خمطط .employee(no, name, birth_date, salary)جدول العامل -1 .skill(skill_no, name)جدول املهنة -2

.emp_skill_tab(no, skill_no, skill_level)جدول الربط -3

أي سنقوم بإنشاء جدول خاص بكل من الكيانات القوية, باإلضافة إىل جدول الربط لتمثيل العالقة ما .many-to-manyبني تلك الكيانات واليت هي من النوع

هو skill, واملفتاح األساسي يف اجلدول noهو رقم العامل employeeاجلدول املفتاح األساسي يف .skill_noرقم املهنة

جدول الربط حيتوي على املفاتيح األساسية للكيانات القوية باإلضافة إىل الواصفات املميزة لعالقة لة املفاتيح األساسية (, واملفتاح األساسي يف هذا اجلدول هو مجskill_level االرتباط )درجة اإلتقان

.(no, skill_no)للكيانات القوية أي مباشرة وإمنا تتم جتزئتها عمليًا إىل عالقتني كل many-to-manyال ميكن حتقيق العالقات من النوع

.one-to-manyمنهما من النوع لدينا إذن العالقات التالية:

.emp_skill_tabدول واجل employeeبني اجلدول one-to-manyعالقة من النوع -1 .emp-skill-tabواجلدول skillبني اجلدول one-to-manyعالقة من النوع -2

دور املفاتيح اخلارجية يف العالقتني emp-skill-tabاجلدول من no, skill_noوحيث يلعب احلقالن السابقتني على الرتتيب.

إنشاء اجلداول:create table employee(

no number primary key,

name varchar2(20) not null,

birth_date date,

salary number);

create table skill(

skill_no number primary key,

name varchar2(20) not null);

create table emp_skill_tab(

no number,

Page 2: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

2

skill_no number,

skill_level varchar2(10) not null,

primary key(no,skill_no),

foreign key (no) references employee on delete cascade,

foreign key (skill_no) references skill on delete cascade);

عند اإلضافة إىل اجلداول السابقة جيب مراعاة شروط التكامل املرجعي, أي جيب أال نضيف إىل اجلدول emp_skill_tab .أرقام مهن وأرقام عمال مل تتم إضافته بعد إىل جدويل املهنة والعامل على الرتتيب

:employeeالتالية إىل اجلدول قم اآلن بإضافة السجالت

(1, ‘Ali’, 2/10/1950, 800)

(2,’Ahmad’, null, 500)

insert into employee

values(1,'Ali',to_date('2/10/1950','dd/mm/yyyy'),800);

insert into employee(no, name, salary)

values(2,'Ahmad',500);

كما نستطيع إجناز عملية اإلضافة األخرية بالشكل التايل:

insert into employee

values(2,’Ahmad’, null, 500);

:skillقم اآلن بإضافة السجالت التالية إىل اجلدول (1, painting)

(2, carrying)

insert into skill

values(1,'painting');

insert into skill

values(2,'carrying');

يف مهنة الطالء middleميلك مهارة متوسطة 1أضف اآلن البيانات الالزمة جلعل العامل ذي الرقم painting وكذلك البيانات الالزمة جلعل العامل نفسه ميلك مهارة عالية ,high يف مهنة التحميلcarrying.

insert into emp_skill_tab

values(1,1,'middle');

insert into emp_skill_tab

values(1,2,'high');

Page 3: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

3

أمناط البيانات:سنتعرف اآلن على أمناط البيانات يانات الرقمية وأنواعها اجلزئية وميزاهتا, كنا قد تعرفنا على أمناط الب

احملرفية:Char يستخدم هذا النمط لتخزين معطيات حرفية بطول ثابت, حيث أن طريقة ختزين املعطيات :

و أ ASCIIومتثيلها الداخلي يعتمد على منط الرتميز املستخدم يف قاعدة البيانات والذي ميكن أن يكون 7-bit أوEBCDIC...

byte 1على متثيل احملرف الواحد بـ تقوم DBMSالرتميز املستخدمة يف معظم أنظمة الـ طرقإن وذلك بالنسبة للغة العربية واإلنكليزية ولغات غرب أوروبا ... ( ASCIIومنها الـ bits 8)أنظمة ترميز بـ

متعددة البايتات. ارفهاحم ستخدم أنظمة ترميز خاصة ألنأما لغات شرق آسيا فتحيدد الطول األعظمي لقيمة من هذا النمط والذي ميكن أن يصل اختيارياً بارامرتًا charيأخذ النوع

, وال بد من اإلشارة إىل أن 1, ويف حال مل يتم حتديد الطول األعظمي فهو افرتاضياً bytes 32767إىل دد احملارف, حيث أن عدد البايتات املستخدمة الطول األعظمي يقدر دومًا بعدد البايتات وليس بع

لتمثيل احملرف يعتمد على نظام الرتميز.فقط, فهو يف bytes 2000هو charجتدر املالحظة أن العرض األعظمي لعمود بيانات من النوع

هذه احلالة أقل من الطول األعظمي هلذا النمط, ولذلك ال نستطيع إدخال أي قيمة من النمط char(n) عمود بيانات من النمط يف char 2000إذا كان طوهلا أكرب من bytes.

:charاألنواع اجلزئية للنوع 1- Character وهو ذاته النمط :char .غري أن االسم خمتلف فقط 2- Long ,ونعين بذلك أنه ال داعي لتحديد حجم لتلك : لتخزين سلسلة حرفية بصورة ديناميكية

لتحديد الطول longحجمها الفعلي, ولذلك ال يتم ذكر بارامرت بعد ل خيصص هلا بقدربالسلسلة األعظمي.

long, والعرض األعظمي لعمود بيانات من النمط bytes 32760هو longالطول األعظمي لقيم يف char(n)من النمط أية وكذلك longقيمة من النمط ة, ولذلك نستطيع إدخال أيGB 2هو

.longالنمط عمود بيانات من ختزن النصوص, مصفوفات األحرف, أو حىت الوثائق الصغرية. longأعمدة

3- varchar2(n) حيدد بارامرتًا الزماً معطيات حمرفية بصورة ديناميكية. يأخذ هذا النمط : لتخزين

.bytes 32767الطول األعظمي حىت

Page 4: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

4

منطان جزئيان مها هلذا النوع .2GBهو varchar2العرض األعظمي لعمود بيانات من النوع varchar وstring .وهلما نفس جمال القيم

, فاألول كما قلنا char(n)و varchar2(n)ال بد من اإلشارة هنا إىل اخلالف األساسي بني النمطني فإنه nديناميكي أما الثاين فهو ستاتيكي مبعىن يف حال كان احلجم الفعلي للسلسلة املدخلة أصغر من

.nت إىل تلك السلسلة ليكون احلجم التخزيين يف النهاية للسلسلة مساوياً إىل ستتم إضافة فراغا

أنواع معطيات أخرى:1- raw ختزين املعطيات الثنائية أو سالسل البايتات. كمثال فإن متحول :raw ميكن أن خيزن

تسلسالً من األحرف أو الصور الرقمية.. والعرض األعظمي لعمود bytes 32767عظمي حىت إىل بارامرت لتحديد الطول األ rawحيتاج النوع

.bytes 2000بيانات من هذا النوع هو من خالل سالسل احملارف الست عشرية, لنأخذ املثال التايل: rawنستطيع التعامل مع أعمدة

create table temp(rr raw(500));

نستطيع اآلن إدخال قيمة ست عشرية كما يلي:insert into temp values('0123456789abcdef');

ويف حال احتوت السلسلة يف الصيغة السابقة على أي حمرف ال ينتمي إىل أجبدية النظام الست عشري ستظهر رسالة خطأ.

2- long raw ,وال حيتاج إىل بارامرت لتحديد : يستخدم لتخزين املعطيات الثنائية وسالسل البايتات

الطول األعظمي., كما أن الطول األعظمي له هو PL/SQLغري مفسر من قبل اللغة long rawإن منط البيانات

.2GB, والعرض األعظمي لعمود بياناته هو 32760 3- rowid: داخلياً, إن كل جدول بيانات له عمود ومهيdummy امسهrowid وهو خيزن سلسلة , ت عشرية متثل عنوان ختزين السطر.س

كيفية استعراض عنوان التخزين يف جدول ما. selectسنرى الحقاً عند دراسة تعليمة

تعليمات تعديل خمطط اجلدول: تتم إضافة أعمدة جديدة إىل جدول عن طريق التعليمة التالية: إضافة أعمدة جديدة إىل اجلدول: -1

alter table table_name

Page 5: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

5

add column_name column_data_type column_constraints.

متبوعة باسم اجلدول الذي سنقوم بتعديله. بعد ذلك alter tableلمات املفتاحية تبدأ التعليمة بالك متبوع باسم العمود اجلديد ونوع بياناته وأية قيود عليه. addتأيت الكلمة املفتاحية

.employeeإىل اجلدول Addressبالعودة إىل املثال السابق قم بإضافة العمود alter table employee

add address varchar2(50);

.not nullإن بعض القيود تتطلب أن يكون اجلدول خالياً من البيانات, مثل القيد نستطيع عند إضافة العمود حتديد قيمة افرتاضية كما يلي:

alter table employee

add address varchar2(50) default 'lattakia';

.500حبيث يكون هذا الرقم أكرب من employee إىل اجلدول security_noقم بإضافة رقم الضمان alter table employee

add security_no number unique check(security_no>500);

ال يهتم بالقيم السابقة املدخلة إىل اجلدول على خالف checkنالحظ هنا أن قيد التحقق من القيم .not nullالقيد

كما يلي: Add من خالل عدة تعليماتم نفس العبارة وذلك ميكن إضافة أكثر من عمود باستخداalter table employee

add address varchar2(50) default 'lattakia'

add security_no number unique check(security_no>500);

:مثل هذه القيود من خالل التعليمة التاليةاجلدول: ميكن إضافة على مستوى قيودإضافة -2

alter table table_name

add table_constraint; مفتاح أساسي نكتب: قيد فإلضافة

alter table table_name

add primary key(column_name);

إلضافة قيد مفتاح خارجي نكتب:alter table table_name

add foreign key(column_name) references table_name(column_name)

on delete delete_option

on update update_option;

نكتب: checkإلضافة قيد حتقق alter table table_name

add check(column_name_ckeck_statement);

إلضافة قيد القيمة الفريدة نكتب:alter table table_name

add unique(columns_names);

Page 6: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

6

أي من خصائصه, مبا فيها منط املعطيات, بتعديل مود ماعجتري عملية تعديل األعمدة: تعديل -3

.حجم املعطيات, أو الشروط املطبقة على العمود, أو القيمة االفرتاضيةمع اسم العمود واخلصائص اجلديدة, مثاًل modifyلتبديل تعريف العمود استخدم أمر على سبيل املثال bytes 30صبح طول القيم األعظمي فيه حبيث ي employeeيف اجلدول addressلتعديل العمود

نقوم مبا يلي:alter table employee

modify address varchar2(30);

يكون العمود خاليًا من البيانات وأن مالحظة: جيب االنتباه عند تعديل منط بيانات أحد األعمدة أن على العمود مع النمط اجلديد. سابقاً تتوافق القيود املطبقة

:Tempن بإنشاء جدول جديد حيمل االسم لنقم اآلcreate table temp(no number, name varchar2(25));

:varchar2(5)ليصبح noلنقم اآلن بتعديل منط بيانات العمود alter table temp modify no varchar2(5);

:50لنعد اآلن ولنقم بإعادة منط البيانات كما كان سابقاً وبقيمة افرتاضية alter table temp modify no number default 50;

:nullحبيث ال يقبل القيم اخلالية tempيف اجلدول noوإذا أردنا تعديل العمود alter table temp modify no not null;

نكتب: nullويف حال عدلنا عن رأينا وقررنا قبول العمود للقيم alter table temp modify no null;

نكتب: 40حبيث ال تقل أي قيمة فيه عن noعلى العمود checkقيد التحقق وإلضافة alter table temp modify no check(no>=40);

وإلضافة شرط القيم الفريدة على العمود السابق نكتب:alter table temp modify no unique;

حلذف عمود من اجلدول نكتب التعليمة التالية: حذف األعمدة: -4

alter table table_name

drop column column_name;

نكتب: tempمن اجلدول nameفلحذف العمود alter table temp drop column name;

حذف اجلداول: حلذف جدول نكتب التعليمة التالية: -5drop table table_name;

نكتب: tempحلذف اجلدول drop table temp;

Page 7: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

7

:دولاجلحذف القيود املطبقة -6, كانت أحدمها تعتمد على الكلمة اجلداوللتعريف القيود على وجدنا يف احملاضرة السابقة طريقتني

يليها اسم القيد. ويف الواقع فإنه من الضروري تعريف القيود هبذه الطريقة من constraintاملفتاحية أجل تسهيل عملية حذفها الحقاً وذلك من خالل اسم القيد.

قيد من خالل التعليمة التالية: نستطيع حذف أيalter table table_name drop constraint constraint_name;

فيه. noمرة أخرى وتطبيق قيد وحدانية القيم على احلقل tempلنقم اآلن بإنشاء اجلدول create table temp(no number, name varchar2(50));

alter table temp

add constraint const1 unique(no);

حلذف القيد السابق نكتب:alter table temp drop constraint const1;

مفتاحاً noحبيث يصبح tempاألمر ذاته بالنسبة لبقية القيود, فعلى سبيل املثال إذا ما عدلنا اجلدول و أساسياً نكتب:

alter table temp

add constraint const1 primary key(no);

يد السابق نكتب:وحلذف القalter table temp drop constraint const1;

مالحظة: نستطيع حذف أي قيد سواء أكان قيداً على اجلدول ككل أم على أحد األعمدة فقط, املهم أن يكون له اسم.

وإعادة إنشائه بالتعليمة التالية: tempمثال: إذا قمنا حبذف اجلدول create table temp(no number constraint const1 primary key, name

varchar2(25));

نستطيع حذف قيد املفتاح األساسي كما فعلنا سابقاً, أي نكتب:alter table temp drop constraint const1;

حلذف القيمة االفرتاضية اخلاصة بأحد األعمدة نستطيع أن نكتب حذف القيمة االفرتاضية: -7

ببساطة ما يلي:alter table table_name modify column_name default null;

أي عملياً بدون قيمة افرتاضية. nullأي جعلنا القيمة االفرتاضية مساوية إىل إعادة التسمية: نستطيع إعادة تسمية اجلدول من خالل التعليمة التالية: -8

alter table table_name rename to new_table_name;

Page 8: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

8

ادة تسمية العمود من خالل التعليمة التالية:كما ونستطيع إعalter table table_name rename column column_name to new_column_name;

مالحظة:عند حماولة حذف أو تغيري منط بيانات عمود يشكل مفتاحًا أساسيًا بالنسبة جلدول ما ومرجعية ألحد

املفاتيح يف جدول آخر ستظهر رسالة خطأ.

ات اسرتجاع املعطيات:تعليم. يؤمن هذا األمر الصيغ الالزمة الختيار selectأمرًا واحدًا السرتداد املعطيات هو أمر SQLتوفر لغة

أعمدة أو أسطر أو الرتكيب بني اجلداول وجتميع املعطيات, كما ويسمح بتنفيذ عمليات حسابية. :selectفيما يلي الصيغة األساسية لعبارة

select column1, column2, …

from table1, table2, …

where selection_criteria ;

فيحتوي على اجلداول املستخدمة يف fromعلى أمساء األعمدة املطلوبة, أما تعبري selectحيتوي تعبري على الشروط املطبقة على االستفسار هبدف حتديد االختياري whereاالستفسار, ويدل تعبري

.املطلوبة السجالت

للحصول على مجيع األعمدة املوجودة يف اجلدول وبنفس الرتتيب الذي أنشئت استعادة مجيع األعمدة: .selectبداًل من كتابة أمساء مجيع األعمدة ضمن عبارة *به, ميكن استخدام العالمة

نكتب: employeeالختيار مجيع األعمدة املوجودة يف اجلدول select * from employee;

بار أننا مل نضع شروطاً على السجالت املطلوبة فإننا سنحصل على أمساء مجيع العمال.وباعت

وبالرتتيب الذي selectنستطيع حتديد األعمدة املطلوبة بذكر أمسائها يف عبارة استعادة أعمدة حمددة: رواتبهم على نرغب أن نسرتد به معطيات األعمدة, فعلى سبيل املثال الستعادة أمساء وعناوين العمال و

الرتتيب نكتب:select name, address, salary from employee;

مل تكتب. whereن عبارة ألإعادة مجيع األسطر املوافقة لألعمدة املختارة أيضاً وهنا يتم

Page 9: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

9

إن استخدام املفاتيح األساسية مينع حصول تكرار يف املعطيات ضمن التخلص من املعطيات املتكررة:عليه قد تنتج فيه uniqueكن عندما ال يكون العمود مفتاحًا أساسيًا وال يتم تطبيق قيد اجلداول. ول قيم متكررة.

حيتوي على عناوين العمال, ويف عمليات اإلدخال Address, العمود employeeبالعودة إىل اجلدول السابقة قمنا بتحديد اسم املدينة فقط األمر الذي قد يولد معطيات متكررة.

سابقة السم العمود, كما distinctطلب منا إعادة العناوين املختلفة فقط, نقوم باستخدام الكلمة فإذا يوضح املثال:

select distinct address from employee;

يتم إعادة نتائج االستفسار بنفس ترتيب ختزينها فيزيائياً يف القاعدة ما مل حيدد ترتيب نتائج االستفسار:

قة أخرى إلظهار النتائج. وعادة ما تتم إضافة املعطيات اجلديدة يف أسفل اجلدول. لكن املستخدم طريحدود الرقم DBMSقد ال يتحقق هذا يف قواعد املعطيات القدمية والكبرية, فعندما يتجاوز نظام الـ

طيات املعرف الداخلي لألسطر ضمن اجلدول يقوم باستخدام معرفات أسطر حمذوفة. وبالتايل تظهر املع ضمن اجلدول بشكل عشوائي ال يرتبط برتتيب إدخاهلا الزمين.

.selectضمن عبارة order byإذا أردنا تغيري ترتيب النتائج املعادة نقوم باستخدام تعبري فإذا ما أردنا ترتيب العمال وفقاً ألمسائهم نكتب:

select no, name from employee

order by name;

باسم العمود الذي نريد الرتتيب وفقه. order byة حيث أتبعنا العبار إن الرتتيب السابق تصاعدي وهو الرتتيب االفرتاضي والعبارة السابقة موافقة متاماً للعبارة:

select no,name from employee

order by name asc;

أي تصاعدي. ascendingهي اختصار لـ ascحيث descendingوهي اختصار لـ descكل تنازيل نستطيع أن نستخدم ويف حال أردنا أن يتم الرتتيب بش

أي تنازيل, كما يوضح املثال:select no, name from employee

order by name desc; ولرتتيب العمال وفق رواتبهم نكتب:

select no,name from employee

order by salary;

رتب وفقه أن يكون ضمن األعمدة املختارة يف عبارة ونالحظ هنا أنه ال يشرتط يف العمود الذي نselect.

Page 10: SQL Database - Practical Session

اجللسة العملية الثالثة –مقرر قواعد البيانات –السنة الثالثة –احلاسبات والتحكم هندسة

10

على عمود واحد فقط بل ميكن استخدام أكثر من عمود يف order byوال يقتصر استعمال عبارة ترتيب النتائج املعادة, حيث يتم الرتتيب وفقًا للعمود األول مث الثاين وهكذا... كما أن باإلمكان

بأنواع ترتيب خمتلفة تصاعدية أو تنازلية, كما يوضح املثال:الرتتيب وفق أعمدة خمتلفة select no, name from employee

order by name asc, salary desc;

حيث يتم الرتتيب تصاعديًا وفق االسم, ويف حال تطابقت األمساء يتم ترتيب السجالت املتطابقة يف االسم تنازلياً وفق الراتب.