רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
שיעור 51
שיעור
נושאי הלימוד להיו:
אופרטורי שמיועדי לשימוש ע קבוצות ותתי שאילתות
פעולת UNION
טבלאות מסוג VIEW
PL/SQL
רואי זרחיה 2009כל הזכויות שמורות ©
1
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
– SUB QUERIES (10תתי שאילתות תזכורת
תזכורת :תת שאילתא היא שאילתא הנמצאת בתו שאילתא אחרת ,כ שתוצאת
השאילתא הפנימית משמשת להערכת/חישוב השאילתא החיצונית.
קיימי שני סוגי של תתי שאילתות:
(1תתי שאילתות במשפטי WHEREו HAVING
א( תתי שאילתות המחזירות ער יחיד – למדנו בשיעור קוד
ב( תתי שאילתות המחזירות אוס& ערכי – למדנו בשיעור קוד
(2תתי שאילתות במשפטי .FROM
(2תתי שאילתות במשפטי :FROM
צורת השימוש:
SELECT ….
;FROM (Sub-Query) AS NewName
חובה לבצע את פעולת הכינוי
נחזור לדוגמא מתחילת השיעור :שמות האנשי שגרי בעיר של Ben Leviהפע לא
כולל BENעצמ':
מתבצעת כא'
מכפלה קרטזית
SELECT Name
City
FROM Students S, ( SELECT
Students
FROM
Name = 'Ben Levi') AS ben
WHERE
;)'( S.City = ben.City ) AND (Name <> 'Ben Levi
WHERE
הסבר :תת השאילתא תחזיר טבלה שתכיל ערכי ,וע טבלה זו נבצע מכפלה קרטזית
לטבלת סטודנטי ועל המכפלה נפעיל את תנאי ה .where
רואי זרחיה 2009כל הזכויות שמורות ©
2
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
UNION (11
באלגברת היחסי למדנו על פקודת UNIONכאשר רצינו לאחד תוצאות של טבלאות
בעלי סכמות זהות )תואמות איחוד( ,על אותו עיקרו' נראה אי נוכל להפעיל את
פקודת UNIONעל טבלאות ב :SQL
דוגמא :נניח שטבלת הסטודנטי הייתה קיימת לנו ג באוניברסיטת בר איל' וג
באוניברסיטת תלאביב ושר החינו היה רוצה לקבל את רשימת כל הסטודנטי בשני
המוסדות )ת.ז + .ש( עבור סטודנטי שאינ גרי בירושלי:
סכמת הסטודנטי בבראיל :
Department
MA
CS
StudentCity
RG
BB
StudentName
a
b
StudentID
1
2
סכמת הסטודנטי בתלאביב:
Age
22
24
City
TA
TA
Department
PH
MA
SName
c
d
Faculty
ES
ES
SID
3
4
הבעיה הנראית לעי' היא ששתי הסכמות כא' שונות ואילו על מנת לאחד נתוני נצטר
סכמות זהות ולכ' נצטר להפעיל את השאילתות הבאות:
StudentID AS ID , StudentName AS Name
SELECT
BarIlanStudents
FROM
;’StudentCity <> ‘Jerusalem
WHERE
UNION
Name
a
b
c
d
SID AS ID , SName AS Name
SELECT
TelAvivStudents
FROM
;’City <> ‘Jerusalem
WHERE
ID
1
2
3
4
רואי זרחיה 2009כל הזכויות שמורות ©
3
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
נוכל לראות שפעולת ) UNIONכנ"ל חיתו וחיסור( מתבצעת בצורה הבאה:
][Query
INTERSECT
][Query
][Query
UNION
][Query
][Query
MINUS
][Query
חשוב לציי' שקיימת פקודה נוספת הנקראת UNION ALLשמטרתה לאחד 2טבלאות מבלי להסיר את
הכפולי.
Distinct SName
SELECT
Students
FROM
UNION ALL
Distinct SName
SELECT
Students
FROM
רואי זרחיה 2009כל הזכויות שמורות ©
4
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
– VIEWS (12טבלאות מדומות
VIEWהוא טבלה מדומה המגדירה שאילתת משתמש ,זהו בעצ מבנה נוס& שעדיי' לא למדנו הנכנס תחת
הגדרת DDLונקרא טבלה מדומה.
השוני של טבלה מדומה מטבלה רגילה:
(1טבלה מדומה אינה מכילה ערכי בתוכה.
VIEW (2הינה רק הגדרה במבנה של שאילתת SQLרגילה הנשמרת בבסיס הנתוני.
(3הטבלה ממומשת ע"י הפעלת השאילתא רק בעת הצור.
יתרונות:
(1יכולת הצגה פשוטה יותר של נתוני שוני למשתמשי שוני.
(2רמה גבוהה של בקרה ואבטחת מידע :מונע גישה לנתוני ולטבלאות עצמ' ומאפשר גישה
רק ל ) VIEWבמקו למנוע גישה של אד מסוי מטבלאות מסוימות אפשר לאפשר לגשת
רק ל VIEWמסוימי(.
(3נית' להתייחס ל VIEWולפנות אליו כאילו היה טבלה אמיתית.
(4אי' בזבוז של מקו כאשר משתמשי ב VIEWכי הרי ה DBMSשומר שאילתא ולא
נתוני.
(5עדכו' של טבלאות לא מצרי לבצע עדכו' של ה ) VIEWיתבצע אוטומטית בעת הריצה(.
(6מאפשר למעבד השאילתות רמה גבוהה יותר של אופטימיזציה.
חסרונות:
(1מחושב בכל ריצה מחדש.
(2א הטבלה עליה נשע' ה VIEWנמחקת ,ה VIEWהול לאיבוד ג כ'.
רואי זרחיה 2009כל הזכויות שמורות ©
5
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
: שעליו נבצע את הדוגמאות עבור הפעולות לשיעור זהDB נגדיר טבלאות חדשות ב
StudentID
1
2
3
4
5
6
7
StudentID
1
2
3
4
5
6
7
6
Students
Name
City
Avi Cohen
Ramat-Gan
Avi Levin
Ramat-Gan
Ben Levi
Tel-Aviv
Chen Levin
Tel-Aviv
Debi Dvir
Givatiim
Zvi Kaner
Givatiim
Haim Itzhak
Jerusalem
Grades
CourseID
TestGrade
281
82
281
67
281
75
281
84
281
94
281
82
281
90
Department
Computers
Math
Math
Computers
Math
Computers
Computers
ExeGrade
85
84
88
87
86
88
83
© כל הזכויות שמורות2009 רואי זרחיה
•
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
דוגמא:
הצג את שמות הסטודנטי ואת עיר מגוריה עבור סטודנטי שלמדו במחלקה למדעי המחשב:
Name, City
Students S
;”S.Department = “computers
City
Ramat-Gan
Tel-Aviv
Givatiim
Jerusalem
SELECT
FROM
WHERE
Name
Avi Cohen
Chen Levin
Zvi Kaner
Haim Itzhak
זו הייתה שליפה פשוטה ,א כעת בואו נניח שראש המחלקה למדעי המחשב מרי /כל יו את אותה
השאילתא א לפעמי הוא רוצה להוסי& מספר תנאי על שאילתא זו – לש כ קיימת לנו אפשרות לשמור
טבלה זו כטבלה מדומה ז"א שנשמור את פקודת ה SQLתחת הש CompStudentsבצורה הבאה:
CREATE VIEW CompStudents AS
{
SELECT
Name, City
FROM
Students S
WHERE
;”S.Department = “computers
}
כעת קיי לנו VIEWבש CompStudentsשע"י כל הרצה שלו נקבל את רשימת הסטודנטי למדעי
המחשב.
כעת נניח שראש המחלקה רוצה לסנ' מתו רשימה זו רק את הסטודנטי שגרי בתל אביב ,הוא יוכל
לבנות את השאילתא הבאה:
*
CompStudents
;”City = “Tel-Aviv
SELECT
FROM
WHERE
ובעקבות זאת )למרות שרשמנו * ב SELECTהראשי( תתקבל התוצאה הבאה:
City
Tel-Aviv
Name
Chen Levin
יוצגו 2העמודות מה VIEWהמתאימות לתנאי שהתווס&.
רואי זרחיה 2009כל הזכויות שמורות ©
7
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
מאחורי הקלעי בעצ מתבצעת השאילתא הבאה:
*
CompStudents
SELECT
FROM
;”City = “Tel-Aviv
WHERE
Name, City
Students S
”S.Department = “computers
AND
;”City = “Tel-Aviv
SELECT
FROM
WHERE
מכא נוכל להבי את השלבי של בניית טבלה מדומה:
(1
הגדרת טבלה מדומה חדשה )הגדרת השאילתא ויצירתה ב .(DB
(2
הפעלת שאילתא רגילה הפונה כחלק מהשליפה לטבלה המדומה.
(3
ה DBMSיוצר את השאילתא המשולבת )כמו שראינו בדוגמא האחרונה(.
(4
מופעלת השאילתא המשולבת ומוחזרת התוצאה.
הרכבת תצפיות:
נית' להגדיר הרכבה של תצפיות ,ז"א נית' להגדיר תצפית הבנויה על בסיס תצפית אחרת:
CREATE VIEW BestTalmidim AS
(
* Select
תצפית From Talmidim
)
נוכל להשתמש בתצפית בביצוע JOINכאילו היא הייתה טבלה רגילה
*
Talmidim T , Courses C
T.ID = C.ID
רואי זרחיה 2009כל הזכויות שמורות ©
SELECT
FROM
WHERE
8
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
חוקי שיש לזכור בעבודה ע תצפיות:
.1התצפית תפסיק לפעול א בוצעה מחיקה של הטבלה עלייה היא בנויה.
.2התצפית תפסיק לפעול א שונו שמות העמודות בטבלה עלייה היא בנויה .ז"א שהתצפית
מושפעת משינויי סכמה א איני מושפעת משינויי .DATA
.3נית' להוסי&/לעדכ'/למחוק שורות מתו תצפית קיימת בתנאי שהתצפית בנויה על טבלה
אחת בלבד )ז"א תצפית ללא פעולות צירו& ,איחוד ,חיתו וכד'(.
.4הרעיו' העומד מאחורי תצפית טובה הוא שנית' לשלו& מידע רלוונטי באופ' מחזורי מבלי
להתייחס למורכבות בסיס הנתוני הקיי ומבלי צור לחזור ולכתוב את השאילתא בכל
פע שנרצה לשלו&.
.5תמיד נית' להוסי& עוד תנאי לתצפית קיימת בכדי לקבל תשובה ספציפית יותר וע"י כ
בעצ נוכל להתאי תצפיות למנהלי שוני וללקוחות שוני וכ נוכל ליצור מידור ואבטחה
טובי יותר.
ביצועי שינוי ב טבלה דר" :VIEW
.1שינוי של ערכי דר VIEWיגרור שינויי של טבלאות הבסיס.
.2הקו המנחה הוא שלא נית' לפנות לער בטבלה שלא מיוצג ע"י .VIEW
רואי זרחיה 2009כל הזכויות שמורות ©
9
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
שילוב של טבלאות משולבות ע תתשאילתא:
לדוגמא :הגדר טבלה מדומה בש BestGradesשתציג את מס' הסטודנט והציו' שלו במבח' עבור כל
הסטודנטי שקיבלו במבח' הסופי ציו' גבוה מהציו' הגבוה ביותר שסטודנט כלשהוא קיבל בתרגיל בכיתה.
)Max(ExeGrade
;)Grades
CREATE VIEW BestGrades AS
SELECT
StudentID, TestGrade
FROM
Grades G
WHERE
TestGrade > ( SELECT
FROM
BestGrades
StudentID
TestGrade
5
94
7
90
על אותו משקל נוכל להשתמש בצירו& בטבלאות מדומות ובכ ליצור יתרו' עצו :למשתמש נדמה כי הוא
עובד מול טבלה אחת בעוד שבפועל מאחורי הקלעי יכולות להתבצע פעולות צירו& חישובי והתניות על
מספר טבלאות שונות.
הגדרת סכמת ה :VIEW
נוכל להגדיר את שמות העמודות של ה VIEWהחדש שנרצה ליצור.
לדוגמא:
StudentsAvgGrade(Name, ID, AvgGrade) AS
S.StudentName, S.StudentID, (TestGrade + ExeGrade)/2
;Grades
רואי זרחיה 2009כל הזכויות שמורות ©
CREATE VIEW
SELECT
FROM
10
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
PL/SQL (12
PL/SQLמאפשר לנו להשתמש בכלי תכנות בשילוב ע פקודות ) SQLלולאות ,תנאי ,פונקציות וכד'(
בעבודה ע"ג ORACLEובכ מפשט את העבודה למול בסיס הנתוני.
א( פקודת SELECTבשילוב משתני
DECLARE
v_sname
;)VARCHAR2(10
v_rating
;)NUMBER(3
BEGIN
SELECT sname, rating
INTO v_sname, v_rating
FROM
Sailors
WHERE
;'sid = '112
;END
נוכל לראות שע"י הרצת פקודת SELECTזו נוכל להרי /שאילתא ולהכניס את תוצאותיה לתו משתני,
שמאוחר יותר נוכל לפנות ולהשתמש בערכי המאוחסני בה.
הערה :שאילתא זו חייבת להחזיר שורה אחת בלבד כי הרי מטרתה היא לאחס' את המידע בתו המשתני
שהוגדרו ולא להחזיר טבלת תשובות) .א השאילתא תחזיר פחות/יותר משורה אחת תצא הודעת שגיאה(.
ב( פקודת IF
>If <cond
>then <command
>elseif <cond2
>then <command2
else
><command3
;end if
רואי זרחיה 2009כל הזכויות שמורות ©
11
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
ג( פקודת LOOP
DECLARE
i
;number := 1
BEGIN
FOR i IN 1..10 LOOP
;)INSERT INTO number VALUES(i
;END LOOP
;END
ד( יצירת והפעלת פונקציות ופרוצדורות
כשנרצה להרי /אוס& פקודות או מספר שאילתות אחת אחרי השנייה ,נוכל להשתמש באחד מהמנגנוני
היעלי הקיימי בשפת :SQLהכוונה היא לשימוש בפונקציות או פרוצדורות.
ע"י שימוש באחד מכלי אלו ,אנו בעצ יוצרי רוטינה במסד הנתוני ,שמרגע יצירתה ועד מחיקתה נוכל
להפעיל אותה בצורה פשוטה ע"י קריאה לרוטינה ,כמו כ' נוכל להפעיל אותה מספר פעמי רב בכל זמ' שרק
נרצה.
יצירת פרוצדורה
CREATE [OR REPLACE] PROCEDURE procedure_name
])[(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .
AS
{
;PL/SQL Block
}
זהו מבנה פשוט של פרוצדורה ,נוכל לראות שמלבד הגדרת ש הפרוצדורה החדשה ,נוכל ג להגדיר את
הפרמטרי החיצוניי שפרוצדורה זו יכולה לקבל מהאפליקציה העוטפת אותה )הכנסת משתני חיצוניי
לתו הפרוצדורה( ,כאשר המש הקוד הינו בעצ אוס& פקודות )בלוק של פקודות( לביצוע.
רואי זרחיה 2009כל הזכויות שמורות ©
12
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
יצירת פונקציה
פונקציה הינה כלי כמעט זהה לפרוצדורה ע הבדל אחד חשוב ,הפונקציה מחזירה ער.
)CREATE [or replace] FUNCTION rating_message(rating IN NUMBER
RETURN VARCHAR2
AS
קלט לפונקציה = מספר
BEGIN
פלט הפונקציה = מחרוזת
{
IF rating > 7 THEN
;'return 'You are great
ELSIF rating >= 5 THEN
;'return 'Not bad
ELSE
;'return 'Pretty bad
;END IF
}
;END
ה( יצירת טריגרי
טריגר הוא פעולה שמסד הנתוני צרי לבצע כאשר בוצעה פעולה ששינתה ער או מבנה במסד הנתוני
עצמו ,הטריגרי ה בעצ פרוצדורות מיוחדות שנרצה להפעיל כאשר מישהו ביצע פעולה שגררה שינוי
במסד הנתוני.
לדוגמא:
(1נגדיר טריגר שיופעל כאשר תתבצע הכנסה של שורה חדשה לתו מסד הנתוני ,כאשר
מטרת הטריגר הינה לבדוק הא הערכי המוכנסי תקיני.
(2כאשר מוכנס סטודנט חדש לבסיס הנתוני ,נבדוק את תארי הלידה שלו ואז א גילו
מעל 20נכניס אותו לטבלת סטודנטי וא גילו מתחת ל 20נכניס אותו לטבלת
צעירי.
גו& הטריגר בעצ מכיל אוס& פקודות ) (PL/SQLכאשר ישנ מספר סוגי רב של טריגרי ,א הנפוצי
ה מסוג :עדכו' ,מחיקה והוספה.
רואי זרחיה 2009כל הזכויות שמורות ©
13
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
עצמו ,הטריגרי ה בעצ פרוצדורות מיוחדות שנרצה להפעיל כאשר מישהו ביצע פעולה שגררה שינוי
ו( יצירת אינדקסי
יצירת אינדקס בטבלה קיימת מאפשרת לנו לאתר שורות מידע במהירות וביעילות רבה יותר )לדוגמא:
כשנכתוב שאילתא ובתנאי ה Whereנרצה להתייחס לעמודת Nameשאינה מפתח בטבלה ,כמות הזמ' שיקח
לעבור על עמודה זו יהיה נמו בהרבה א עמודת Nameתוגדר כבעלת אינדקס(.
יצירת אינדקס:
ש האינדקס החדש
CREATE [ UNIQUE ] INDEX index_name
) ON table_name ( col1, col2, …, colN
ש העמודה בטבלה
שעליה יתווס& האינדקס
רואי זרחיה 2009כל הזכויות שמורות ©
ש הטבלה שעליה נרצה
להוסי& אינדקס חדש
14
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
מחיקת אינדקס:
DROP INDEX index_name
נית' ליצור אינדקסי על עמודה אחת או מספר עמודות כאשר כל אינדקס מקבל ש ייחודי משלו,
מומל /לשי אינדקסי על עמודות שכמות החיפושי עליה הינה גבוהה.
המשתמש שירצה לבצע שליפה מבסיס הנתוני אינו רואה את האינדקס וזאת כי האינדקס נמצא
מאחורי הקלעי ) (DDLומטרתו היא שיפור ביצועי השליפות )חשוב לדעת שביצוע פעולת UPDATE
לטבלה הכוללת אינדקסי תיקח זמ' רב יותר מאשר טבלה ללא אינדקסי וזאת בשל העובדה שיש צור
לעדכ' ג את האינדקסי עצמ בעת עדכו' הטבלה(.
אינדקס מסוג Unique Indexהינו אינדקס על עמודה שבה לא יכולי להיות 2ערכי בעלי ער זהה.
לדוגמא :נוכל ליצור אינדקס לטבלת Studentsעבור עמודת Nameוזאת בכדי שנוכל לשלו& סטודנטי לפי
שמות בצורה מהירה ויעילה יותר:
CREATE INDEX StudentNameIndex
)ON Students (Name
א שמות הסטודנטי היו יושבי בשתי עמודות שונות )ש פרטי וש משפחה( היינו יכולי ליצור את
האינדקס כ:
CREATE INDEX StudentNameIndex
)ON Students (LastName, FirstName
רואי זרחיה 2009כל הזכויות שמורות ©
15
רואי זרחיה
Roei27@gmail.com
תעשייה אווירית – נושאי במסדי נתוני
ז( יצירת סמכויות – :Authority
בהנחה ומספר אנשי עובדי ע"ג מסד הנתוני שלנו ,נוכל להגדיר את שמות המשתמשי שאנו רוצי
לתת לה סמכויות לכניסה ולניהול בסיס הנתוני שלנו.
יצירת משתמש חדש:
נוכל ליצור משתמש חדש במערכת ולזהותו ע"י שימוש בסיסמא שתוגדר
} CREATE USER user_name IDENTIFIED { by password
CREATE USER roei IDENTIFIED by 12345
סיסמת הכניסה של רואי ל DB
מחיקת משתמש קיי:
DROP USER user_name
לאחר שהקצנו את האנשי שיכולי לעבוד על מסד הנתוני שלנו )מת' סמכויות( נוכל להגדיר את
ההרשאות או התפקידי של כל אחד מה ,ז"א מה מותר ואסור לכל אחד מהאנשי לבצע.
הגדרת הרשאות ):(privilege
מת' הרשאה לביצוע פעולה או פעולות על מסד הנתוני עבור משתמש מסוי:
סוג ההרשאה
] GRANT privilege TO user [ WITH ADMIN OPTION
GRANT connect TO roei
מת' הרשאת התחברות ל DBלמשתמש רואי
REVOKE privilege FROM user
הגדרת תפקיד ):(role
תפקיד הינו אוס& של הרשאות בודדות תחת כובע אחד )הרשאות למתכנת ,למנהל וכד'(:
הגדרת תפקיד בחברה מסוג "מתכנת"
והקצאת הרשאות ספציפיות עבור
מתכנת בחברה
סוג תפקיד
Create role programmer_role
Grant select, insert on customer to programmer_role
] GRANT role TO { user | role } [ WITH ADMIN OPTION
מת' סט הרשאות של מתכנת למשתמש דני
GRANT programmer_role TO dani
} REVOKE role FROM { user | role
רואי זרחיה 2009כל הזכויות שמורות ©
16
© Copyright 2025