.Sql - Structed Query Language המודל הטבלאי - Relational -הצגת נתונים ע"י טבלאות המקיימות יחסי גומלין באמצעות מאפיינים משותפים. המודל הרלציוני -שדה ,רשומה ,טבלה ,מסד נתונים ,שדה מפתח. טרנזקציה -פעולה או רצף של פעולות המתבצעות ע"י המשתמש או תהליך אשר קורא או מעדכן את נתוני בסיס הנתונים. : ACID • – Atomicכל טרנזקציה היא יחידה אחת ,אטומית המבצעת מטלה אחת בלבד. • - Consistencyטרנזקציה מעבירה את בסיס הנתונים ממצב קונסיסנטי – יציב אחד לשני. • - Isolationכל טרנזקציה היא יישות בפני עצמה. • - Durabilityתוצאות הצלחה נשמרות בתוך בסיס הנתונים. בסיסי נתונים מבוזרים – distributed databases -אוסף של נתונים הקשורים באופן לוגי והנמצאים פיזית בשרתים שונים. - DDBMSמנוע המאפשר ניהול של בסיסי נתונים מבוזרים. - VIEWהוא רלציה וירטואלית המוגדרת כפקודת ,sqlה view-מופעל ויוצר את מרחב התוצאות באופן דינמי. – DML - data manipulation languageשפה לניהול הנתונים – .select,update – DDL - data definition languageשפה להגדרות בסיס הנתונים .alter,drop,create - – DCL - data control languageפקודה לשליטה בבסיס הנתונים ,rollback -הרשאות וכדומה. – Unique & PKהגדרת אילוצים Primary Keyו unique-גורמת ליצירת אינדקס לא משוכפל על אותן העמודות. - FK – Foreign Keyמבטא את היחס הלוגי בין שני הטבלאות.
: JOIN – Inner Joinהצירוף הפנימי הסטנדרטי – טוב לשליפת נתונים משני טבלאות או יותר.
– OuterJoinצירוף חיצוני – משתמשים בו כאשר יש לשלוף נתונים שאינם משותפים לשני הטבלאות – ניתן גם להשתמש ב.cross Join- צירופים חיצוניים ימנים ושמאליים שונים זה מזה רק בסדר הטבלאות המופיעות בפסוקית .Fromצירוף חיצוני מלא הוא שילוב של שניהם – דבר שלא אפשרי ולכן יש צורך בצירוף חיצוני מלא – .Full Join Select sales,title from titles left outer join sales on titles.titleid = sales.titleid
: OuterJoin + InnerJoin
– CrossJoinמכפלה קרטזית של כל השורות מכל הטבלאות המופיעות במשפט ה.select- Select name,title from authors cross join title
– SelfJoinצירוף עצמי – הינו צירוף פנימי או חיצוני על אותה הטבלה.
: Multi Inner Join
: SP-דוגמא ל CREATE PROCEDURE spSelectBasketToExcel @orderNum int , @cust int AS BEGIN select distinct orderLine, orderNum, basket.cust, basket.t$part, quant, price,quant*price as total, part.epartdes, part.partname,Custdes,Customers.address ,ename FROM basket inner join Customers on Customers.Cust = basket.cust left join Currencies on Customers.currency = Currencies.Currency inner join part on part.t$part = basket.t$part WHERE)orderNum = @orderNum and basket.cust = @cust( END
:הרצת הפרוצדורה EXEC spSelectBasketToExcel 1,1
: Trigger-דוגמא ל CREATE TRIGGER TR_SubTask_Num ON Tasks AFTER INSERT, UPDATE AS DECLARE @TaskID int, @count smallint SET @TaskID) = SELECT TOP 1 (T.TaskID) FROM Tasks T, inserted INS WHERE T.TaskID = INS.TaskID( SET @count) = SELECT COUNT(SubTaskID) FROM SubTasks WHERE MainTaskID = @TaskID( IF (@count > 5) BEGIN -- Error report: RAISERROR ('Too Many SubTasks for the MainTask: %d', 16, 1, @TaskID) ROLLBACK TRANSACTION END ELSE BEGIN UPDATE Tasks SET SubTaskNum = @count WHERE TaskID = @TaskID END
: Function-דוגמא ל -- This function returns a table CREATE FUNCTION Fnc_isTaskDone (@EndDate datetime) RETURNS @DoneTasksReport TABLE (TaskID varchar(6) primary key, TaskState varchar(1), BeginDate varchar(11), EndDate varchar(11), TaskIssue char(100), SubTaskNum int, WorkersNum int) AS BEGIN DECLARE @TaskID varchar(6), @Date datetime -- Use a Cursor to insert selected values into table DECLARE TasksCursor CURSOR FOR SELECT TaskID, EndDate FROM Tasks OPEN TasksCursor FETCH NEXT FROM TasksCursor into @TaskID, @Date WHILE (@@fetch_status = 0) BEGIN IF (@Date < @EndDate) INSERT @DoneTasksReport SELECT * FROM Tasks WHERE TaskID = @TaskID FETCH NEXT FROM TasksCursor into @TaskID, @Date END CLOSE TasksCursor DEALLOCATE TasksCursor RETURN END :הרצת הפונקציה SELECT * FROM Fnc_isTaskDone ('4/6/2003')
: DML פקודות
SELECT * FROM TABLE
JOIN R1,R2 WHERE R1.B=R2.E GIVING R3
DISTINCT – למנוע כפילויות
R1 UNION R2 GIVING R3 - איחוד
R1 INTERSECT R2 GIVING R3 - חיתוך
SELECT COUNT(EMP_N) FROM TABLE
WHERE ? LIKE ‘%A’ - פילטר
GROUP BY - הקבצה
HAVING - " – תנאי שמתייחס לקבוצהselect * from titles group by titleId having count(titlePrice)"
ORDER BY DESC / ASC – סידור
SELECT ADDRESS,SUBSTRING(ADDRESS FROM S) AS SUB_ADDRESS
EXTRACT (YEAR FROM DATE) AS YY - שליפת חלק מביטוי
SELECT * FROM TABLE WHERE COL = NOT IN ( select distinct ? from ?)
/ FROM 2 FOR 10