Department of Computer Science University of Cyprus EPL342 Databases Lecture 17: SQL DML IV SQL Structured Query Language (Chapter 8.5.5-8.6, Elmasri-Navathe 5ED) Demetris Zeinalipour http://www.cs.ucy.ac.cy/courses/epl342 16-1
Πεξηερόκελν Γηάιεμεο Οινθιήξσζε Γηάιεμεο 16. Κεθάιαην 8.5.5-8.6: SQL DML IΙΙ Ενηολή Μεηονομαζίαρ AS ζε SQL Πποσωπημένερ Σςνενώζειρ ζε SQL (JOINS) Σςναθποιζηικέρ Σςναπηήζειρ ζε SQL (COUNT, MAX, MIN, AVG, SUM), Ενηολή Ομαδοποίηζηρ (GROUP-BY) και Ενηολή Επιλογήρ-μεηά-από-Ομαδοποίηζη (HAVING) ζε SQL Ενηολέρ Ειζαγωγήρ/Διαγπαθήρ/Ενημέπωζηρ (INSERT / DELETE / UPDATE) ζε SQL, 16-2
Οκαδνπνίεζε ζε SQL (GROUP BY) Σε πνιιέο πεξηπηώζεηο ζέινπκε λα εθαξκόζνπκε ηα απνηειέζκαηα ζπλαζξνηζηηθώλ ζπλαξηήζεσλ ζε ππννκάδεο πιεηάδσλ ζε κηα ζρέζε. Μέιε ππννκάδαο: Πιεηάδεο πνπ έρνπλ ηελ ίδηα ηηκή ζην/α γλσξίζκαηα νκαδνπνίεζεο, π.ρ., Παξαδείγκαηα: Δύξεζε Μέζνπ Όξνπ Μηζζώλ αλά Τκήκα (Dno). Δύξεζε Τκήκαηνο/σλ κε Μέζν Μηζζό πάλσ από 50000. 16-3
Οκαδνπνίεζε ζε SQL (GROUP BY) Γηα ηελ πινπνίεζε ηεο νκαδνπνίεζεο ζε SQL εθηειείηαη πξώηα ε ζπλάξηεζε ζπλάζξνηζεο ζε θάζε ππννκάδα αλεμάξηεηα. Γίλεηαη ρξήζε ηεο εληνιήο GROUP BY Π.ρ., Δύξεζε Μέζνπ Μηζζνύ αλά ηκήκα Σηελ ζπλέρεηα κπνξεί λα ρξεζηκνπνηεζεί θαη έλα θηιηξάξηζκα ησλ απνηειεζκάησλ βάζεη ηεο ππννκάδαο νκάδαο. Γίλεηαη ρξήζε ηεο εληνιήο HAVING Π.ρ., Φηιηξάξηζκα Απνηειεζκάησλ Μέζσλ Μηζζώλ > 50,000 16-4
Δλλνηνινγηθή Δθηέιεζε Δλόο SQL Μπινθ Αο δνύκε ιίγν θαιύηεξα κε πνηα ζεηξά εθηειείηαη έλα SQL κπινθ ζε έλα αθαηξεηηθό (ελλνηνινγηθό) επίπεδν. Η πεξηγξαθή απηή είλαη ζε ελλνηνινγηθό επίπεδν, επνκέλσο ην πιάλν εθηέιεζεο (query plan) εο επεξώηεζεο ζηα παξαδείγκαηα ΓΔΝ ζα είλαη βέιηηζην. Η πξαγκαηηθό πιάλν εθηέιεζεο ελαπόθεηηαη απνθιεηζηηθά ζηελ βάζε δεδνκέλσλ. Απηή ε δνπιεηά δηεθπεξαηώλεηαη από ηνλ βελτιστοποιητή επερωτήσεων (query optimizer) ο οποίορ έσει μεγάλη πολςπλοκόηηηα. Μια ςλοποίηζη ηος ζε εμποπική βάζη λέγεηαι όηι πήπε 50 ανθπωποσπόνια επγαζίαρ. Θεσξνύκε όηη ε βάζε καο είλαη έλαο ή πεξηζζόηεξνη πίλαθεο απνζεθεπκέλνη ζηνλ δίζθν ρσξίο άιιεο δνκέο δεδνκέλσλ (επξεηήξηα αλαδήηεζεο, θηι). Η πεξηγξαθή απηή ζα καο επηηξέςεη λα θαηαιάβνπκε θαιύηεξα ηη EPL342: παξάγεηαη Databases - Demetris από κηα Zeinalipour επεξώηεζε. (University of Cyprus) 16-5
Δλλνηνινγηθή Δθηέιεζε Δλόο SQL Μπινθ Έλα κπινθ επεξώηεζεο SQL απνηειείηαη από έμη όξνπο (clauses) νη νπνίνη εθηεινύληαη (ζε ινγηθό επίπεδν) όπσο θαίλεηαη πην θάησ: 6) SELECT <Attribute(s) AS Alias(s)> 3) Αgg1 AS Alias, AggN as Alias 1) FROM <table(s)> 2) [WHERE <condition>] 3) [GROUP BY <grouping attribute(s)>] 4) [HAVING <group condition>] 5) [ORDER BY <attribute list>] Έλα Query εθηειείηαη ελλνηνινγηθά κε ηελ αθόινπζε ζεηξά: 1. FROM: Σπλέλσζε (ή Καξ. Γηλ) ηνπο πίλαθεο ηνπ table-list π.ρ., FROM Employee E, Department D 2. WHERE: Γηάζρηζε Γξακκηθά ηνλ Πίλαθα πνπ παξάγεηαη ζην βήκα 1 απνηηκώληαο ηελ έθθξαζε <condition> ζε θάζε πιεηάδα. π.ρ., WHERE E.Dno=D.Dnumber and D.Dname= Research Σςνέσεια επόμενη διαθάνεια 16-6
Δλλνηνινγηθή Δθηέιεζε Δλόο SQL Μπινθ Έζησ ην ελδηάκεζν απνηέιεζκα: TEMP1(DNO, SSN, Salary) 3. GROUP BY: Γηάζρηζε γξακκηθά ην TEMP1, νκαδνπνηώληαο ηα απνηειέζκαηα βάζεη ηνπ grouping attribute(s) θαη ππνινγίδνληαο γηα θάζε νκάδα ηα αηηνύκελα ζπλαζξνηζηηθά απνηειέζκαηα: MAX, MIN, COUNT, SUM: Υινπνηνύληαη κε κηα κεηαβιεηή αλά νκάδα AVG = SUM / COUNT π.ρ., GROUP BY DNO Έζησ ην ελδηάκεζν απνηέιεζκα: TEMP2(DNO, AVG(salary)) 4. HAVING: Γηάζρηζε γξακκηθά ηo TEMP2 εθαξκόδνληαο ην <group condition> πάλσ ζε θάζε πιεηάδα. π.ρ., HAVING AVG(Salary)>15000 5. ORDER BY: Ταμηλόκεζε ηα απνηειέζκαηα βάζεη ηεο ζπλζήθεο π.ρ., ORDER BY AVG(Salary) 6. SELECT: Πξόβαιε ηα αηηνύκελα γλσξίζκαηα (από ην TEMP2) εθαξκόδνληαο ηα ζρεηηθά aliases ζηα απιά γλσξίζκαηα. π.ρ., SELECT DNO (ζπκεζείηε όηη ηα γλσξίζκαηα ηνπ ORDER BY δελ ρξεηάδεηαη λα εκθαλίδνληαη ζην SELECT) TEMP1 Dno, SSN, Sal 1, E1, 10000 2, E2, 12000 1, E3, 15000 2, E4, 20000... TEMP2 Dno, Avg(Sal) 1, 12500 2, 16000.. 16-7
Οκαδνπνίεζε ζε SQL (GROUP BY) Query 20: Γηα θάζε department, αλάθηεζε ην department number, ηνλ αξηζκό ησλ employees ζην ελ ιόγσ department, θαη ηνλ κέζν κηζζό ηνπο. Q20: SELECT DNO, COUNT (*), AVG (SALARY) FROM EMPLOYEE GROUP BY DNO Δλλνηνινγηθή Δθηέιεζε Δπεξώηεζεο: Η βάζε εθηειεί κηα γξακκηθή δηέιεπζε ηνπ πίλαθα Employee. Γηα θάζε πιεηάδα, βξίζθεη ην DNO ηεο πιεηάδαο, βάζεη ηνπ νπνίνπ απμάλεη ηνπο αθόινπζνπο κεηξεηέο: A. TUPLE_COUNT[DNO], B. SALARY_SUM[DNO], C. SALARY_COUNT_NONULLS[DNO], Σην ηέινο ηππώλεη γηα θάζε DNO ηα αθόινπζα: Dno, A, B/C 16-8
Οκαδνπνίεζε ζε SQL (GROUP BY) SELECT DNO, COUNT(*) AS Count, AVG(SALARY) AS AVG_Salary FROM EMPLOYEE GROUP BY DNO To SELECT μπλοκ εδώ δεν δοςλεύει σωπίρ ηο GROUP BY (λόγω ηηρ ύπαπξηρ ηος DNO). EMPLOYEE Γηα ην Department DNO=2 (40K + 30K+20K+56K+15K) / 5 Q20a Με NULLs Φσξίο NULLs 16-9
Οκαδνπνίεζε ζε SQL (GROUP BY) SELECT DNO, COUNT(*) AS Count, AVG(SALARY) AS AVG_Salary FROM EMPLOYEE GROUP BY DNO, SSN -- Σσζηό, Φσξίο Ιδηαίηεξν Νόεκα σζηόζν EMPLOYEE Q20b 16-10
Οκαδνπνίεζε ζε SQL (GROUP BY) Δπηζεκάλζεηο: 1. Τν SELECT πεξηιακβάλεη είηε Aggregates (ΜΙΝ, ΜΑΦ, θηι) ή γλσξίζκαηα πνπ εκθαλίδνληαη θαη ζην GROUP BY, π.ρ., ΟΡΘΟ(ρσξίο ηδηαίηεξε ινγηθή): SELECT dno FROM EMPLOYEE GROUP BY dno, ssn -- πξνεγνύκελν παξάδεηγκα ΟΡΘΟ(ρσξίο ηδηαίηεξε ινγηθή): SELECT dno, ssn FROM EMPLOYEE GROUP BY dno,ssn ΛΑΘΟ: SELECT dno, ssn FROM EMPLOYEE GROUP BY dno -- απηό δηόηη ην ssn δελ πξνβάιιεηαη ζην ελδηάκεζν απνηέιεζκα ηνπ Group By 2. Δάλ ππάξρεη NULL ζην γλώξηζκα νκαδνπνίεζεο ηόηε ηα νκαδνπνηεκέλα απηά απνηειέζκαηα εκθαλίδνληαη ζε κηα λέα επηπιένλ νκάδα. 16-11
Οκαδνπνίεζε ζε SQL (GROUP BY) Query 21: Γηα θάζε project, αλάθηεζε ην project number, project name, θαη ηνλ αξηζκό ησλ employees πνπ δνπιεύνπλ πάλσ ζην ελ ιόγσ project. Q21: SELECT PNUMBER, PNAME, COUNT (*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME Δμάζθεζε: Πεξηγξάςεηε ελλνηνινγηθά πσο ζα εθηειεζηεί ε πην πάλσ επεξώηεζε (κε βάζεη ηελ ινγηθή πνπ πεξηγξάςακε λσξίηεξα) 16-12
Δπηινγή κεηά από Οκαδνπνίεζε (HAVING) Ο όξνο HAVING, ρξεζηκνπνηείηαη όηαλ ζέινπκε λα επηιέμνπκε έλα ππνζύλνιν ελόο νκαδνπνηεκέλνπ απνηειέζκαηνο βάζεη ζπλζήθεο. Π.ρ., επηινγή ησλ DΝΟ κε κέζν κηζζό πάλσ από 35,000 Δπηζεκάλζεηο Τν HAVING έρεη αληίζηνηρε ιεηηνπξγία κε ην WHERE, κόλν πνπ ε ζπλζήθε επηινγήο είλαη πάλσ ζε νκάδεο παξά ζε επί κέξνπο πιεηάδεο. Τα γλσξίζκαηα πνπ εκθαλίδνληαη ζην HAVING πξέπεη νπσζδήπνηε λα εκθαλίδνληαη ζην GROUP BY (ζπκεζείηε ηα βήκαηα ηεο ελλνηνινγηθήο εθηέιεζεο επεξσηήζεσλ) Π.ρ., HAVING AVG(Salary)>35000 16-13
Δπηινγή κεηά από Οκαδνπνίεζε (HAVING) Query 22: Γηα θάζε project πάλσ ζην νπνίν δνπιεύνπλ πεξηζζόηεξνη από 2 employees, αλάθηεζε ην project number, project name, θαη ηνλ αξηζκό ησλ employees πνπ δνπιεύνπλ πάλσ ζην project απηό. Q22: SELECT PNUMBER, PNAME, COUNT(*) FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER, PNAME HAVING COUNT (*) > 2 O βαζηθόο ιόγνο πνπ θάλνπκε group by βάζεη θαη ηνπ PNAME είλαη επεηδή ζέινπκε ην PNAME ζην απνηέιεζκα ηνπ SELECT 16-14
Αιιάδνληαο ηελ Καηάζηαζε κηο Βάζεο κε SQL Μέρξη ζηηγκήο είδακε ηα αθόινπζα: Οξηζκόο Γνκήο Βάζεο κε SQL-DDL (CREATE) Μεηαβνιή Γνκήο Βάζεο κε SQL-DDL (ALTER/DROP) Οξηζκόο Δπεξσηήζεσλ κε SQL-DML (SELECT ) Ήξζε ε ώξα λα δνύκε πσο κπνξνύκε λα κεηαβάινπκε ηελ θαηάζηαζε κηαο βάζεο κε εηζαγσγέο, δηαγξαθέο, θαη ελεκεξώζεηο πιεηάδσλ ζε SQL-DML. Θα κειεηήζνπκε ηηο εληνιέο INSERT, DELETE, and UPDATE ηεο SQL:99 αιιά θαη θάπνηεο εμεηδηθεπκέλεο εληνιέο ηεο TSQL. 16-15
Δηζαγσγή Γεδνκέλσλ ζηελ SQL (INSERT) H εληνιή INSERT εηζάγεη κηα ή πεξηζζόηεξεο πιεηάδεο ζε κηα πθηζηάκελε ζρέζε INSERT [INTO] <table-name> [(<column-list>)] VALUES (<data values>) [, (<data values>)] [, n]; Π.ρ., INSERT INTO EMPLOYEE(surn,name,ssn,age) VALUES ('Name', Lastname', 748797, 34); Δπηζεκάλζεηο: Δάλ δελ νξηζηεί ην (<column-list) ηόηε πξέπεη: 1.Να δνζνύλ ηα (<data values>) γηα ΌΛΑ ηα γλσξίζκαηα, KAI 2.Να δνζνύλ ηα (<data values>) κε ηελ ίδηα ζεηξά όπσο απηά νξίζηεθαλ θαηά ηελ CREATE TABLE εληνιή Π.ρ., INSERT INTO EMPLOYEE VALUES (748797, 'Name', Lastname',34); 16-16
Δηζαγσγή Γεδνκέλσλ ζηελ SQL (INSERT) Δηζαγσγή Σηκώλ γηα πγθεθξηκέλα Πεδία: Δάλ ην επηηξέπνπλ νη πεξηνξηζκνί ηνπ πίλαθα, ηόηε κπνξεί λα γίλεη εηζαγσγή ππνζπλόινπ πεδίσλ, π.ρ., INSERT INTO EMPLOYEE(ssn) VALUES (7); Σε απηέο ηηο πεξηπηώζεηο ηα ππόινηπα πεδία είηε κέλνπλ NULL ή απηά παίξλνπλ ηηο αληίζηνηρεο DEFAULT ηηκέο ηνπο. Δπηζεκάλζεηο γηα TSQL: Πεδία ηύπνπ IDENTITY ζε TSQL ΓΔΝ πξέπεη λα κελ δειώλνληαη ξεηά ζην INSERT εθόζνλ απηά ζα ζπκπιεξσζνύλ απηόκαηα. INSERT INTO dbo.tab(name) VALUES ('SomeName') -- Δηζαγσγή Γεδνκέλσλ. SELECT @@IDENTITY; -- Δμεύξεζε Τειεπηαίαο Δηζαρζείζαο IDENTITY ηηκήο ζε TSQL. Δηζαγσγή Πνιιαπιώλ Δγγξαθώλ: H TSQL 08 (OXI ζε παιηόηεξεο εθδόζεηο) πξνζθέξεη ηελ δπλαηόηεηα εηζαγσγήο πνιιαπιώλ πιεηάδσλ κε κηα εληνιή INSERT, δει., INSERT INTO EMPLOYEE VALUES ('a','b',7,34), ('a','b',8,30), ('a','b',9,24), ('a','b',10,22); 16-17
Δηζαγσγή Γεδνκέλσλ ζηελ SQL (INSERT) Παξάδεηγκα: Υπνζέζηε όηη ζέιεηε λα δεκηνπξγήζεηε έλα λέν πίλαθα ν νπνίνο ζα έρεη γηα θάζε department ην name, number of employees, θαη ην άζξνηζκα ησλ salaries. Βήκα Α: Γεκηνπξγία Πίλαθα DEPTS_INFO U3A: CREATE TABLE DEPTS_INFO (DEPT_NAME VARCHAR(10), NO_OF_EMPS INTEGER, TOTAL_SAL INTEGER); Βήκα Β: Δηζαγσγή Γεδνκέλσλ ζηνλ DEPTS_INFO U3B: INSERT INTO DEPTS_INFO (DEPT_NAME, NO_OF_EMPS, TOTAL_SAL) SELECT DNAME, COUNT (*), SUM (SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO GROUP BY DNAME ; Σημείωση: Εδώ ηο INSERT είναι ολόκληπο SELECT μπλοκ 16-18
Δηζαγσγή Γεδνκέλσλ ζηελ SQL (INSERT) Σεκεηώζηε όηη ζην πξνεγνύκελν παξάδεηγκα, ν πίλαθαο DEPTS_INFO ΓΔΝ ζα είλαη ελεκεξσκέλνο ζε πεξίπησζε πνπ κεηαβάιιεηαη είηε ν πίλαθαο DEPARTMENT ή ν πίλαθαο EMPLOYEE. Σε εξρόκελεο δηαιέμεηο ζα κάζνπκε ηελ έλλνηα ησλ Όςεσλ (Views) ηα νπνία κπνξνύλ λα δηαηεξνύλ ελεκεξσκέλν έλα πίλαθα πνπ νξίδεηαη βάζεη άιισλ πηλάθσλ. 16-19
Μαδηθή Δηζαγσγή Γεδνκέλσλ ζε TSQL (BULK INSERT) Μηα εμαηξεηηθά ρξήζηκε εληνιή είλαη ε BULK INSERT ε νπνία εηζάγεη καδηθά δεδνκέλα από αξρεία θεηκέλνπ: ηoλ SQL Server: BULK INSERT OrdersBulk FROM 'c:\data.csv' WITH (FIRSTROW=2, FIELDTERMINATOR=',', ROWTERMINATOR='\n ) Υπνζέζηε όηη έρνπλ πξνεγεζεί ηα αθόινπζα: CREATE TABLE OrdersBulk(CustomerID INT, CustomerName VARCHAR(32), OrderID INT, OrderDate SMALLDATETIME) Τν data.csv ζεσξήζηε όηη έρεη ηελ αθόινπζε δνκή: # CustomerID,CustomerName,OrderID,OrderDate 1,foo,5,20031101 3,blat,7,20031101 5,foobar,23,20031104 ηελ PostgreSQL: COPY products(product_no, name, price) FROM '/tmp/products.dat WITH DELIMITER ', ; BULK Insert: http://msdn.microsoft.com/en-us/library/ms188365.aspx 16-20
Γηαγξαθή Γεδνκέλσλ ζηελ SQL (DELETE) H εληνιή DELETE δηαγξάθεη πιεηάδεο από κηα ζρέζε βάζεη θάπνηαο νξηζκέλεο ζπλζήθεο: DELETE [FROM] <table-name> [WHERE <condition>] Π.ρ., DELETE FROM EMPLOYEE where Dno=5; Δπηζεκάλζεηο 1. Δάλ δελ νξηζηεί ν όξνο WHERE, ηόηε ζβήλνληαη ΟΛA oια ηα δεδνκέλα (πιεηάδεο) κηαο ζρέζεο. Π.ρ., «DELETE FROM EMPLOYEE» (αληίζηνηρν ηεο TRUNCATE EMPLOYEE) Τν DROP από ηελ άιιε ζβήλεη ηόζν ηα δεδνκέλα όζν θαη ην ζρήκα ηεο βάζεο από ηνλ θαηάινγν ηνπ ζπζηήκαηνο. 16-21
Γηαγξαθή Γεδνκέλσλ ζηελ SQL Δπηζεκάλζεηο (DELETE) 2. Οη θαλόλεο αλαθνξηθήο αθεξαηόηεηαο επηβάιινληαη από ηελ βάζε θαηά ηελ δηαγξαθή π.ρ., ην ζύζηεκα απαγνξεύεη ηελ δηαγξαθή ελόο EMPLOYEE πνπ αλαθέξεηαη από ηελ ζρέζε WORKS_ON. 3. Γελ ππάξρεη ε έλλνηα ηεο δηαγξαθήο από πνιιαπινύο πίλαθεο. Κάζε δηαγξαθή αλαθέξεηαη ζε 1 πίλαθα U4A: DELETE FROM EMPLOYEE WHERE LNAME='Brown Ωζηόζν, εάλ νξίδνληαη Δληνιέο Δλεξγνπνίεζεο Αλαθνξάο, ηόηε κηα δηαγξαθή κπνξεί λα πξνθαιέζεη κηα ή πεξηζζόηεξεο αιπζηδσηέο δηαγξαθέο π.ρ., εάλ έρνπκε ON DELETE CASCADE ζηελ WORKS_ON(ssn) (κε αλαθνξά ζηνλ EMPLOYEE(ssn)) ηόηε ε δηαγξαθή ελόο EMPLOYEE ζβήλεη θαη ηελ αληίζηνηρε πιεηάδα από ηελ WORKS_ON. 16-22
Γηαγξαθή Γεδνκέλσλ ζηελ SQL (DELETE) Παξάδεηγκα δηαγξαθήο κέζσ Δκθσιεπκέλεο Δπεξώηεζεο: Γηάγξαςε όινπο ηνπο Employees πνπ δνπιεύνπλ ζην ηκήκα ηνπ Research. Θπκεζείηε όηη Employee(,Dno) θαη Department(Dno,Dname, ) U4C: DELETE FROM EMPLOYEE WHERE DNO IN ( SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research ) Με ην ΙΝ απνθεύγνπκε ηελ ζπλέλσζε πνπ δελ είλαη εθηθηή ζηα πιαίζηα ηνπ DELETE 16-23
Δλεκέξσζε Γεδνκέλσλ ζηελ SQL (UPDATE) H εληνιή UPDATE ρξεζηκνπνηείηαη γηα λα ελεκεξώλεη ηελ ηηκή πξνθαζνξηζκέλσλ γλσξηζκάησλ κηαο ζρέζεο βάζεη θάπνηαο ζπλζήθεο. UPDATE <table-name> SET <column>=<value> [,<column>=<value>] [FROM <source table(s)>] [WHERE <condition>] Π.ρ., UPDATE Employee SET Dno=5 WHERE sex= M ; Δπηζεκάλζεηο: Τν WHERE ρξεζηκνπνηείηαη γηα λα πξνζδηνξηζηεί ην ζύλνιν εγγξαθώλ πνπ πξέπεη λα ελεκεξσζεί Τν SET πξνζδηνξίδεη ηα γλσξίζκαηα πνπ πξέπεη λα ελεκεξσζνύλ θαη ηελ λέα ηνπο ηηκή. Η ελεκέξσζε γίλεηαη ζε 1 ζρέζε (όρη πνιιέο) ηαπηόρξνλα. Οη θαλόλεο αθεξαηόηεηαο επηβάιινληαη απηόκαηα 16-24
Δλεκέξσζε Γεδνκέλσλ ζηελ SQL (UPDATE) Παξάδεηγκα: Δλεκέξσζε ην PLocation ηνπ Project κε αξηζκό 10 ζε 'Bellaire. Δπίζεο, ελεκέξσζε ηo Dnum ηνπ ελ ιόγσ project number ζε 5. =10 :=Bellaire :=5 U5: UPDATE PROJECT SET PLOCATION = 'Bellaire', DNUM=5 WHERE PNUMBER=10 16-25
Δλεκέξσζε Γεδνκέλσλ ζηελ SQL (UPDATE) εκείσζε: To UPDATE κπνξεί λα δεκηνπξγεζεί βάζεη πνιιώλ πηλάθσλ αιιά ε ηειηθή ελεκέξσζε γίλεηαη κόλν ζε 1 πίλαθα. Παξάδεηγκα: Γώζε ζε όινπο ηνπο employees ζην 'Research' department κηα αύμεζε 10% ζηνλ κηζζό. U6: UPDATE EMPLOYEE SET SALARY = SALARY *1.1 WHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT WHERE DNAME='Research') Καη πάιη, κε ην ΙΝ απνθεύγνπκε ηελ ζπλέλσζε πνπ δελ είλαη εθηθηή ζηα πιαίζηα ηνπ DELETE Νέν salary Παιαηό salary 16-26
Δλεκέξσζε Γεδνκέλσλ ζηελ SQL (INSERT/UPDATE/DELETE) Γεληθέο Δπηζεκάλζεηο Μηα Δλεκέξσζε (UPDATE) απνηπγράλεη εάλ παξαβηαζηνύλ θαλόλεο θαη πεξηνξηζκνί πνπ έρνπλ νξηζηεί, δει., Πεξηνξηζκνί, Αλαθνξηθήο Αθεξαηόηεηαο, CHECK, NULL, ζπκβαηόηεηα-πξνο-ηνλ-ηύπo, θηι. Σε απηέο ηηο πεξηπηώζεηο αθπξώλνληαη ΟΛΔ νη ελεκεξώζεηο (όρη κόλν απηή πνπ πξνθάιεζε ηελ παξαβίαζε). H Δλεκέξσζε (UPDATE) Primary Keys πξέπεη λα γίλεηαη κε κεγάιε πξνζνρή εθόζνλ απηή ελδέρεηαη λα πξνθαιέζεη αιπζηδσηέο αιιαγέο ζηελ θαηάζηαζε ηεο βάζεο. 16-27