Download presentation
Presentation is loading. Please wait.
1
SQL Views CS542
2
SQL DML (Updating Data) Insert Delete Update
CS542
3
Inserting tuples INSERT INTO Student
VALUES (6, ‘Emily’, ‘324 FL’, NULL); INSERT INTO Student (sNumber, sName) VALUES (6, ‘Emily’); INSERT INTO Professor (pNumber) SELECT professor.id FROM Student; CS542
4
Delete DELETE FROM Student WHERE sNumber=‘6’; CS542
5
SET professor=‘MickyMouse’ WHERE sNumber=‘6’
Update UPDATE Student SET professor=‘MickyMouse’ WHERE sNumber=‘6’ CS542
6
Views NOTE: You can present logical subsets or combinations of the data by creating views of tables. A view is a virtual table based on a table or another view. A view contains no data of its own but is like a window through which data from tables can be viewed or changed. The tables on which a view is based are called base tables. The view is stored as a SELECT statement in the data dictionary. CS542
7
Views View is a virtual relation defined by:
Named stored SQL query Views can be queried like any “base” relation. CS542
8
Views CREATE VIEW <viewName> as <query>
CREATE VIEW studentProfessor (student, professor) AS SELECT sName, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; DROP VIEW studentProfessor CS542
9
Views - Example Student Professor
sNumber sName address professor 1 Dave 320FL 2 Greg 3 Matt pNumber pName address 1 MM 235FL 2 ER 241FL CREATE VIEW studentProfessor (student, professor) AS SELECT sName, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; student professor Dave MM Greg Matt ER SELECT * from studentProfessor CS542
10
Views - Example Student Professor
sNumber sName address professor 1 Dave 320FL 2 Greg 3 Matt pNumber pName address 1 MM 235FL 2 ER 241FL student professor Dave MM Greg Matt ER CREATE VIEW studentProfessor (student, professor) AS SELECT sName, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; advisees professor 2 MM 1 ER SELECT professor, count(*) as advisees FROM studentProfessor GROUPBY professor; CS542
11
Querying Views CREATE VIEW studentProfessor (student, professor) AS
SELECT sName, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; student professor Dave MM Greg Matt ER SELECT pnumber as professor, count(*) FROM Student, Professor WHERE Student.professor = Professor.pNumber GROUPBY professor; SELECT professor, count(*) FROM studentProfessor GROUPBY professor; CS542
12
Views ? Why ? View is a virtual relation ?
Convenience: Queries on base relations might be “complex” Logical Data Independence: “Base tables” may change, but still queries using views need not change. Customization: Provide different views of the same data. Security: Expose only necessary data to users CS542
13
Updating Views CREATE VIEW MyStudent(num,name)AS SELECT sNumber, sName
Consider views defined with only one relation in the FROM clause such as: CREATE VIEW MyStudent(num,name)AS SELECT sNumber, sName FROM Student; Question: Are these views updatable? How ? Answer: Updating these views is done by updating the underlying Student base tables. CS542
14
Updating Single Relation Views
DELETE FROM MyStudent WHERE name=`Dave'; -- This will delete corresponding row from Student table DELETE FROM Student WHERE name=`Dave'; This update is valid ! CS542
15
Updating Single Relation Views
INSERT INTO MyStudent VALUES (4, `Mary’); -- This will be translated to: INSERT INTO Student (sNumber, sName) VALUES (4, `Mary’); -- What happens to other values of Student tuple ? -- What if there is a tuple with sNumber of 4 already ? CS542
16
Inserting into single relation views
CREATE VIEW MyStudent1(name) AS SELECT sName FROM Student; INSERT INTO MyStudent1 VALUES (‘Mary’) will be translated to: INSERT INTO Student(sName) VALUES (‘Mary’). This will return an error as sNumber is primary key, i.e., it must not be null. CS542
17
Updating Single Relation views
What about views with DISTINCT ? Updatable? CREATE VIEW MyStudent2(name) AS SELECT DISTINCT sName FROM Student; CREATE VIEW MyStudent3(num) AS SELECT DISTINCT sNumber If the SELECT clause specifies DISTINCT, then the view is not updatable. CS542
18
Updating Single Relation Views
WHERE clause may specify subqueries. CREATE VIEW MyStudent4 (num, name) AS SELECT sNumber, sName FROM Student WHERE sName IN (SELECT pName FROM Professor); -- Insert into this view will insert into Student table CS542
19
Updating Single Relation Views
WHERE clause may specify subqueries. CREATE VIEW MyStudent4 (num, name) AS SELECT sNumber, sName FROM Student WHERE sNumber NOT IN (SELECT sNumber FROM Student); -- This view will always have 0 tuples. -- Insert into this view will still insert into Student table, even though that tuple does not appear in the view. CS542
20
Multiple Relation Views: Delete
CREATE VIEW studentProf (studentname, profname) AS SELECT sName, pName FROM Student, Professor WHERE sName = pName; Student Professor sNumber sName address professor 1 MM 320FL 2 3 Matt pNumber pName address 1 MM 235FL 2 ER 241FL CS542
21
Multiple Relation Views: Delete
Updating this multi-relation view? CREATE VIEW studentProf (studentname, profname) AS SELECT sName, pName FROM Student, Professor WHERE SName = PName; -- Ambigious what base table to update ! -- Side effects as other tuples may disappear out of the view ! CS542
22
Multi-Relation View Deletes can be done against multi-relation views if there is a table with same key as the view. CS542
23
Views - Example Student Professor pNumber is key in Professor
sNumber sName address professor 1 Dave 320FL 2 Greg 3 Matt pNumber pName address 1 MM 235FL 2 ER 241FL student profname 1 MM 2 3 ER CREATE VIEW studentProfessor (student, profname) AS SELECT sNumber, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; pNumber is key in Professor sNumber is key of Student sNumber is key of view What is key in studentProfessor table? CS542
24
Multi-Relation View Reminder : Deletes can be done against multi-relation views if there is a table such that the view and table have same key. CS542
25
Deleting from multi-relation views
Try following update statements: DELETE FROM studentProfessor WHERE profname ='MM'; -- What will be deleted ? CS542
26
Views - Example Student Professor
sNumber sName address professor 1 Dave 320FL 2 Greg 3 Matt pNumber pName address 1 MM 235FL 2 ER 241FL student profname 1 MM 2 3 ER CREATE VIEW studentProfessor (student, professor) AS SELECT sNumber, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; DELETE FROM studentProfessor WHERE profname='MM'; -- This will actually delete the two rows in Student table. CS542
27
Views - Example Student Professor
sNumber sName address professor 1 Dave 320FL 2 Greg 3 Matt pNumber pName address 1 MM 235FL ER 241FL CREATE VIEW studentProfessor (student, professor) AS SELECT sNumber, pName FROM Student, Professor WHERE Student.professor = Professor.pNumber; Now delete will fail because there is no table whose key is the key of the view. Suppose we drop key constraint on professor table for this view. CS542
28
Inserting into multi-relation views
Consider view definition: CREATE VIEW studentProf(student, professor) AS SELECT sNumber, pName FROM Student, Professor WHERE professor=pNumber; INSERT INTO Studentprof(student) VALUES (4); -- the above insert will succeed; put into Student table INSERT INTO Studentprof VALUES (4, 'ER'); -- THIS ABOVE INSERT WILL FAIL AS IT TRIES TO INSERT INTO Professor TABLE AS WELL. CS542
29
Inserting into multi-relation views
Insert will succeed only if The insert translates to insert into only one table. The key for the table to be inserted will also be a key for the view. CS542
30
Controlling Updates on Views
CREATE VIEW studentProf (student, professor, salary) AS SELECT sName, pName, salary FROM Student s, Professor p WHERE s.advisor = pName; Application can use TRIGGER to create desired effect of updates on view: CREATE OR REPLACE TRIGGER DeleteMyView INSTEAD OF DELETE ON studentProf FOR EACH ROW DECLARE name varchar (10); BEGIN name := :old.student; DELETE FROM Student where sName=name; END; . CS542
31
Materialized Views Materialized View : Cache content of view Why ?
Issues : Type of “connectivity” to base data Keeping the view content up-to-date, also called view maintenance Utilization of INSTEAD OF TRIGGERS for maintenance CS542
32
Views - Summary Views are useful – Virtual relations
Querying through views is always possible Updating through views has limitations – consider use of INSTEAD OF TRIGGERS CS542
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.