Download presentation
Presentation is loading. Please wait.
1
پايگاه داده ها
2
سرفصلها مفاهيم اصلي پايگاه داده ها: ( تعريف پايگاه داده ها، محاسن و معايب، سازمان داده ها، مقايسه پايگاههاي داده، عناصر اصلي محيط پايگاه داده و ... ) آشنايي با زبان SQL. مراحل طراحي بانک اطلاعاتي. ساير موضوعات مرتبط: ( حفاظت، پشتيباني، وساير موضوعات پيشرفته )
3
مروري بر سيستم مديريت پايکاه داده ها
يک سيستم پايگاه داده چيزي جز يک سيستم کامپيوتري براي نگهداري رکوردها نيست. بانک اطلاعاتي را مي توان يک کشوي فايلينگ الکترونيکي در نظر گرفت. کاربر چنين سيستمي مي تواند اعمالي روي اين فايلها از قبيل : 1. اضافه کردن پرونده هاي جديد خالي. 2. وارد کردن داده هاي جديد به پرونده هاي موجود. 3. بازيابي داده ها از پرونده هاي موجود.
4
دستورات SQL ايجاد يک جدول جديد CREATE TABLE
وارد کردن داده ها در جدول INSERT بازيابي اطلاعات SELECT به هنگام سازي اطلاعات UPDATE حذف داده ها از جدول DELETE حذف يک جدول DROP TABLE
5
مثالهايي ازدستورات SQL
1. افزودن INSERT INTO parts VALUES(’12’,’P15’,’ALI’,1376,20,’’); 2. انتخاب SELECT name,code,producer FROM parts WHERE Year=1372; 3. ويرايش داده UPDATE parts SET Quantity=60 WHERE Year=1372; 4. حذف يک رکورد DELETE FROM parts WHERE Code=2;
6
INSERT INTO parts VALUES(’12’,’P15’,’ALI’,1376,20,’’);
خروجي دستور اول جدول قطعات بعد از اجراي دستور : جدول قطعات قبل از اجراي دستور : توضيحات تعداد سال توليد سازنده نام کد Code Name Producer Year Quantity Comment P Ali INSERT INTO parts VALUES(’12’,’P15’,’ALI’,1376,20,’’); P Ali By Support P Hassan P Reza P Hassan By Support P Ali
7
خروجي دستور دوم Name Code Producer P3 5 Hassan
SELECT Name,Code,Producer FROM parts WHERE Year=1372; Name Code Producer P Hassan
8
خروجي دستور سوم جدول قطعات بعد از اجراي دستور :
جدول قطعات قبل از اجراي دستور : توضيحات تعداد سال توليد سازنده نام کد Code Name Producer Year Quantity Comment P Ali P Ali By Support P Hassan 60 UPDATE parts SET Quantity=60 WHERE Year=1372; P Reza P Hassan By Support P Ali
9
خروجي دستور چهارم جدول قطعات بعد از اجراي دستور :
DELETE parts FROM parts WHERE Code=2; خروجي دستور چهارم جدول قطعات بعد از اجراي دستور : جدول قطعات قبل از اجراي دستور : توضيحات تعداد سال توليد سازنده نام کد Code Name Producer Year Quantity Comment P Ali P Ali By Support P Ali P Hassan P Reza P Hassan By Support
10
يک سيستم بانک اطلاعاتي چيست؟
يک سيستم کامپيوتري است که هدف اصل آن نگهداري اطلاعات و ارائه آنها طبق نياز است. اطلاعات هر چيز مهم براي شخص يا سازمان مربوطه است.
11
اجزاء يک سيستم مديريت پايگاه داده ها Database Management System (DBMS)
3. کاربران. 1. داده ها. 4.سخت افزار. 2. نرم افزار. يشپ DataBase 1 2 3 برنامه هاي کاربردي کاربران جدول ها
12
کاربران الف : برنامه نويسان سيستم هاي کاربردي .( Application Programers) ب : کاربران نهايي ( End Users ). ج : مدير بانک اطلاعاتي ( Database Administrator ).
13
چرا از بانک اطلاعاتي بجاي سيستم دستي استفاده مي کنيم؟
1. فشردگي. 2. سرعت. 3. انجام کارهاي مکانيکي و غير فکري توسط کامپيوتر. 4. به هنگام ( Update ) بودن. 5.کنترل مرکزي روي داده ها.
14
مزاياي بانک اطلاعاتي نسبت به سيستم فايل
اشتراک داده ها ( Data Sharing) داده ها بين چندين کاربر به اشتراک گذاشته مي شوند، به جاي اينکه کپي هاي متعددي از داده ها ايجاد شود (يعني افزونگي به وجود آيد) کاهش افزونگي (تکرار) داده ها (Redundancy) با به اشتراک گذاري داده ها ، تکرار به حداقل مي رسد ولي هيچوقت به دلايل تکنيکي کاملا از بين نمي رود. ولي در هر صورت بايد هميشه در رابطه با به هنگام کردن تمام موارديکه به صورت تکراري هستند دقت شود. کاهش ناسازگاري داده ها (Inconsistency) اين مساله نتيجه نکته قبلي مي باشد يعني با کاهش افزونگي ناسازگاري هم به حداقل خواهد رسيد. به عبارت ديگر اگر داده هاي تکراري وجود داشت باشد ممکن است يکي از آنها تغيير کند ولي ديگري به هر علتي تغيير نکند و ناسازگاري بين کپي هاي متعدد داده ها به وجود آيد. همچنين اگر تکرار داده ها وجود داشت ولي به وسيله بانک اطلاعاتي کنترل مي شد، مطمئن مي شديم که تغيير در يکي باعث بروز تغيير در ديگري هم شود.
15
مزاياي بانک اطلاعاتي نسبت به سيستم فايل
پشتيباني از تراکنش (Transaction Processing) تراکنش واحد منطقي کار است و معمولا حاوي چند عمل بانک اطلاعاتي است(مثلا چند عمل به هنگام سازي). يک مثال عبارت است از انتقال مبلغي از حساب A به حساب B . بديهي است دو عمل به هنگام سازي بايد انجام شود، يکي براي کم کردن ازحساب A و ديگري براي اضافه کردن به حسابB. اگرکاربر بگويد که اين دو به هنگام سازي بخشي از يک تراکنش هستند، سيستم مي تواند تضمين کند که يا هر دو انجام مي شوند يا هيچکدام انجام نمي شوند، حتي اگر سيستم در اجراي فرايند از کار بيفتد( مثلا به دليل قطع برق). دستورات تراکنش: BeginTrans : شروع تراکنش Commit : خاتمه موفقيت آميز تراکنش و نهايي شدن تغييرات Rollback : اتمام تراکنش و برگشت تغييرات انجام شده روي داده ها به حالت قبل از شروع تراکنش
16
مزاياي بانک اطلاعاتي نسبت به سيستم فايل
جامعيت (يکپارچگي ، صحت ) داده ها (Data Integrity) جامعيت داده ها به اين معناست که مطمئن شويم داده ها در بانک اطلاعات به صورت صحيح هستند.حتي در صورت حذف افزونگي باز ممکن است بانک اطلاعات داراي داده هاي صحيح نباشد. جامعيت داده هم بايد در داخل هر جدول به تنهايي بررسي شود مثلا اگر ساعت کارکرد يک کارمند در هفته 400 ساعت باشد(به جاي 40 ساعت) که به اين قاعده اول جامعيت مي گويند و همچنين بايد در ارتباط جداول با يکديگر بررسي شود (قاعده دوم جامعيت) مثلا محل کار يک کارمند در جدول اطلاعات کارمندان دپارتمان D9 مشخص شده باشد ولي چنين دپارتماني در جدول مشخصات دپارتمانها وجود نداشته باشد. اين مي تواند به وسيله مکانيزمهاي چک کردن جامعيت هنگام ورود يا به هنگام سازي داده ها کنترل شود.
17
مزاياي بانک اطلاعاتي نسبت به سيستم فايل
امنيت (Security) تعريف محدوديتهاي امنيتي(Permission) به صورتي که دسترسي به داده هاي حساس فقط از کانالهاي مشخص و توسط کاربران مشخصي صورت گيرد.همچنين رمزنگاري داده ها(Encryption) تضاد (برخورد) نيازمنديها موازنه ميشود. با توجه به اينکه کاربران مختلف نيازمنديهاي دسترسي متفاوتي به بانک اطلاعاتي دارند و اين نيازمنديها ممکن با هم تضاد داشته باشند( مثلا چندين کاربر در يک زمان بخواهند گزارشات پيچيده اي از سيستم بگيرند) ، مدير بانک اطلاعات که از نيازها و اولويتهاي سازمان با خبر است بانک اطلاعاتي را به صورتي تنظيم مي کند که به کاربران با اولويت بالاتر سرويس بهتري داده شود. استاندارد سازي امکان پذير مي شود. ذخيره سازي و نمايش داده ها با توجه به استانداردهاي مورد نظر انجام شود. استاندارد سازي ذخيره سازي به تبادل داده ها کمک مي کند و استاندارد سازي نامگذاري ، نمايش و مستند سازي داده ها براي اشتراک و قابليت درک داده ها مفيد است.
18
مزاياي بانک اطلاعاتي نسبت به سيستم فايل
استقلال داده ها (Data Independence) استقلال داده ها به معناي مصونيت برنامه هاي کاربردي نسبت به تغيير نمايش فيزيکي و تکنيکهاي دستيابي است. برنامه هاي کاربردي که ازDBMS استفاده نمي کنند وابسته به داده ها هستند. يعني روش قرار گرفتن داده ها در فايلها و همچنين تکنيکهاي لازم براي بازيابي آنها وابسته به نيازمنديهاي آن نرم افزار خاص است. به عبارت ديگر دانش مربوط به روش سازماندهي داده ها و تکنيکهاي دسترسي به داده ها در داخل منطق و کد برنامه قرار دارد. معماري خاص پايگاه داده ها (که بعدا بررسي خواهد شد) به اين مساله کمک مي کند.
19
SQL(Standard Query Language)
Interactive SQL (محاوره اي) Embedded SQL (درج شده) SQL ويرايش هاي SQL: SQL 89 , SQL 92 , SQL 98 , SQL 2003 , SQL 2005 , SQL 2008
20
دستورات SQL به سه بخش تقسيم مي شوند:
بخش تعريف داده ها(DDL) بخش كار با داده ها(DML) بخش دستورات كنترلي(DCL)
21
1. بخش تعريف داده ها (Data Definition Language) (DDL) CREATE ALTER
دستوري جهت ايجاد TABLE و INDEX و VIEW ALTER دستوري جهت تغيير ساختار TABLE و INDEX و VIEW DROP دستوري جهت حذف TABLE و INDEX و VIEW
22
2. بخش كار با داده ها SELECT INSERT UPDATE DELETE
(Data Manipulation Language) (DML) SELECT دستوري جهت بازيابي اطلاعات از بانك اطلاعاتي INSERT دستوري جهت ورود اطلاعات به بانك اطلاعاتي UPDATE دستوري جهت بهنگام سازي اطلاعات در بانك اطلاعاتي DELETE دستوري جهت حذف اطلاعات از بانك اطلاعاتي
23
3. بخش دستورات كنترلي (Data Control Language) (DCL) GRANT REVOKE
اختصاص دسترسي به جداول و ساير عناصر پايگاه داده به كاربران REVOKE گرفتن دسترسي به جداول و ساير عناصر پايگاه داده از كاربران
24
دستور Create Table شکل کلي دستور Create Table :
CREATE TABLE base-table ( column-definition[,column-definition]…. [,primary-key-definition] [,foreign-key-definition [,foreign-key-definition]…] );
25
دستور Create Table NotNull: هنگام وارد کردن اطلاعات بايد مقداردهي شود.
کليد اوليه( Primary Key): فيلد ي (ترکيبي از فيلدها) است که مقاديررکوردهاي جدول در آن يکتا هستند . روي اين فيلد ايندکس ايجاد مي شود و رکوردهاي جدول بر اساس آن مرتب نمايش داده مي شوند. تعريف کليد اوليه يکي از راه هاي برقراري جامعيت داده ها (Integrity) است. (قاعده اول جامعيت) کليد خارجي( Foreign Key ): فيلدي که در جدول ديگر کليد اوليه است . با استفاده از اين کليد جامعيت داده ها (Integrity)چک مي شود.(قاعده دوم جامعيت). به اين نوع جامعيت داده ها، جامعيت ارجاعي(Referential Integrity ) نيزمي گويند.
26
مثالي از ايجاد جدول Sname CHAR(20) NOT NULL Status SMALLINT NOT NULL
CREATE TABLE s (s# CHAR(5) NOT NULL Sname CHAR(20) NOT NULL Status SMALLINT NOT NULL City CHAR(15) NOT NULL PRIMARY KEY (s#) ); S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 جهت ساختن كليداوليه
27
مثالي ديگر از ايجاد جدول
CREATE TABLE p (p# CHAR(6) NOT NULL Pname CHAR(20) NOT NULL Color CHAR(6) NOT NULL Weight SMALLINT NOT NULL City CHAR(15) NOT NULL PRIMARY KEY (p#) ); P Table: City Weight Color Pname P# London 12 Red Nut P1 Paris 17 Green Bolt P2 Rome Blue Screw P3 14 P4 Com P5 19 Cog P6
28
مثالي ديگر از ايجاد جدول
Table: sp Qty P# S# 300 P1 S1 200 P2 400 P3 P4 100 P5 P6 S2 S3 S4 CREATE TABLE sp (s# CHAR(5) NOT NULL, p# CHAR(6) NOT NULL, Qty INTEGER NOT NULL, PRIMARY KEY (s# , p#), FOREIGN KEY (s#) REFERENCES s, FOREIGN KEY (p#) REFERENCES p ); جهت برقراري جامعيت ارجاعي
29
ايجاد Foriegn Key توسط Access
Tools Relationships
30
ايجاد Foreign Key توسط Access
Enforce Referential Integrity: برقراري جامعيت( صحت) داده ها. Cascade Update Related Fields: در صورت تغيير يک فيلد ارتباطي در يک رکورد، فيلد مرتبط در تمام جدولها بروز رسانده مي شوند. Cascade Delete Related Records: در صورت حذف شدن يک رکورد، رکوردهاي مرتبط در تمام جدولها حذف مي شوند.
31
اضافه نمودن فيلد به جدول
ALTER TABLE s ADD Discount SMALLINT; دستور بالا جهت اضافه نمودن فيلد Discount به جدول s مي باشد.
32
حذف نمودن جدول DROP TABLE s; دستور بالا جهت حذف نمودن جدول s مي باشد.
33
شكل كلي دستور SELECT SELECT [DISTINCT] item(s) FROM table(s)
جلوگيري از سطرهاي تكراري در خروجي مي تواند مقادير ثابت ، نام فيلد و يا فرمول باشد SELECT [DISTINCT] item(s) FROM table(s) [WHERE condition] ايجاد شرط روي ركوردهاي خروجي [GROUP BY field(s)] جهت گروهبندي روي ركوردهاي خروجي [HAVING condition] ايجاد شرط روي گروههاي خروجي [ORDER BY field(s)]; جهت تنظيم ترتيب خروجي
34
مثالي از دستور SELECT SELECT s#,Status FROM s WHERE City=‘Paris’;
S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 S Table: Status S# 10 S2 30 S3
35
مثالي ديگر از دستور SELECT
Table: sp Qty P# S# 300 P1 S1 200 P2 400 P3 P4 100 P5 P6 S2 S3 S4 Table: sp P# P1 P2 P3 P4 P5 P6 SELECT p# FROM sp;
36
مثالي ديگر از دستور SELECT
Table: sp Qty P# S# 300 P1 S1 200 P2 400 P3 P4 100 P5 P6 S2 S3 S4 SELECT DISTINCT p# FROM sp; Table: sp P# P1 P2 P3 P4 P5 P6
37
مثالي ديگر از دستور SELECT
SELECT s# FROM s WHERE City=‘Paris’ AND Status>20; کد فروشندگان پاريسي که اعتبارشان بيشتر از 20 است S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 S Table: S# S3
38
QUERY SELECT [S#], Status FROM S WHERE City="Paris"; Q2 S# Status S2
20 S3 30
39
QUERY حالت Design View براي Q2
40
QUERY SELECT S# , Status FROM S ORDER BY Status DESC; Q5 S# Status S5
30 S3 S4 20 S2 S1
41
مثالي ديگر از دستور SELECT
FROM s; S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5
42
Join Query يک (Query) SELECT از چند جدول را Jion Query مي گويند.
43
City Status Sname S# Qty P# S#
S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 Table: sp Qty P# S# 300 P1 S1 200 P2 400 P3 P4 100 P5 P6 S2 S3 S4 P Table: City Weight Color Pname P# London 12 Red Nut P1 Paris 17 Green Bolt P2 Rome Blue Screw P3 14 P4 Com P5 19 Cog P6
44
Join Queries (تركيبي) SELECT s.* , p.* FROM s,p WHERE s.city = p.city;
Weight Color Pname P# S.City Status Sname S# London 12 Red Nut P1 20 Smith S1 13 Screw P4 19 Cay P6 Paris 17 Green Bolt P2 10 Jones S2 Blue Cam P5 30 Blake S3 Clark S4 14 Coy تركيب اطلاعات فروشندگان و قطعات به صورتي كه فروشنده و قطعه در يك شهر باشد.
45
Join Query SELECT S.[S#],P.[P#] FROM S,P WHERE S.City = P.City;
روش اول SELECT S.[S#],P.[P#] FROM S INNER JOIN P ON S.City = P.City; روش دوم
46
مثالي ديگر از Join SELECT s.s# , p.p# FROM s,p WHERE s.city > p.city P# S# P1 S2 P4 P6 S3 كد فروشنده و كد قطعه در صورتي كه شهر فروشنده از شهر قطعه بزرگتر باشد. ( از لحاظ مقايسه ي رشته ها )
47
توابع تجمعي (Aggregate)
(تعداد) COUNT (مجموع) SUM (ميانگين) AVG (حداكثر) MAX (حداقل) MIN
48
مثالهايي از توابع AGGREGATE
نمايش تعداد فروشندگان (تعداد رکوردهاي جدول S ) SELECT Count(*) FROM S; Count(*) 5
49
مثالهايي از توابع AGGREGATE
تعداد فروشندگاني که قطعه P2 را فروخته اند: SELECT Count(*) FROM SP WHERE [P#]='P2'; Count(*) 4
50
مثالهايي از توابع AGGREGATE
مجموع فروش قطعه P2: SELECT SUM(QTY) FROM SP WHERE [P#]='P2'; SUM(QTY) 1000
51
مثال از توابع تجمعي (Aggregate)
SELECT COUNT(DISTINCT S#) FROM SP نمايش تعداد فروشندگاني قطعه اي را فروخته اند (4)
52
Queryهاي گروه بندي شده مجموع فروش هر قطعه :
SELECT [P#],SUM(QTY) FROM SP GROUP BY [P#]; P# SUM(QTY) P1 600 P2 1000 P3 400 P4 500 P5 P6 100
53
City Status Sname S# Qty P# S#
S Table: City Status Sname S# London 20 Smith S1 Paris 10 Jones S2 30 Blake S3 Clark S4 Athens Adams S5 Table: sp Qty P# S# 300 P1 S1 200 P2 400 P3 P4 100 P5 P6 S2 S3 S4 P Table: City Weight Color Pname P# London 12 Red Nut P1 Paris 17 Green Bolt P2 Rome Blue Screw P3 14 P4 Com P5 19 Cog P6
54
Queryهاي گروه بندي شده با Having
مجموع فروش هر قطعه براي قطعاتي که مجموع فروششان بيشتر از 100 است : SELECT [P#],SUM(QTY) FROM SP GROUP BY [P#] HAVING SUM(QTY)>100; P# SUM(QTY) P1 600 P2 1000 P3 400 P4 500 P5 P6 100
55
توابع ديگرSQL اطلاعات فروش به صورتي که حرف اول نام فروشنده ‘S’ باشد:
SELECT S.* FROM S WHERE S.Sname LIKE "S%"; S# SName Status City S1 Smith 20 London
56
توابع ديگرSQL فيلد Status مقدار دهي نشده باشد:
SELECT S.* FROM S WHERE Status IS NULL يا IS NULL(Status); S# SName Status City Status = NULL
57
زير QUERY ( SUB QUERY ) خارجي محاسبه مي شودQuery داخلي و سپس SubQuery هاي تودر تو ، ابتدا Query - در IN - اپراتور چک کردن عضويت در يک مجموعه از مقادير است SELECT SName FROM S WHERE [S#] IN ( SELECT [S#] FROM SP WHERE P#="P2"); SName Smith Jones Blake Clark را فروخته اند P2 کد فروشندگاني که قطعه (‘s1’,’s2’,’s3’,’s4’) نام فروشندگاني که قطعه P2 را فروخته اند
58
زير QUERY ( SUB QUERY ) مثال قبل بدون استفاده از زير Query (با Join)
SELECT SName FROM S,SP WHERE S.[S#]=SP.[S#] AND SP.[P#]="P2"; SName Smith Jones Blake Clark نکته: تمام Join Query ها را با Sub Query نيز مي توان نوشت ولي عکس آن هميشه صادق نيست
59
زير QUERY ( SUB QUERY ) نام فروشندگاني که قطعه اي با رنگ قرمز را فروخته اند SELECT SName FROM S WHERE [S#] IN (SELECT [S#] FROM SP WHERE [P#] IN ( SELECT [P#] FROM P WHERE COLOR="Red")); SName Smith Jones Clark
60
زير QUERY ( SUB QUERY ) مثال قبل بدون استفاده از زير Query
SELECT DISTINCT SName FROM S,SP,P WHERE S.[S#]=SP.[S#] AND SP.[P#]=P.[P#] AND P.COLOR="Red"; SName Smith Jones Clark
61
زير QUERY ( SUB QUERY ) کد فروشندگاني که با S1 همشهري هستند
SELECT [S#] FROM S WHERE City = (SELECT City FROM S WHERE [S#]="S1"); S# S1 S4
62
نکته: زير QUERY ( SUB QUERY )
وقتي که در Sub Query از ( < , > <> , <= , >=)استفاده مي کنيم Query داخلي بايد فقط يک مقدار را برگرداند.
63
زير QUERY ( SUB QUERY ) که فروشندگاني که اعتبارشان کمتر از بيشترين مقدار اعتبار فروشندگان است . Select s# From s Where status < ( select max ( status) From s); S# S1 S2 S4
64
زير QUERY ( SUB QUERY ) = نام فروشندگاني که قطعه P2 را فروخته اند :
SELECT SName FROM S WHERE EXISTS (SELECT * FROM SP WHERE [s#]=S.[S#] AND [P#]="P2" ); SName Smith Jones Blake Clark
65
زير QUERY ( SUB QUERY ) نکاتي درمورد Exists:
اگر دستور Select بعد از Exists بتواند Join شود ( رکوردي را برگرداند و شرط ذکر شده صادق باشد ) مقدار Exists درست (True ) خواهد شد. اگر دستور Select بعد از Exists هيچ رکوردي را برنگرداند مقدار Exists غلط ( False ) مي شود. وقتي Exists بکار مي بريم در Select بعدي به جاي نام فيلد ، * مي آيد و شرط JOIN هم استفاده مي شود .(وقتي از IN استفاده مي کنيم درSelect بعدي نام فيلد استفاده شده و نيازي هم به JOIN نيست) وقتي از Exists استفاده مي کنيم براي ترجمه فارسي از بالا به پايين حرکت مي کنيم
66
زير QUERY ( SUB QUERY ) نام فروشندگاني که قطعه P2 را فروخته اند ( به 3 شکل) SELECT SName FROM S,SP WHERE S.[S#]=SP.[S#] AND SP.[P#]="P2"; SELECT SName FROM S WHERE [S#] IN )SELECT [S#] FROM SP WHERE SP.[P#]="P2"); SELECT SName FROM S WHERE EXISTS (SELECT * FROM SP WHERE SP.[S#]=S.[S#] AND SP.[P#]="P2" );
67
زير QUERY ( SUB QUERY ) نام فروشندگاني که قطعه P2 را فروخته اند :
SELECT SName FROM S WHERE [S#] IN (SELECT [S#] FROM SP WHERE [P#]="P2" ); نام فروشندگاني که قطعه P2 را نفروخته اند : SELECT SName FROM S WHERE [S#] NOT IN (SELECT [S#] FROM SP WHERE [P#]="P2" ); SName Adams
68
زير QUERY ( SUB QUERY ) نام فروشندگاني که قطعه P2 را فروخته اند :
SELECT SName FROM S WHERE EXISTS (SELECT * FROM SP WHERE [S#]=S.[S#] AND [P#]="P2" ); نام فروشندگاني که قطعه P2 را نفروخته اند : SELECT SName FROM S WHERE NOT EXISTS (SELECT * FROM SP WHERE [S#]=S.[S#] AND [P#]="P2" ); SName Adams
69
زير QUERY ( SUB QUERY ) = نام فروشندگاني که تمام قطعات را فروخته اند
نام فروشندگاني که وجود ندارد قطعه اي که وجود ندارد فروشي توسط آن فروشنده براي آن قطعه = نام فروشندگاني که وجود ندارد قطعه اي که آن را نفروخته اند = نام فروشندگاني که تمام قطعات را فروخته اند SELECT SNAME FROME S WHERE NOT EXISTS ) SELECT * FROM P WHERE NOT EXISTS ( SELECT * FROM SP WHERE SP.S# = S. S# AND SP.P# = P.P #)); SName Smith نکته: اين Query را با Not IN نمي توان نوشت
70
اجتماع دو SELECT کد قطعاتي که وزنشان بيشتر از 16 است يا توسط فروشنده S2 فروخته شده اند SELECT [P#] FROM P WHERE Weight >16 UNION SELECT [P#] FROM SP WHERE [S#]= "S2" ; P# P2 P3 P6 P# P1 P2 P3 P6 P# P1 P2
71
اجتماع دو SELECT نکته: زماني از اجتماع ( UNION ) استفاده مي کنيم که در صورت مسئله به کلمه ( يا ) برخورد کنيم اشتراک دو مجموعه از مقادير توسط JOIN صورت مي گيرد: کد قطعاتي که وزنشان بيشتر از 16 است و توسط فروشنده S2 فروخته شده اند: SELECT P# FROM P,SP WHERE P.P#=SP.P# AND P.Weight > 16 AND SP.S# = “S2”; P# P2
72
دستور UPDATE شکل کلي دستور Update : UPDATE table
SET field=scalar_expression [WHERE condition]; Scalar_expression : عبارتي که از مقادير ثابت و يا فيلدها تشکيل شده است
73
دستور UPDATE به وزن قطعه P2 5 واحد اضافه کرده و رنگ آنرا به زرد تغيير مي دهد UPDATE P SET Color= "Yellow" , Weight=Weight+5 WHERE [P#]= "P2" ; P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Green 17 Paris P3 Screw Blue Rome P4 Crew 14 P5 Cam blue P6 cage P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Yellow 22 Paris P3 Screw Blue 17 Rome P4 Crew 14 P5 Cam blue P6 cage
74
دستور UPDATE اعتبار فروشندگان لندني را دو برابر مي کند
UPDATE S SET Status=Status* WHERE City= "London" ; S# SName Status City S1 Smith 40 London S2 Jones 20 Paris S3 Black 30 S4 Clarck S5 Adams Athens S# SName Status City S1 Smith 20 London S2 Jones Paris S3 Black 30 S4 Clarck S5 Adams Athens
75
دستور Insert افزودن يک رکورد به جدول P
INSERT INTO P ([P#],CITY,WEIGHT) VALUES ("P7 "," Athens ",24); P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Yellow 22 Paris P3 Screw Blue 17 Rome P4 Crew 14 P5 Cam blue P6 Cage P7 24 Athens P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Yellow 22 Paris P3 Screw Blue 17 Rome P4 Crew 14 P5 Cam blue P6 cage
76
دستور Insert افزودن يک رکورد به جدول P
INSERT INTO P VALUES ("P8 ", "Sprocket", "Pink",14, "Nice"); P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Yellow 22 Paris P3 Screw Blue 17 Rome P4 Crew 14 P5 Cam blue P6 cage P7 24 Athens P8 Sprocket Pink Nice P# PName Color Weight City P1 Nutt Red 12 London P2 Bolt Yellow 22 Paris P3 Screw Blue 17 Rome P4 Crew 14 P5 Cam blue P6 Cage P7 24 Athens
77
دستور Insert افزودن يک رکورد به جدول P
INSERT INTO SP ([S#],[P#],QTY) VALUES ("S20", "P20", 1000); خطا مي دهدزيرا به علت تعريف کليد خارجي ( (Referential Integrity فيلد S# با جدول S در ارتباط است و رکورد S20 در جدولS وجود ندارد.
78
دستور Insert افزودن يک رکورد به جدول با استفاده از Sub Query
CREATE TABLE Temp ( P# Char(6) Not Null, TotQty Integer Not Null, Primary Key ( P# ) ); CREATE UNIQUE INDEX X ON Temp([P#]); Temp P# TotQty P1 400 P2 1000 P3 P4 500 P5 700 P6 100 INSERT INTO Temp ([S#],TotQTY) SELECT [P#],SUM(QTY) FROM SP GROUP BY [P#];
79
دستور Delete شکل کلي دستور Delete : DELETE FROM table
[WHERE condition]; اين دستور يک يا چند سطر را حذف مي کند.
80
دستور Delete حذف تمام رکوردهاي جدول SP DELETE FROM SP;
81
دستور Delete حذف رکوردي با شماره S5 DELETE FROM S WHERE [S#]="S5"; S#
SName Status City S1 Smith 40 London S2 Jones 20 Paris S3 Black 30 S4 Clarck S5 Adams Athens S# SName Status City S1 Smith 40 London S2 Jones 20 Paris S3 Black 30 S4 Clarck
82
دستور Delete حذف فروش فروشندگان لندني
DELETE FROM SP WHERE "London" = ( SELECT City FROM S WHERE S.[S#]=SP.[S#] ); S# P# QTY S1 P1 P2 P3 P4 P5 P6 S# P# QTY S2 P1 300 P2 400 S3 200 S4 P4 P5 S# P# QTY S2 P1 300 P2 400 S3 200
83
تمرين خروجي دستور زير به همراه متن فارسي آن:
خروجي دستور زير به همراه متن فارسي آن: SELECT P.[P#],"WEIGHT IN GRAMS",P.WEIGHT*454, P.COLOR,"MAX SHIPPED QUANTITY=",MAX(SP.QTY) FROM P,SP WHERE P.[P#]=SP.[P#] AND (P.COLOR="RED" OR P.COLOR="BLUE" ) AND SP.QTY>200 GROUP BY P.[P#] HAVING SUM(QTY)>350 ORDER BY 6,P.[P#] DESC
84
ارتباطات بين موجوديت ها
درجه ارتباط: يک به يک يک به چند چند به چند A B A B A B قطعيت ارتباط: قطعي غير قطعي A B A B
85
به ازاي يک نمونه (رکورد ) از موجوديت A بايد يک نمونه از B باشد .
ارتباط يک به يک A B به ازاي يک نمونه (رکورد ) از موجوديت A بايد يک نمونه از B باشد . به ازاي يک نمونه (رکورد ) از موجوديت B بايد يک نمونه از A باشد . ارتباط يک به چند A B به ازاي يک نمونه (رکورد ) از موجوديت A بايد يک يا چند نمونه از B باشد . به ازاي يک نمونه (رکورد ) از موجوديت B بايد يک نمونه از A باشد .
86
*دانشجو ممکن است چند درس ثبت نامي داشته باشد
*يک ثبت نام درس بايد براي يک دانشجو باشد درس دانشجو کد دانشجو کد درس تاريخ ثبت نام 8310 100 1386/7/1 105 8320 101 1386/11/1 8340 کد دانشجو نام نام خانوادگي 8310 علي احمدي 8320 حسن رضايي 8330 رضا حسيني 8340 احمد محمدي
87
ارتباط ياي انحصاري (XOR)
A XOR B A B درخواست درخواست جديد درخواست انتقال درخواست بايد به عنوان يک درخواست انتقال و يا درخواست جديد در نظر گرفته شود
88
ارتباط يک موجوديت با خودش
کد قطعه نام قطعه کد قطعه تشکيل دهنده تعداد 01 پيچ 02 چرخدنده 03 سوپاپ 10 موتور 25 4 قطعه يک قطعه مي تواند از چند قطعه ديگر تشکيل شده باشد و يک قطعه مي تواند در چند قطعه ديگر به کار رفته باشد سوال: با توجه به راه حل ارائه شده براي حل مشکل تکرار اطلاعات در ارتباط چند به چند ، جدول روبرو به چند جدول و با چه فيلدهايي بايد تبديل شود؟
89
چندين ارتباط بين دو موجوديت
صاحب حساب حساب بانکي صاحب حساب بايد داراي يک يا چند حساب بانکي باشد يک حساب بانکي بايد متعلق به يک يا چند صاحب حساب باشد يک صاحب حساب ممکن است معرف چندين حساب بانکي باشد يک حساب بانکي ممکن است توسط يک نفر معرفي شده باشد.
90
نرمال سازي مثال : فرض کنيد براي يک سيستم ساده سفارش کالا موجوديت هاي زير تشخيص داده شده اند : الف) مشتري ( کد مشتري ، نام ، تلفن ، آدرس ، شماره حساب بانکي ) ب) سفارش ( کد سفارش ، کد مشتري ، نام مشتري ، تلفن ، تاريخ دريافت سفارش ، { کد کالا ، نام کالا ، واحد ، تعداد سفارش } ) ج) صورتحساب ( کد صورتحساب ، کد سفارش ، کد مشتري ، نام مشتري، آدرس ، تلفن ، تاريخ صورتحساب ، { کد کالا، نام کالا، واحد ، تعداد سفارش ، قيمت واحد ، قيمت کل } ، مبلغ کل صورتحساب ) د) کالا ( کد کالا ، نام کالا ، واحد ، نقطه سفارش ، مکان ) مشتري سفارش صورتحساب کالا
91
برگ سفارش کالا کد سفارش :. تاريخ سفارش :. کد مشتري :. نام مشتري:
برگ سفارش کالا کد سفارش : تاريخ سفارش : کد مشتري : نام مشتري: تلفن مشتري : آدرس مشتري: تعداد سفارش واحد نام کالا کد کالا
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.