ݺߣ

ݺߣShare a Scribd company logo
DDL – Data Definition Language

                                                                                  : ‫יצירת טבלה חדשה‬
CREATE TABLE table_name (
                               Column_name Datatype Optional Constraints,
                                       Optional Table Constrants);
                                                                                           :‫דוגמה‬
    CREATE TABLE ListOfArtists(
     ArtistID INT NOT NULL AUTO_INCREMENT,
             PRIMARY KEY (ArtistID),
             UNIQUE KEY ArtistAK1 (LastName, FirstName));
             ‫מפתח ייחודי, כלומר לא יופיעו‬     A         B
)A,B( ‫בטבלה שני צירופים זהים‬


                                 ON UPDATE / ON DELETE ‫התנהגות בעדכון או מחיקה של ערכים בטבלה‬


                                      CASCADE ‫עדכון / מחיקה בטבלת ההורה יחלחל גם עבור טבלאות הילד‬
                                  NO ACTION / RESTRICT ‫חסימת האפשרות לעדכן / למחוק מטבלת ההורה‬
                       SET NULL ‫עדכון / מחיקה בטבלת ההורה יניב איפוס הערכים התואמים בטבלאות הילד‬


                                                              . The CHECK Constraint :‫אילוצים‬

                                                                        .‫הגדרת התחום עבור ערכים בטבלה‬
                                      .‫רצוי לתת שם לכל אילוץ ע"מ שניתן יהיה לגשת אליו לצרכי עדכון והסרה‬

                                                                                              :‫דוגמאות‬

CONSTRAINT cons_Name1 PRIMARY KEY (ArtistID),
CONSTRAINT cons_Name2 UNIQUE KEY (Last Name, First Name),
CONSTRAINT cons_Name3 CHECK (status IN ('Single', 'Married', …)),
CONSTRAINT cons_Name4 CHECK (Date of Birth< DateDeceased),
CONSTRAINT cons_Name5 CHECK (Date of Birth LIKE '[1-2][0-9][0-9][0-9]')
: ‫הוספת שורה חדשה לסוף הטבלה‬

               INSERT INTO table_name (col1,col2…colN) Values ('col1_val', 'col2_val',… 'colN_val')

                          :‫אם מזינים ערכים של כל העמודות לפי הסדר, אז ניתן להשמיט את שמות העמודות, כך‬

INSERT INTO table_name Values ('col1_val', 'col2_val',… 'colN_val')
                                                                                     : ‫שכפול של טבלה‬
1) CREATE TABLE table_copy (SELECT * FROM table)
2) CREATE TABLE table_copy LIKE table;
    INSERT INTO table_copy(SELECT * FROM table);
                                                                                 : ‫מחיקת שורה מטבלה‬
DELETE FROM table_name WHERE column=value
                                                                                 : ‫עדכון ערכים בטבלה‬

UPDATE table_name SET column=value WHERE condition


                                    .‫ – שינויים מבניים‬ALTER
                                                                                         ‫הוספת אילוץ‬
                                                                                              : ‫לדוגמה‬
ALTER TABLE table1 ADD CONSTRAINT cons_name
FOREIGN KEY (column1) REFERENCES table2 (column1)
ON DELETE NO ACTION
ON UPDATE NO ACTION
                                                                                       :‫הוספת עמודה‬
ALTER TABLE table1 ADD COLUMN column1 DataType(Size) {NULL/NOT NULL}
                                                                                        :‫הסרת עמודה‬
