20
( c כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו.) 2018 1 שאילתותSQL בSQL קיימת שאילתה בסיסית אחת לאיחזור מידע מבסיס הנתונים: פקודתselect . קיימות אופציות רבות לפקודת הselect בSQL , שיתוארו בהדרגה. נשתמש בתבניות בסיס הנתונים של מערכת הבנק:Branch-scheme=(branch-name, assets, branch-city) Customer-scheme=(customer-name, street,customer-city) Deposit-scheme=(branch-name, account-number, customer-name, balance) Borrow-scheme=(branch-name, loan-number, customer-name, amount) נציין כי יש הבדל חשוב בין שאילתתSQL ב לבין שאילתת אלגברת יחסים:SQL טבלה עשויה לה כיל שתיn . כלומר טבלת)או יותר( יות זהותSQL אינה, בדרך כלל, קבוצה שלn יות, כיוון שבקבוצה אין משמעות לשני אברים זהים. טבלותSQL מהוות אוסף,multiset של)או שק( n יות. טבלאותSQL תהיינה קבוצות אם י תקיימו עליהן אילוצים של מפתח או אם נעשה שימוש באופציתdistinct . 1 . שאילתותSQL בסיסיות שאילתתSQL הבסיסית מורכבת משלושת פסוקים:select, from, where . המבנה של השאילתה הבסיסית הוא:select <attribute list> from <table list> where <condition> כאשר: <attribute list> היא רשימה של תכונות שאת ערכיהן מאחזרים. <table list> היא רשימה של שמות יחסים שעליהם פועלת השאילתה. <condition> הוא ביטוי בוליאני המזהה את הn יות המאוחזרות. נציג כעת את השאילתה הבסיסית בעזרת כמה דוגמאות. שאילתא0 מצא את הרחוב ושם העיר של לקוח ששמו 'Morag .' select street, customer-city from customer where customer-name=’Morag’ שאילתה זו ניגשה רק ליחסcustomer המופיע בפסוקfrom . השאילתה מאחזרת את הn יות ביחסcustomer המקיימות את התנאי בפסוק הwhere , ואז מטילה את התוצאה על התכונותstreet וcustomer-city . שאילתה זו שקולה לביטוי הבא באלגברת יחסים:street, customer-city (customer-name=’Morag’ (customer)) כלומר כאשר מופיע יחס אחד בפסוק הfrom של שאילתתSQL )כמעט( , השאילתה שקולה לצירוף של פעולות בחירה והטלה של אלגברת יחסים. פסוק הselect מגדיר את התכונות שעליהן מבצעים הטלה, ופסוק הwhere מגדיר את תנאי הבחירה. ההבדל היחיד הוא שהתוצאה של שאילתתSQL עשויה לכלולn יות כפולות, כיוון שהשאילתה אינה כופה את האילוץ שיחס הוא למעשה קבוצה.

שאילתות ב SQL - mta.ac.ilgideon/courses/dbms/SQL.pdf · :distinct ב םישמתשמ select distinct balance from deposit where branch-name=’Aviv’ תלועפ :םיסחי

  • Upload
    lytuong

  • View
    231

  • Download
    0

Embed Size (px)

Citation preview

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

1

SQLשאילתות

. קיימות selectקיימת שאילתה בסיסית אחת לאיחזור מידע מבסיס הנתונים: פקודת SQLב , שיתוארו בהדרגה. נשתמש בתבניות בסיס הנתונים של SQLב selectאופציות רבות לפקודת ה

מערכת הבנק:

•Branch-scheme=(branch-name, assets, branch-city)

•Customer-scheme=(customer-name, street,customer-city)

•Deposit-scheme=(branch-name, account-number, customer-name, balance)

•Borrow-scheme=(branch-name, loan-number, customer-name, amount)

טבלה עשויה SQLלבין שאילתת אלגברת יחסים: ב SQLנציין כי יש הבדל חשוב בין שאילתת יות, כיוון nשל קבוצהאינה, בדרך כלל, SQLיות זהות )או יותר(. כלומר טבלת nכיל שתי לה

)או שק( של multisetמהוות אוסף, SQLשבקבוצה אין משמעות לשני אברים זהים. טבלות n יות. טבלאותSQL תקיימו עליהן אילוצים של מפתח או אם נעשה שימוש יתהיינה קבוצות אם

. distinctבאופצית

בסיסיות SQLשאילתות .1

. המבנה של select, from, whereהבסיסית מורכבת משלושת פסוקים: SQLשאילתת השאילתה הבסיסית הוא:

select <attribute list>

from <table list>

where <condition> כאשר:

<attribute list> .היא רשימה של תכונות שאת ערכיהן מאחזרים

<table list> .היא רשימה של שמות יחסים שעליהם פועלת השאילתה <condition> הוא ביטוי בוליאני המזהה את הn.יות המאוחזרות

נציג כעת את השאילתה הבסיסית בעזרת כמה דוגמאות.

0שאילתא '.Moragמצא את הרחוב ושם העיר של לקוח ששמו '

select street, customer-city

from customer

where customer-name=’Morag’

יות n. השאילתה מאחזרת את הfromהמופיע בפסוק customerשאילתה זו ניגשה רק ליחס , ואז מטילה את התוצאה על התכונות whereהמקיימות את התנאי בפסוק ה customerביחס

street וcustomer-city:שאילתה זו שקולה לביטוי הבא באלגברת יחסים .

street, customer-city (customer-name=’Morag’ (customer))

, השאילתה שקולה )כמעט( SQLשל שאילתת fromכלומר כאשר מופיע יחס אחד בפסוק ה מגדיר את התכונות שעליהן selectלצירוף של פעולות בחירה והטלה של אלגברת יחסים. פסוק ה

מגדיר את תנאי הבחירה. whereמבצעים הטלה, ופסוק ה יות כפולות, כיוון שהשאילתה nעשויה לכלול SQLההבדל היחיד הוא שהתוצאה של שאילתת

אינה כופה את האילוץ שיחס הוא למעשה קבוצה.

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

2

1שאילתא

ש"ח 300בסכום מעל ’Aviv‘מצא את שמות הלקוחות שיש להם חשבון חיסכון בסניף select customer-name

from deposit

where branch-name=’Aviv' and balance>300

and, or, notניתן להרכיב פרדיקטים מורכבים מפרדיקטים פשוטים יותר ע"י המקשרים בדומה לאלגברת יחסים.

מכפלה קרטזית .2

2שאילתא '.Avivמצא את שמות וכתובות הלקוחות שיש להם חשבון חיסכון בסניף '

select customer.customer-name,street, customer-city

from customer, deposit

where customer.customer-name = deposit.customer-name

and branch-name=’Aviv'

בחירה, והתנאי -הוא תנאי 'branch-name=’Avivהתנאי whereבפסוק ה customer.customer-name = deposit.customer-name הוא תנאי הצירוף בין היחסים

deposit וcustomer ,כפי שניתן לראות כאשר מופיעות שתי תכונות )או יותר( בעלות שם זהה .חייבים לשייך כל אחת מהתכונות ליחס שאליו היא שייכת. הדבר נעשה כמו באלגברת היחסים,

(.deposit.customer-nameע"י הקדמת שם היחס לשם התכונה, והפרדתם בעזרת נקודה )למשל

לשאילתת אלגברת יחסים הכוללת מכפלה קרטזית, בחירה והטלה:שאילתה זו שקולה ( city-name street, customer-customer.customer

customer.customer-name =deposit. customer-name branch-name=’Aviv' (customer x deposit))

3שאילתא

’Jaffa‘ניף כלשהו הנמצא בעיר מצא את שמות וכתובות הלקוחות שיש להם חשבון חיסכון בסselect customer.customer-name,street, customer-city

from customer, deposit, branch

where customer.customer-name = deposit.customer-name

and deposit.branch-name= branch.branch-name and branch-city=’Jaffa’

כינוי .3 4שאילתא

’Morag‘את שמות וכתובות הלקוחות שגרים בעיר שבה גר מצא

select C.customer-name,C.street, C.customer-city

from customer M, customer C

where C.customer-city = M.customer-city and M. customer-name=’Morag’

מיד אחרי שם היחס בפסוק ה . הכינוי יבוא customerליחס Cו Mכאן הכרזנו על כינויים from ניתן לחשוב על הכינויים .C וM כעל שני עותקים שונים של היחסcustomer ניתן ;

, גם אם אין בה גישה ליחס מסוים יותר מפעם אחת. למשל SQLלהשתמש בכינוי בכל שאילתת בצורה הבאה: 2ניתן לכתוב את שאילתה

select C.customer-name,street, customer-city

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

3

from customer C, deposit D

where C.customer-name = D.customer-name

and branch-name=’Aviv'

ושימוש ב * whereהעדר פסוק .4

יות. כלומר כל n, אין בשאילתה תנאי בחירה על whereפסוק אינה כוללת SQLכאשר שאילתת כאשר . where TRUEה. זה שקול ל ייבחרו בתוצאת השאילת fromיות של היחס בפסוק ה nה

יות של nכולל יותר מיחס אחד, אזי כל ה fromופסוק ה whereפסוק אינה כוללת SQLשאילתת יבחרו. fromהמכפלה הקרטזית של היחסים בפסוק ה

5שאילתא

מצא את שמות כל סניפי הבנקselect branch-name

from branch 6שאילתא

יות של שמות סניפים עם מספרי חשבונות חיסכוןמצא את כל הקומבינצselect branch-name, account-number

from branch, deposit

יות שנבחרו, אין צורך לציין את שם כל התכונות בפסוק nכדי לאחזר את ערכי כל התכונות של התציג את כל 7 שקול ל"כל התכונות". שאילתה select )כוכבית( בפסוק ה *. ציון של selectה

depositתציג את כל התכונות של 8; שאילתה ’Jaffa‘ערכי התכונות של סניפים הנמצאים בעיר והלקוחות המהווים בעלי ’Aviv‘לכל חשבונות החיסכון בסניף customerואת כל התכונות של

החשבונות הללו.

7שאילתה select *

from branch

where branch-city=’Jaffa’ 8אילתה ש

select *

from customer, deposit

where customer.customer-name = deposit.customer-name

and branch-name=’Aviv'

SQLטבלאות כקבוצות ב .5

אינה מתייחסת ליחס )בסיסי או תוצאה של שאילתה( כאל קבוצה. SQLכפי שצוין, בדרך כלל אינה מסלקת כפילויות כאלה SQLות זהות אחדות. יnבתוצאה של שאילתה, עשויות להופיע

באופן אוטומטי מכמה סיבות:סילוק כפילויות היא פעולה יקרה. אחת הדרכים היעילות לממש אותה היא ראשית למיין את

יות ואז לסלק כפילויות.nה יות כפילות בתוצאה של שאילתה.nהמשתמש עשוי להיות מעוניין לראות

יות כפילות.nיות, ברוב המקרים אין מעוניינים לסלק nופעלת על כאשר פונקצית הקבצה מ

, selectבפסוק ה distinctיות כפילות משתמשים במילת המפתח nאם בכל זאת מעוניינים לסלק SQLיות שונות זו מזו תישארנה בתוצאה. זה הופך את תוצאת שאילתת nשפירושה היא שרק

ורמלית של יחס.יות בהתאם להגדרה הפnליחס, קבוצה של . אם סכום ’Aviv‘תאחזר את סכומי היתרות של חשבונות החיסכון בסניף 9למשל, שאילתה

פעמים אחדות )למשל אם חשבון מסוים שייך ללקוחות אחדים(, הוא depositמסוים מופיע ביחס יופיע פעמים אחדות גם בתוצאת השאילתה:

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

4

9שאילתה

.’Aviv‘יף בסנמצא את יתרות חשבונות החיסכון

select balance

from deposit

where branch-name=’Aviv’

אם מעוניינים רק ברשימת ערכים ללא כפילויות, כלומר שכל סכום יופיע פעם אחת בלבד,

: distinctמשתמשים ב select distinct balance

from deposit

where branch-name=’Aviv’

SQL לותממשה באופן ישיר את פעו-( הקבוצהset operations של אלגברת יחסים: פעולת )( וחיתוך exceptאו minus(, וכן בניבים שונים גם פעולות של החיסור )unionהאיחוד )

(intersectהתוצאה של שאילתה המשתמש בפעולת .)- קבוצה היא תמיד קבוצה, כלומרn יותמייד אחרי הפעולה, למשל allתח כפילות מסולקות מהתוצאה )אלא אם כן מופיעה מילת המפ

union allקבוצה מוגדרת רק אם היחסים שעליהם היא פועלת -(. כמו באלגברת יחסים, פעולת הם בעלי תבניות תואמות.

10שאילתה

)בעלי חשבונות חיסכון ו/או חשבונות הלוואה( ’Aviv‘מצא את שמות כל הלקוחות של סניף

(select customer-name

from deposit

where branch-name=’Aviv’)

union

(select customer-name

from borrow

where branch-name=’Aviv’)

SQLחישובים בשאילתות .6. whereאו כחלק מפסוק ה selectבפסוק ה SQLניתן לכלול חישובים אריתמטיים בשאילתת

'/' )חיבור, חיסור, כפל, חילוק( על ', '*' ו-ניתן להפעיל את האופרטורים האריתמטיים '+' , ' ערכים נומריים בשאילתה.

11שאילתה

אם כל חשבון חיסכון ’Aviv‘הראה את מספרי החשבון ואת יתרות כל חשבונות החיסכון בסניף מיתרתו. 10%בסניף זה יזכה בתוספת של

select account-number, 1.1*balance

from deposit

where branch-name=’Aviv’

12שאילתה

, המתאר את interest -נניח כי תבנית חשבונות החיסכון כוללת גם את התכונה "ריבית שנתית" מצא את שם הבעלים, מספרי חשבונות החיסכון ואת היתרות של . הריבית השנתית באחוזים

ש"ח. 500חשבונות החיסכון שהריבית השנתית שלהם גדולה מ

select customer-name, account-number, balance

from deposit

where balance*interest/100 > 500

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

5

שאילתות מקוננות והשוואת קבוצות .7

הנתונים יאוחזרו ראשית ואז יעשה בהם -ביצוע שאילתות מסוימות מחייב כי ערכים מבסיסות מקוננות, שימוש בתנאי של השוואה. שאילתות מסוג זה ניתן לנסח על ידי שימוש בשאילת

של שאילתה אחרת. השאילתה ה"אחרת" whereשלמות בתוך פסוק selectשמהוות שאילתות למשל, בוצעה ללא שאילתה מקוננת, אך 9(.שאילתה outer queryנקראת "שאילתה חיצונית" )

ניתן לבצעה גם במבנה מקונן:select customer-name

from customer

where customer-name in (select customer-name

from deposit

where branch-name=’Aviv’)

or

customer-name in (select customer-name

from borrow

where branch-name=’Aviv’)

היות והשאילתה הראשית שולפת distinctראוי לשים לב כי בשאילתה הראשית אין צורך לציין יות nשבו היא מהווה מפתח קביל, כך ש customerהיחס מ customer-nameאת הערך של

של השאילתה הראשית היינו מציינים את fromכפילות לא תיתכנה בתוצאה. אילו בפסוק ה .selectבפסוק ה distinct במקום זאת, היינו צריכים לציין depositהיחס

ות בעלות אותו מבנה. יnית ערכים בסוגריים עם קבוצה של nיכול גם להשוות inהאופרטור למשל השאילתה

13שאילתה

select customer-name

from customer

where (street, customer-city) in (select street, customer-city

from customer

where customer-name=’Morag’)

. ’Morag‘תבחר את שמותיהם של כל הלקוחות שגרים באותו רחוב ועיר שבה גר הלקוח

vיש מספר אופרטורי השוואה נוספים שבאמצעותם ניתן להשוות שערך יחיד inבנוסף לאופרטור )בדרך כלל שאילתה מקוננת(. V)בדרך כלל ערך של תכונה מסוימת( לקבוצת ערכים

, ולכן שקול Vשווה לאחד הערכים בקבוצה vאם הערך trueמחזיר ערך some=האופרטור . <> ,=> ,> ,=< ,<כוללים: some. אופרטורים נוספים שניתן לשלב עם inלאופרטור

(. למשל, <> ,=> ,> ,=< ,< ,=לכל אחד מהאופרטורים הנ"ל ) allניתן לצרף את מילת המפתח . כדוגמה:Vגדול מכל הערכים בקבוצה vאם הערך true( יחזיר v > all Vהתנאי )

14שאילתה

’Aviv‘שיש להם חשבון חסכון בעל יתרה הגדולה מכל היתרות בסניף מצא את שמות החוסכיםselect distinct customer-name

from deposit

where balance > all (select balance

from deposit

where branch-name=’Aviv’)

-ל דובמקרה הכללי עשויות להיות מספר רמות של שאילתות מקוננות. שוב קיימת אפשרות שמשמעות של שמות התכונות אם קיימות תכונות בעלות שמות זהים בשאילתה החיצונית

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

6

ובשאילתה הפנימית. הכלל הוא שאם מצוינת תכונה ללא שם יחס, היא מתייחסת ליחס המוגדר בשאילתה המקוננת הפנימית. כלל זה דומה מאד לצורה שבה מוגדרים משתנים לוקליים בשפות

קל. לדוגמה:עיליות רבות כמו פס

15שאילתה מצא את הסכום ואת מספר החשבון של כל חשבון הלוואה שיש חשבון חיסכון בסכום זהה לסכום

של חשבון ההלוואה באותו סניף.select distinct loan-number, amount

from borrow B

where amount in (select balance

from deposit

where branch-name=B.branch-name)

-branchכיוון שתכונה זו מתייחסת ל תכונה B.branch-nameבשאילתה המקוננת חייבים לציין

name שלborrow בשאילתה החיצונית. התכונהbranch-name ללא ציון שם יחס מתייחסת בשאילתה הפנימית. depositליחס

תוך select… from … whereבלוקים של באופן כללי, שאילתה הנכתבת במבנה מקונן של

או אופרטור השוויון יכולה תמיד להיכתב בשאילתה של בלוק אחד. inשימוש ב יכולה להיכתב גם בצורה: 15למשל שאילתה מס'

select distinct loan-number, amount

from borrow B, deposit D

where B.branch-name=D.branch-name and amount = balance

SQL וללת גם אופרטור השוואה כcontains בין קבוצות. אופרטור זה אינו ממומש בחלק מןאם אחת true. אופרטור זה משווה שתי קבוצות ומחזיר ערך SQLהניבים המסחריים של

הקבוצות מכילה את הקבוצה האחרת.

16שאילתה חיסכון. יש בהם חשבונות ’jaffa‘מצא את שמות הסניפים שלכל האנשים הגרים ב

select branch-name

from branch B

where (select customer-name

from deposit

where branch-name=B.branch-name)

contains

(select customer-name

from customer

where customer-city=’jaffa’)

שאילתה החיצונית( בשאילתה זו, השאילתה המקוננת השנייה )שהיא קבועה ואינה מקושרת ל( השאילתה המקוננת הראשונה Bיה של סניף )n. לכל ’jaffa‘מוצאת את שמות כל הלקוחות ב

מוצאת את שמות הלקוחות שביש להם חשבון חיסכון באותו סניף. שים לב כי פעולה זו שקולה לפעולת החילוק באלגברת היחסים.

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

7

existsפונקצית .8

בדוק אם התוצאה של שאילתה מקוננת אינה ריקה. הפונקציה ל SQLמשמשת ב existsפונקצית יות . לדוגמא:nהשאילתה מכילה -אם תת trueמחזירה ערך

17שאילתה

’Aviv‘מצא את שמות האנשים שיש להם חשבון חיסכון וגם חשבון הלוואה בסניף select distinct customer-name

from deposit D

where branch-name=’Aviv’ and

exists (select *

from borrow B

where branch-name=’Aviv’ and D.customer-name=B. customer-name )

.9במבנה של שאילתה intersectשאילתה זו ניתן כמובן לבצע גם בדרכים אחרות, למשל בעזרת ריקה.השאילתה -אם תת trueהמחזירה ערך not existsניתן באופן דומה להשתמש ב

18שאילתה

ש"ח. 400מצא את שמות האנשים שאין להם אף חשבון חיסכון בסכום מעל select customer-name

from customer C

where not exists (select *

from deposit D

where D.customer-name=C. customer-name

and balance>400)

( מחשבים את השאילתה המקוננת, שמאחזרת Cית לקוח )nניתן להבין שאילתה זו כדלקמן: לכל ש"ח. אם קבוצה זו ריקה, 400יות חשבונות ההפקדה של הלקוח בסכום מעל nאת קבוצת כל

ש"ח. 400ללקוח אין אף חשבון בסכום מעל

. למשל, containsגם בדיקת הכלה שבוצעה בעזרת not existsו existsניתן לבצע באמצעות יכולה להתבצע גם בדרך הבאה: 16' שאילתה מס

16שאילתה א יש בהם חשבונות חיסכון. ’jaffa‘מצא את שמות הסניפים שלכל האנשים הגרים ב

select branch-name

from branch B

where not exists

(select *

from customer

where customer-city=’jaffa’ and

customer-name not in (select customer-name

from deposit

where branch-name=B.branch-name)

: מצא שמות סניפים, כך שלא 16המבנה של שאילתה זו תואם את הניסוח מחדש של שאילתה שאין לו חשבון חיסכון בסניף. ’jaffa‘קיים אדם הגר ב

זוהי צורה נוספת לבצע את פעולת החילוק של אלגברת היחסים.

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

8

nullרשות וערכי קבוצות מפו .9

גם בקבוצות מפורשות של ערכים. קבוצה כזו מוקפת בסוגריים. whereניתן להשתמש בפסוק ה

19שאילתה .’Tsafon‘או ’Darom’, ‘Merkaz‘מצא את שמות האנשים שיש להם חשבון חיסכון בסניף

select distinct customer-name

from deposit

where branch-name in (‘Darom’, ‘Merkaz’, ‘Tsafon’)

SQL ( מאפשרת גם לבדוק אם ערך מסוים הוא ערך דמהnull כלומר חסר או לא מוגדר. אבל ,), false. השוואה כזו תיתן תמיד nullלא ניתן להשתמש ב = או >< לצורתך השוואה של תכונה ל

אחרים! nullכאל ערך ייחודי, שונה מערכי nullמתייחסת לכל ערך SQLמפני ש . is not nullאו ב is nullבמקום זאת ב :SQLלכן משתמשים ב

20שאילתה

, כלומר ששם הסניף כלל לא מצא את מספרי חשבונות החיסכון שאינם משוייכים לסניף כלשהו . )מצב בלתי רצוי כלל שבמערכת ריאלית לא היה קורה(מוזן

select distinct account-number

from deposit

where branch-name is null

פונקציות הקבצה והקבצה .10

יות. פונקציות אלה נקראות פונקציות nלעתים שכיחות יש צורך להפעיל פונקציות על קבוצות של (. הארגומנט של פונקצית הקבצה הוא אוסף של ערכים )לאו aggregate functionsהקבצה )

ה תמיד ערך יחיד. דווקא קבוצה( . פונקצית הקבצה מחזיר count. הפונקציה count, sum, max, min, avgיש חמש פונקציות הקבצה מובנות: SQLב

avgו max, min, sumיות או הערכים הנבחרים בשאילתה. הפונקציות nמחזירה את מספר המחזירות בהתאמה את סכום הערכים, את הערך המינימלי, המקסימלי, ואת הערך הממוצע של

)שיתואר havingאו בפסוק selectם אלה. ניתן להשתמש בפונקציות אלה בפסוק ה ערכי . )בהמשך

count(*) מספר השורות

count(column) שורות שבהן הערך בעמודה אינו ספר המ null

count(distinct column) שאינם ,בעמודה כים השוניםהערמספרnull

sum(column) םאינש ,הערכים בעמודה סכום null

max(column), min(column) שאינם מינימום ומקסימום של הערכים בעמודה ,null

avg(column) םאינש ,הערכים בעמודה ממוצע null

דוגמאות:

21שאילתה מצא את הסכום, ואת הערך המירבי והמינימלי של ערכי הנכסים של הבנקים.

select sum(assets), max(assets), min(assets)

from branch

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

9

מתאים. whereיות אזי יש להשתמש בפסוק nאם ברצוננו לבצע שאילתה כזו על חלק מה

22שאילתה . ’Jaffa‘מצא את הערך המירבי והמינימלי של חשבונות החיסכון של לקוחות שגרים בעיר

select sum(balance), max(balance s), min(balance)

from deposit, customer

where customer-city=’Jaffa’ and customer.customer-name=deposit.customer-name

23שאילתה מצא את מספר סניפי הבנקים

select count(*)

from branch

24שאילתה . ’Jaffa‘חשבונות החיסכון של לקוחות שגרים בעיר מצא את מספר

select count(*)

from deposit, customer

where customer-city=’Jaffa’ and customer.customer-name=deposit.customer-name

מחזירה את מספר (*)countיות(, כלומר nהכוכבית )*( מתייחסת לשורות ) 24ו 23בשאילתות , אם יש חשבון מסוים שמשותף לשני לקוחות הגרים ב 24השורות בתוצאת השאילתה. בשאילתה

‘jaffa’ א ייספר פעמיים, כיוון שיהיו שתי הוn יות שיענו על קריטריון הבחירה בפסוק הwhere . לספור ערכים בעמודה מסוימת. למשל בדוגמה הבאה: countניתן להשתמש ב

25שאילתה

הערים השונות שבהם יש לקוחות של הבנקמצא את מספר select count(distinct customer-city)

from customer , כיוון (*)countהיה נותן ערך כמו של count(customer-city)ש לשים לב כי בשאילתה זו, י

שסופרים גם ערכים חוזרים.

26שאילתה מצא את שמות הלקוחות שיש להם חשבונות חיסכון בסניפי בנק בשתי ערים שונות לפחות.

select distinct D.customer-name

from deposit D

where (select count(distinct branch-city)

from deposit P, branch B

where B.customer-name=D.customer-name and

P.branch-name= B.branch-name) >=2

השאילתה הפנימית סופרת את מספר הסניפים השונים שלכל לקוח יש; אם ערך זה גדול או שווה ( תיבחר.Dיה של חשבון הלקוח )nלשתים , ה

יות ביחס, בהתאם nקבוצות של -במקרים רבים מעוניינים להפעיל פונקצית ההקבצה על תת

לערכים של תכונה מסוימת. למשל, אם אנו מעוניינים למצוא את היתרה הממוצעת בכל סניף, או יות שיש להם ערך משותף nחשבונות החיסכון של כל לקוח. במקרה זה עלינו לקבץ את המספר

המתאימה, ולהפעיל את פונקצית ההקבצה על כל קבוצה כזו בנפרד. את זה עושה פסוק בתכונה

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

10

group by שלSQL פסוק .group by מציין את התכונה )תכונות( שערכיה מגדירים את . selectעשויות להופיע בפסוק ה group byהקבוצות. רק תכונות המופיעות בפסוק ה

27שאילתה

שבון חיסכון אחד או יותר, הדפס את שם הלקוח, את מספר חשבונות לכל לקוח שיש לו ח החיסכון שלו ואת הסכום הכולל של היתרות.

select customer-name, count(*), sum(balance)

from deposit

group by customer-name

"התכונה יות עם אותו ערך של nחולקו לקבוצות. בכל קבוצה depositיות היחס nבשאילתה זו . כלומר בכל קבוצה יופיעו רק חשבונות חיסכון של לקוח אחד. customer-nameהמקבצת" מופעלות על כל אחת מהקבוצות הללו. sumו countהפונקציות

התוצאה של שאילתה כזו עשויה להיראות כדלקמן:Sum(balance) count(*) customer-name

300 1 Even

550 2 Morag

1500 4 Tal

1200 3 Levi

28שאילתה עבור לקוחות שיש להם חשבונות חיסכון: מצא כמה חשבונות חיסכון יש ללקוחות הגרים בכל

רחוב בכל עיר.select customer.customer-city, street, count(distinct account-number)

from customer C, deposit D

where C. customer-name=D. customer-name

group by street, customer-city

(. במקרה זה, group by( וכן הקבצה ) whereבשאילתה זו מופיעה תנאי בחירה )בפסוק ה יות על פי תנאי הבחירה בפסוק ה nפונקציות ההקבצה מופעלות לאחר בחירת ה ההקבצה וכן

whereבות בלבד(: . דוגמא לתוצאה אפשרית )בהנחה שלקוחות הבנק גרים בארבעה רחו

count(distinct account-number) Street customer-city

3 Pinkas Jaffa

5 Allenby Jaffa

4 Etzel Rishon

6 Lehi Rishon

לעתים מעוניינים באיחזור של ערכי פונקציות הקבצה רק לגבי קבוצות המקיימות תנאי כלשהו.. . group byשוי להופיע יחד עם פסוק ה , שע havingאת הפסוק SQLלצורך זה מספקת

having מהווה תנאי על קבוצות שלn יות, כפי שקובצו על ידי פסוק הgroup by רק קבוצות , תופענה בתוצאת השאילתה. havingהמקיימות את תנאי ה

29שאילתה

לכל לקוח שיש לו חשבון לפחות שלושה חשבונות חיסכון, הדפס את שם הלקוח, את מספר בונות החיסכון שלו ואת הסכום הכולל של היתרות.חש

select customer-name, count(*), sum(balance)

from deposit

group by customer-name

having count(*)>=3

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

11

יות שעליהן יפעלו הפונקציות, פסוק ה nמגביל whereחשוב לשים לב כי תנאי הבחירה בפסוק ה

having מות של מגביל קבוצות שלn.יות

והשני על הפונקציה בפסוק selectבמקרה שיש שני תנאים שונים )האחד על הפונקציה בפסוק ה (. למשל, נניח כי אנו מעוניינים לספור בכל סניף את מספר הלקוחות שיש להם חשבון havingה

כון.חשבונות חיס 5ש"ח, אבל רק לסניפים שיש בהם לפחות 4000חיסכון עם יתרה גדולה מ

select branch-name, count(distinct customer-name)

from deposit

where balance>4000

group by branch-name

having count(distinct account-number)>=5

חשבונות חיסכון עם יתרה 5שאילתה זו שגויה, מכיוון שהיא תציג רק סניפים שיש בהם לפחות יות הבודדות. אז nמבוצע ראשון לבחירת ה whereשהכלל הוא: פסוק ה . זאת מפני4000גדולה מ

יות. הדרך הנכונה לבצע nלבחירת קבוצות של havingמתבצעת ההקבצה ורק אז מתבצע פסוק ה את השאילתה היא:

30שאילתה

חשבונות חיסכון, הצג את מספר הלקוחות שיש להם חשבון 5עבור סניפים שיש בהם לפחות ש"ח. 4000עם יתרה גדולה מ חיסכון

select branch-name, count(distinct customer-name)

from deposit

where balance>4000 and

branch-name in (select branch-name

from deposit

group by branch-name

having count(distinct account-number)>=5 )

group by branch-name

השוואת תת מחרוזות .11

SQL מחרוזת של תווים באמצעות אופרטור ההשוואה -מאפשרת לבצע השוואה על תתיlike .מחרוזות חלקיות ניתנות להגדרה באמצעות שני תווים שמורים: '%' מייצג מספר כלשהו של

תווים )כולל מחרוזת ריקה(, ו '_' מייצג תו שרירותי אחד.

31שאילתה . ’R‘הלקוחות ששם העיר בה הם גרים מתחילה ב מצא את פרטי

select *

from customer

where customer-city like ‘R%’

32שאילתה . ’t‘מצא את פרטי הסניפים שהאות השנייה של שמם היא

select *

from branch

where branch like ‘_t%’

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

12

מיון התצוגה .12

SQL מאפשרת למשתמש לסדר את הnוצאה של שאילתה על פי הערכים של תכונה אחת יות בת . order byאו יותר, באמצעות פסוק ה

33שאילתה

. מיין את החשבונות על פי שמות הלקוחות, ואת ’Aviv‘מצא את פרטי חשבונות חיסכון בסניף כל החשבונות השייכים ללקוח אחד מיין על פי היתרה.

select *

from deposit

where branch-name=’Aviv’

order by customer-name, balance

. descברירת המחדל היא מיון בסדר עולה. לצורך מיון בסדר יורד יש לציין את מילת המפתח כדי לציין מפורשות מיון בסדר עולה. למשל אם בשאילתה ascניתן גם להשתמש במילת המפתח

בסדר יורד )כלומר בין כל החשבונות של הקודמת היינו רוצים שהמיון המשני, על פי היתרה יהיהשל השאילתה order byלקוח מסוים יופיע ראשון החשבון עם יתרה מירבית וכו'( אזי פסוק ה

היהorder by customer-name asc, balance desc

joinפעולות .13

יות מיחסים אחדים, על פי שדה/שדות nדרכים נוספות לצרף QL Sפרט למכפלה קרטזית ישבפעולה אחת, ללא צורך במכפלה קרטזית ובחירה SQL למשל צירוף טבעי מתאפשר ב. משותפים

(. 3ו 2)וראה שאילתות .fromנכתבות כמעין תת שאילתה בפסוק ה joinת ה פעולו

, הבאיםעם המופעים הרגעיים accountו ownerנדגים את פעולות הצירוף עם היחסים

owner account-num customer-name

101 Even

203 Morag

417 Tal

account balance branch-name account-num

3000 Darom 101 4000 Aviv 203 7000 Tsafon 155

34שאילתה . 5000שמות בעלי חשבונות החיסכון שיתרתם קטנה מ מצא את

select customer_name

from owner inner join account on owner.account-num = account. account-num

where balance < 5000

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

13

מאפשרת ביצוע של פעולת הצירוף הטבעי )של אלגברת היחסים( והכללה של inner joinפעולת ה צירוף טבעי בכל מקרה שלעמודות שאנו רוצים לצרף יש שמות שונים.

ת השאילתה תכלול עמודות כפולותתוצאbalance branch-name account-num account-num customer-name

3000 Darom 101 101 Even 4000 Aviv 203 203 Morag

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

14

, ניתן לבצע צירוף טבעי בדומה לצירוף זהיםשלעמודות שאנו רוצים לצרף יש שמות מקרה בכל הטבעי שראינו באלגברת היחסים. זהו בדיוק המקרה של השאילתא הנ"ל )לשתי העמודות

(. account-num –רפות יש שם זהה המצו

select customer_name

from owner natural inner join account

where balance < 5000

תופיע בתוצאה פעם אחת בלבד. account-numבמקרה זה העמודה

balance branch-name account-num customer-name 3000 Darom 101 Even 4000 Aviv 203 Morag

. כדוגמא joinהוא דוגמא נוספת של left outer joinהאופרטור from owner left outer join account on owner.account-num = account. account-num

התואמת. בנוסף תכיל inner joinיות של פעולת הnכוללת את כל ה left outer joinהתוצאה של יה ביחס הימני, n, שאינן מתאימות לאף ownerהשמאלי, יות של היחסnהתוצאה את כל ה

account . בn העמודות שמקורן ביחס הימנייות אלה, כל (account) יופיעו בתוצאה עם ערכיnullהיא לעיל . תוצאת הביטוי

from owner left outer join account on owner.account-num = account. account-

num

balance branch-name account-num account-num customer-name 3000 Darom 101 101 Even 4000 Aviv 203 203 Morag

null null null 417 Tal

, אבל ניתן להשתמש בהן בכל מקום שבו fromהוא בדרך כלל בפסוק ה join השימוש בפעולות ניתן להשתמש ביחס.

יות משני היחסים nמגדיר אילו join. תנאי ה joinתנאי הומ joinסוג ה ממורכב joinהשימוש יות בכל nמגדיר כיצד לטפל ב joinסוג ה . joinיצטרפו זו לזו, ואילו עמודות יופיעו בתוצאת ה

(. joinיה מהיחס האחר )בהתאם לתנאי הnאחד מהיחסים, שאינן מצטרפות לאף העיקריים. joinותנאי ה joinברשימה להלן מופיעים סוגי ה

join סוגים של

joinתנאי

inner join natural

left outer join on <predicate>

right outer join using (A1, A2, An)

full outer join

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

15

. לא נפרט את השימוש ב onוב naturalראינו קודם דוגמאות לשימוש ב joinמבין תנאי ה using . דקדוק, המילה השמורה מבחינת הnatural מופיעה לפני סוג הjoin כפי שהודגם קודם

outerו inner. המילים השמורות joinיופיע לאחר סוג ה using ו onלכן, בעוד שהשימוש ב .outer joinאו ב inner joinאם מדובר ב joinהן אופציונאליות כיוון שניתן להסיק מסוג ה

right outer join הוא סימטרי לleft outer join . הn ,יות של היחס הימניaccount שאינן ,

, יופיעו בתוצאה כאשר כל העמודות שמקורן ביחס ownerיה ביחס השמאלי, nמתאימות לאף . למשל התוצאה של nullיופיעו בתוצאה עם ערכי השמאלי

from owner right outer join account on owner.account-num = account. account-num

balance branch-name account-num account-num customer-name 3000 Darom 101 101 Even 4000 Aviv 203 203 Morag 7000 Tsafon 155 null null

ולכתוב, למשל join naturalגם את תנאי ה outer joinאפשר כמובן לשלב עם סוגי ה

from owner natural right outer join account

ובמקרה זה התוצאה תהיה

balance branch-name account-num customer-name 3000 Darom 101 Even 4000 Aviv 203 Morag 7000 Tsafon 155 null

full outer join פשוט שילוב של שני סוגי ה הואouter join left וright outer join . כלומרשמאלי היחס ה יותnהמוסיפים לתוצאה את inner joinלאחר שהפעולה מחשבת את תוצאת ה

יות היחס nלתוצאה את ה (. כעת מוסיפים nullיה ביחס הימני )ומרצפים ב nשלא התאימו לאף (. למשל nullיה ביחס השמאלי )ומרצפים ב nהימני שלא התאימו לאף

from owner natural full outer join account

balance branch-name account-num customer-name 3000 Darom 101 Even 4000 Aviv 203 Morag 7000 Tsafon 155 null

null null 417 Tal

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

16

: outer joinמועיל בפעולת ה דוגמא לשימוש 35שאילתה

זו אנו מתייחסים חזרה לבסיס את סכום חשבונות החיסכון בכל סניף בנק. )בשאילתה מצא (.1הנתונים שבעמוד

התשובה הפשוטה היא

select branch_name, sum(balance) sum-balance

from deposit

group by branch_name

בשאילתה זו, סניפים, שמסיבה כלשהי אין בהם חשבונות חיסכון לא יופיעו כלל בתשובה. זהו מאפיין של שימוש בהקבצה.

כך שסניפים ללא חשבונות חיסכון יופיעו עם , כל הסניפיםך לעיתים רוצים לראות בתוצאה את אsum-balance = 0 והדרך הפשוטה להשיג זאת היא על ידי שימוש ב ,outer join :כדלקמן

select branch_name, sum(balance) sum-balance

from deposit natural right outer join branch

group by branch_name

עם ערכי depositיופיעו כשכל עמודות depositללא חשבונות branchשל יותnכל ה outer joinב null מה שחשוב הוא שכל סניף יופיע בתוצאה. מכיוון שפונקצית ה .sum מחזירה אפס על ערכי

null - .נקבל את התוצאה הרצויה

multiple join בפסוק :from ניתן( לבצע צירוףjoin של יותר משני יחסים. למשל, על ידי )join באופן קומפקטי בהרבה: 3ניתן לבצע את שאילתא

36שאילתה

’Jaffa‘צא את שמות וכתובות הלקוחות שיש להם חשבון חיסכון בסניף כלשהו הנמצא בעיר מ

select customer-name, street, customer-city

from customer natural inner join deposit natural inner join branch

where branch-city=’Jaffa’

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

17

פעולות עדכון

insertפקודת .1

יה ליחס. יש לציים את שם היחס ואת nמשמשת להוספת insertבצורתה הפשוטה ביותר בהגדרת יה. יש לציין את הערכים על פי הסדר שבו מופיעות התכונות nרשימת הערכים של ה

(. create tableהתבנית )פקודת

1הוספה customerית לקוח ליחס nהוסף

insert into customer

values (‘Aharoni’, ‘Dizengof’, ‘Tel Aviv’)

מאפשרת למשתמש לציין במפורש שמות של תכונות המתאימות insertצורה שנייה של פקודת ( או ברירת nullיתן להשמיט תכונות עם ערכי דמה ). במקרה זה, נinsertלערכים בפקודת ה

מחדל. למשל:

2הוספה insert into deposit(branch-name, customer-name, account-number)

values (‘Aviv’,‘Davidi’, 123)

או ערך ברירת מחדל )אם הוגדרה ברירת מחדל(. nullשהושמטה, תקבל ערך balanceהתכונה עצמה. insertזו מצוינים בסדר שבו מצוינות התכונות בפקודת ה הערכים בפקודה

יות אחדות ליחס משתמשת בתוצאה של nהמאפשרת להוסיף insertוריאציה של פקודת

שאילתה. למשל:

3הוספה יה של חשבון הפקדה באותו סניף עם nהוסף ’Aviv‘לכל לקוח שיש לו חשבון הלוואה בסניף

סכום ההלוואה שלו, ומספר חשבון הפקדה זהה למספר חשבון ההלוואה.יתרה שהיא עשירית מ

insert into deposit

select branch-name,loan-number,customer-name,amount*0.1

from borrow

where branch-name=’Aviv’

deleteפקודת .2

. SQLשבשאילתת , בדומה לזהwhereיות מיחס. הפקודה כוללת פסוק nמוחקת deleteפקודת n .יחד עם זאת, בגלל אילוצים של שלמות קשר, יות נמחקות באופן מפורש מיחס אחד בכל פעם(

אחת הוא deleteיות הנמחקות בפקודת nהמחיקות עלולות לעבור ליחסים אחרים(. מספר ה עם יות היחס יימחקו; יחד nכל where. בהיעדר פסוק whereהנבחרות בפסוק ה יותnכמספר ה

זאת, היחס עצמו לא יימחק, אלא יישאר בבסיס הנתונים כיחס ריק.

1מחיקה ’Morag‘ית הלקוח nמחק את

delete customer

where customer-name=’Morag’

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

18

2מחיקה מחק את כל חשבונות החיסכון של סניפים שערך הנכסים שלהם שלילי

delete deposit

where branch-name in (select branch-name

from branch

where assets <0)

3מחיקה

מחק את כל חשבונות ההלוואה. delete borrow

updateפקודות .3

deleteיה אחת או יותר.כמו בפקודת ה nמשמשת לעדכון ערכים של תכונות ב updateפקודת

יחס אחד. )יחד עם זאת, בוחרת את האניות שיש לעדכן מתוך updateבפקודת ה whereפסוק ה עדכון של מפתח ראשי עלול לגרום לעדכונים של מפתחות זרים ביחסים אחרים, בהתאם לאילוצי

מגדיר את התכונות שמעדכנים ואת ערכיהן החדשים. למשל: setשלמות קשר שהוגדרו(. פסוק

1עדכון . ’Dizengof‘ל ’Morag‘שנה את שם הרחוב שבו גר

update customer

set street= ‘Dizengof’

where customer-name=‘Morag’

אחת. למשל: updateיות אחדות בפקודת nניתן לשנות 2עדכון . ’jaffa‘לכל היתרות של חשבונות חיסכון של לקוחות הגרים ב 5%הוסף

update deposit

set balance= balance*1.05

where customer-name in (select customer-name

from customer

where customer-city=’Jaffa’)

למשל: לעדכן ערכים בטבלה אחת בהסתמך על ערכים בטבלה אחרת.ניתן 3עדכון

נניח שללקוח מותר שיהיה רק חשבון חיסכון אחד לכל היותר וכן חשבון הלוואה אחד לכל היותר. מס' חשבון חשבון חיסכון להיות ואה של לקוחות שיש להם גםוההל נותעדכן את מס' חשבו

לא יותר מחשבון חיסכון אחד וחשבון הלוואה )לצורך שאילתא זו נניח כי ללקוח החיסכון שלהם. אחד(

update borrow

set loan_number = (select account_number

from deposit

where deposit.customer-name = borrow.customer-name)

where exists (select *

from deposit

where deposit.customer-name = borrow.customer-name)

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

19

SQLתצפיות ב

SQL. מושג התצפית ב 1

היא טבלה המופקת מטבלאות אחרות. הטבלאות האחרות עשויות להיות טבלאות SQLתצפית ב כרח ממומשת בצורה פיזית; בסיסיות או תצפיות אחרות שהוגדרו קודם לכן. תצפית אינה בה

יות שלהם nאלא ניתן לראותה כטבלה וירטואלית, בניגוד לטבלאות )היחסים( הבסיסיים,שהאינה מאוחסנות פיסית בבסיס הנתונים. עובדה זו מגבילה את אפשרות העדכון של תצפית, אך

מטילה מגבלה כלשהי על שאילתות על התצפית.לה שניגשים אליה לעתים תכופות, למרות שאינה קיימת ניתן לראות תצפית כדרך להגדיר טב

פיסית. למשל, אם שאילתה רבות מאחזרות פרטי הלקוח יחד עם פרטי חשבונות החיסכון שלו, , ועליה depositו customerניתן להגדיר תצפית שהיא תוצאה של הצירוף הטבעי של היחסים

לבצע כל פעם את השאילתה. . הגדרת תצפית 2

. התצפית מקבלת שם טבלה )וירטואלי(, create viewהתצפית מגדירים בעזרת הפקודה את רשימה של תכונות, וכן שאילתה המגדירה את תוכן התצפית. אם אף אחת מהתכונות בתצפית

אינה תוצאה של הפעלת פונקציות או אופרטורים אריתמטיים, אין צורך להגדיר את שמות ות יהיו זהים לשמות התכונות בטבלאות המקוריות המגדירות התכונות בתצפית, ושמות התכונ

את התצפית. למשל:

1תצפית create view customer-deposits

as select C.customer-name, street, customer-city, account-number, balance

from customer C, deposit D

where C.customer-name= D.customer-name

בתצפית זו לא הגדרנו את שמות התכונות, כך שהם יהיו כשמות ביחסים המקוריים.

2תצפית

create view total-branch-deposits (branch-name, total-balance)

as select branch-name, sum(balance)

from deposit

group by branch-name

נות. זאת כדי לתת שם לעמודה המחושבת על ידי פונקצית בתצפית זו הגדרנו את שמות התכו

.sumההקבצה

משהוגדרה תצפית, ניתן לבצע עליה שאילתות למשל:

1שאילתת תצפית ’Jaffa’הצג את כל מספרי חשבונות החיסכון שיש ללקוחות הגרים ב

select distinct account-number

from customer-deposits

where customer-city=’Jaffa’

2שאילתת תצפית ’Aviv‘הצג את סכום ההפקדות בסניף

(c .כל הזכויות שמורות לפרופ' גדעון דרור, ביה"ס למדעי המחשב, המכללה האקדמית של ת"א יפו )2018

20

select * from total-branch-deposits

where branch-name=’Aviv’

. למשל: drop viewניתן לסלק הגדרה של תצפית שאין בה צורך יותר בעזרת הפקודה drop view total-branch-deposits

. עדכון התצפיות 3

משמעי. בנושא זה מתנהל מחקר נמרץ. באופן -ן תצפיות הוא מורכב ופעמים רבות אינו חדעדכוכללי, עדכון של תצפית, המבוססת על טבלה בסיסית אחת, ושאינה כוללת פונקציה הקבצה, ניתן

לתרגום לעדכון של הטבלה הבסיסית. בכל מקרה אחר יש דרכים אחדות למפות את עדכון לאות הבסיסיות. התצפית לעדכון של הטב

total-branch-deposits למשל, אם מתבצעת פעולת העדכון הבאה על התצפית

update total-branch-deposits

set total-balance=42000

where branch-name =‘Aviv’

יש לעדכן, ובאיזה אופן!!! depositיות של היחס nלא ברור אילו לסיכום:

ית אחת ניתנת לעדכון אם תכונות התצפית כוללות את המפתח תצפית הבנויה מטבלה בסיסהראשי של הטבלה הבסיסית או מפתח קביל אחר שלה. כמו כן, כל תכונה ביחס הבסיסי

( חייבת להיכלל בתצפית.nullשאינה יכולה לקבל ערך דמה ) .תצפיות המוגדרות על טבלאות אחדות באמצעות צירוף אינן ניתנות לעדכון בדרך כלל צפיות המוגדרות בעזרת הקבצה או פונקציות הקבצה אינן ניתנות לעדכון. ת