ALTER TABLE table_name DROP COLUMN column_name
                                                                       )‫יצירת תצוגה (טבלה וירטואלית‬
CREATE VIEW view_name AS SELECT…
              .‫לאחר יצירת התצוגה , ניתן לגשת לעמודות התצוגה באותו האופן בו היינו ניגשים לטבלה רגילה‬
                                                                                            :‫לדוגמה‬
SELECT * FROM view_name WHERE condition


                                                                                    .‫ – הסרה‬Drop
  DROP TABLE table_name
  DROP TRIGGER trigger_name
  DROP VIEW view_name
.‫ – צירוף של עמודות ממספר טבלאות‬Joins

                                                                                               Inner join
                                                                                                 :‫לדוגמה‬
SELECT lastname, title FROM listofartists, work
WHERE listofartists.artistid = work.artistid
                                                                                             :‫ובאופן שקול‬
SELECT lastname, title FROM listofartists
JOIN work ON Listofartists.artistid = work.artistID
                                                                      :‫ במידת הצורך‬Joins ‫ניתן לשרשר יותר‬
SELECT C.Lastname, A.Lastname
FROM customer AS C JOIN customer_artist_int AS C1
ON C.customerID = C1.customerID
JOIN listofartist AS A
ON C1.artistID = A.artistID
                                                                                        :‫ובאותו אופן שקול‬
SELECT C.lastname, A.lastname
FROM customer AS C, customer_artist_int AS C1, listofartists AS A
WHERE C.customerID=C1.CustomerID AND C1.artistID=A.artistID


                                                                                             . Outer Join


                               .‫ – כל השורות בטבלה הראשונה שמוצגת בהוראה תהיינה מוכלות בתוצאה‬Left join
                               .‫ – כל השורות בטבלה השניה שמוצגת בהוראה תהיינה מוכלות בתוצאה‬Right Join
  ‫נבחין שלא נדרשת התאמה בין המבנים של הטבלאות ועל כן, ייתכנו בקלות מצבים בהם נקבל שעבור ישות מסוימת‬
                                       .‫ בשדות עבורם אין מידע‬NULL ‫אין נתונים מסוימים. במקרה זה, יופיע ערך‬



                                                                                                  :‫דוגמה‬
SELECT C.lastname, C.firstname, T.transactionID, T.salesprice
FROM Customer AS C LEFT JOIN trans AS T ON
C.customerID=T.customerID ORDER BY T.transactionID;


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


           .‫, אנו נקבל רק את אלו שיש עבורם טרנזקציה‬RIGHT JOIN‫ ב‬LEFT JOIN ‫* במקרה שכזה, אם נחליף את‬
. Triggers

                                         .‫טריגר משויך לטבלאות ומופעל בעת שינוי של הנתונים בטבלה מסוימת‬
                                       .‫ניתן לקבוע האם הטריגר יבצע הכנסה, מחיקה או עדכון של רכיב בטבלה‬
                                           .$$ ‫ ונועל של הטריגר יהיה‬delimiter $$ ‫פתיח של טריגר הוא הביטוי‬
delimiter $$
CREATE TRIGGER trigger_name
{AFTER, BEFORE} {INSERT, UPDATE, DELETE} ON tablename FOR EACH row
BEGIN...END       $$
                                                                   :‫בגוף הטריגר יכולות להופיע הגדרות כגון‬
                                              :‫ – להגדרת עמודה חדשה, מתבצע באופן הבא‬Declare -
  DECLARE ArtistNationality CHAR(30);
  ‫, רק הפוך, בוחרים את המקור ממנו יילקחו הנתונים‬SELECT… FROM ‫ – בדומה ל‬SELECT… INTO -
                                                                                  :‫לעמודת היעד‬
  SELECT Nationality INTO ArtistNationality FROM…
                                            :‫ - הכנסת שורה חדשה לטבלה קיימת‬INSERT INTO… -
               INSERT INTO table_name (SELECT *…)
                                                                         :IF... THEN ... ‫- התניות‬
  IF (ArtistNationalit = 'Mexican') THEN
  IF (New. Salesprice < New.AskingPrice) THEN
  UPDATE trans SET…
  END IF; END IF
      ‫ לא ניתן לעדכן את הטבלה עליה מורץ טריגר ועל כן, יש לעבוד עם‬MySQL – ‫יש לקחת בחשבון שב‬        
                                                                         .‫ במקביל‬dummy ‫טבלת‬
                                                             .‫ זוהי השורה החדשה שהוכנסה‬NEW        
                                                                                         :‫ביטול‬   
  DROP TRIGGER trigger_name
  DROP TABLE table_name
  DELETE FROM table WHERE column =value
                                                        :TRIGGER ‫ באמצעות‬CHECK ‫מימוש של‬           
  CREATE TRIGGER trigger_name
  BEFORE UPDATE ON table_name
  FOR EACH ROW BEGIN
  IF NEW.Column NOT BETWEEN 0 AND 100 THEN
  SET NEW.column = 1/0;
  END IF; END;

More Related Content

SQL - שפת הגדרת הנתונים

  • 1. DDL – Data Definition Language : ‫יצירת טבלה חדשה‬ CREATE TABLE table_name ( Column_name Datatype Optional Constraints, Optional Table Constrants); :‫דוגמה‬ CREATE TABLE ListOfArtists( ArtistID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ArtistID), UNIQUE KEY ArtistAK1 (LastName, FirstName)); ‫מפתח ייחודי, כלומר לא יופיעו‬ A B )A,B( ‫בטבלה שני צירופים זהים‬ ON UPDATE / ON DELETE ‫התנהגות בעדכון או מחיקה של ערכים בטבלה‬ CASCADE ‫עדכון / מחיקה בטבלת ההורה יחלחל גם עבור טבלאות הילד‬ NO ACTION / RESTRICT ‫חסימת האפשרות לעדכן / למחוק מטבלת ההורה‬ SET NULL ‫עדכון / מחיקה בטבלת ההורה יניב איפוס הערכים התואמים בטבלאות הילד‬ . The CHECK Constraint :‫אילוצים‬ .‫הגדרת התחום עבור ערכים בטבלה‬ .‫רצוי לתת שם לכל אילוץ ע"מ שניתן יהיה לגשת אליו לצרכי עדכון והסרה‬ :‫דוגמאות‬ CONSTRAINT cons_Name1 PRIMARY KEY (ArtistID), CONSTRAINT cons_Name2 UNIQUE KEY (Last Name, First Name), CONSTRAINT cons_Name3 CHECK (status IN ('Single', 'Married', …)), CONSTRAINT cons_Name4 CHECK (Date of Birth< DateDeceased), CONSTRAINT cons_Name5 CHECK (Date of Birth LIKE '[1-2][0-9][0-9][0-9]')
  • 2. : ‫הוספת שורה חדשה לסוף הטבלה‬ INSERT INTO table_name (col1,col2…colN) Values ('col1_val', 'col2_val',… 'colN_val') :‫אם מזינים ערכים של כל העמודות לפי הסדר, אז ניתן להשמיט את שמות העמודות, כך‬ INSERT INTO table_name Values ('col1_val', 'col2_val',… 'colN_val') : ‫שכפול של טבלה‬ 1) CREATE TABLE table_copy (SELECT * FROM table) 2) CREATE TABLE table_copy LIKE table; INSERT INTO table_copy(SELECT * FROM table); : ‫מחיקת שורה מטבלה‬ DELETE FROM table_name WHERE column=value : ‫עדכון ערכים בטבלה‬ UPDATE table_name SET column=value WHERE condition .‫ – שינויים מבניים‬ALTER ‫הוספת אילוץ‬ : ‫לדוגמה‬ ALTER TABLE table1 ADD CONSTRAINT cons_name FOREIGN KEY (column1) REFERENCES table2 (column1) ON DELETE NO ACTION ON UPDATE NO ACTION :‫הוספת עמודה‬ ALTER TABLE table1 ADD COLUMN column1 DataType(Size) {NULL/NOT NULL} :‫הסרת עמודה‬ ALTER TABLE table_name DROP COLUMN column_name )‫יצירת תצוגה (טבלה וירטואלית‬ CREATE VIEW view_name AS SELECT… .‫לאחר יצירת התצוגה , ניתן לגשת לעמודות התצוגה באותו האופן בו היינו ניגשים לטבלה רגילה‬ :‫לדוגמה‬ SELECT * FROM view_name WHERE condition .‫ – הסרה‬Drop DROP TABLE table_name DROP TRIGGER trigger_name DROP VIEW view_name
  • 3. .‫ – צירוף של עמודות ממספר טבלאות‬Joins Inner join :‫לדוגמה‬ SELECT lastname, title FROM listofartists, work WHERE listofartists.artistid = work.artistid :‫ובאופן שקול‬ SELECT lastname, title FROM listofartists JOIN work ON Listofartists.artistid = work.artistID :‫ במידת הצורך‬Joins ‫ניתן לשרשר יותר‬ SELECT C.Lastname, A.Lastname FROM customer AS C JOIN customer_artist_int AS C1 ON C.customerID = C1.customerID JOIN listofartist AS A ON C1.artistID = A.artistID :‫ובאותו אופן שקול‬ SELECT C.lastname, A.lastname FROM customer AS C, customer_artist_int AS C1, listofartists AS A WHERE C.customerID=C1.CustomerID AND C1.artistID=A.artistID . Outer Join .‫ – כל השורות בטבלה הראשונה שמוצגת בהוראה תהיינה מוכלות בתוצאה‬Left join .‫ – כל השורות בטבלה השניה שמוצגת בהוראה תהיינה מוכלות בתוצאה‬Right Join ‫נבחין שלא נדרשת התאמה בין המבנים של הטבלאות ועל כן, ייתכנו בקלות מצבים בהם נקבל שעבור ישות מסוימת‬ .‫ בשדות עבורם אין מידע‬NULL ‫אין נתונים מסוימים. במקרה זה, יופיע ערך‬ :‫דוגמה‬ SELECT C.lastname, C.firstname, T.transactionID, T.salesprice FROM Customer AS C LEFT JOIN trans AS T ON C.customerID=T.customerID ORDER BY T.transactionID; .‫ בשדות עבורם אין נתונים‬NULL‫כך שיופיעו כל הלקוחות, גם אלו שלא ביצעו טרנזקציות..., כאמור יופיע‬ .‫, אנו נקבל רק את אלו שיש עבורם טרנזקציה‬RIGHT JOIN‫ ב‬LEFT JOIN ‫* במקרה שכזה, אם נחליף את‬
  • 4. . Triggers .‫טריגר משויך לטבלאות ומופעל בעת שינוי של הנתונים בטבלה מסוימת‬ .‫ניתן לקבוע האם הטריגר יבצע הכנסה, מחיקה או עדכון של רכיב בטבלה‬ .$$ ‫ ונועל של הטריגר יהיה‬delimiter $$ ‫פתיח של טריגר הוא הביטוי‬ delimiter $$ CREATE TRIGGER trigger_name {AFTER, BEFORE} {INSERT, UPDATE, DELETE} ON tablename FOR EACH row BEGIN...END $$ :‫בגוף הטריגר יכולות להופיע הגדרות כגון‬ :‫ – להגדרת עמודה חדשה, מתבצע באופן הבא‬Declare - DECLARE ArtistNationality CHAR(30); ‫, רק הפוך, בוחרים את המקור ממנו יילקחו הנתונים‬SELECT… FROM ‫ – בדומה ל‬SELECT… INTO - :‫לעמודת היעד‬ SELECT Nationality INTO ArtistNationality FROM… :‫ - הכנסת שורה חדשה לטבלה קיימת‬INSERT INTO… - INSERT INTO table_name (SELECT *…) :IF... THEN ... ‫- התניות‬ IF (ArtistNationalit = 'Mexican') THEN IF (New. Salesprice < New.AskingPrice) THEN UPDATE trans SET… END IF; END IF ‫ לא ניתן לעדכן את הטבלה עליה מורץ טריגר ועל כן, יש לעבוד עם‬MySQL – ‫יש לקחת בחשבון שב‬  .‫ במקביל‬dummy ‫טבלת‬ .‫ זוהי השורה החדשה שהוכנסה‬NEW  :‫ביטול‬  DROP TRIGGER trigger_name DROP TABLE table_name DELETE FROM table WHERE column =value :TRIGGER ‫ באמצעות‬CHECK ‫מימוש של‬  CREATE TRIGGER trigger_name BEFORE UPDATE ON table_name FOR EACH ROW BEGIN IF NEW.Column NOT BETWEEN 0 AND 100 THEN SET NEW.column = 1/0; END IF; END;