1 views. 2 views a view is a "virtual table" defined using a query you can use a view as...
Post on 21-Dec-2015
215 views
TRANSCRIPT
1
ViewsViews
2
ViewsViews
• A view is a "virtual table" defined using a query
• You can use a view as if it were a table, even though it doesn't contain data
• The view is used as a ‘window’ to underlying tables
• The view is computed every time that it is referenced
• Changes can be done in both directions:
View <-> Table
3
Advantages and Advantages and DisadvantagesDisadvantages
• Advantages:
– no memory used for views
– update of table does not require updating views
– gives query processor more choices for
optimizing
• Disadvantages:
– must be recomputed every time used
– if tables that view uses are dropped, view data is
lost
4
ExampleExample
• A View is a query that looks like a table and can be used as a table.
CREATE OR REPLACE VIEW Dept20 as
SELECT Ename, Job, Sal*12 As AnnualSal
FROM Emp
Where dept=20;
5
Example 2: Products tableExample 2: Products table
CREATE VIEW [ProductsAboveAveragePrice] AS
SELECT ProductName,UnitPrice FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice)
FROM Products)
ProductNa
me
Quantity UnitPrice
Milk 100 4
Eggs 87 10
Bread 64 5
6
What are views good for?What are views good for?(1)(1)
• Simplifying complex queries
• Here is another example that allows the user to "pretend" that there is a single table in the database
CREATE OR REPLACE VIEW SRB as
SELECT S.sid, sname, rating, age, R.bid, day, bname, color
FROM Sailors S, Boats B, Reserves R
WHERE S.sid = R.sid and R.bid = B.bid
7
What are views good for?What are views good for?(2)(2)
SELECT sname
FROM SRB
WHERE bid=‘103’
Find names of Sailors who reserved boat 103 using SRB
8
What are views good for?What are views good for?(3)(3)
• Security issues – preventing unauthorized
access.
• Example: hiding the rating value
CREATE VIEW SailorInfo as
SELECT sname, sid, age
FROM Sailors
• grant SELECT on SailorInfo to joe;
9
Changing Tables through a Changing Tables through a ViewView
10
• Changing a view changes the underlying tables
• We will specify the limitations on the changes
we are allowed to perform on a view based on
one table only
• The guiding principle: We cannot “approach” a
value which doesn’t appear in the view
• (but many changes do not require
“approaching”)
11
Changing a Table through a Changing a Table through a ViewView
• You can’t insert if the underlying table has non null columns not appearing in the view
• You can’t insert or update if any of the view columns referenced in the command contains functions or calculations
• You can’t insert, update or delete if the view contains group by or distinct
12
• You can insert a value to the view even if it will not
appear in the view after insertion.
• You can update a value appearing in the view so
that the result will not appear in the view.
• This is true unless ‘with check option’ is specified.
CREATE VIEW OldSailors asSELECT sid, ageFROM SailorsWhere age>50
Insert into OldSailors values(1132, 57);
CREATE VIEW OldSailors asSELECT sid, ageFROM SailorsWhere age>50With check option
Insert into OldSailors values(1132, 57);
Legal! Illegal!
13
• You cannot update a value which doesn’t
appear in the view (this requires
“approaching”)
• You cannot insert or update columns which
do not appear in the view
• But if you delete a row, it will delete the
values of columns which are not in the view
as well (does not require “approaching”)
14
Only Values of
Rows seen
through the
View
Only Values of
Columns seen
through the View
Insert No
(Yes if CHECK)
Yes
Update (values after
change)
No
(Yes if CHECK)
Yes
Update (values
before
change)
Yes Yes
Delete Yes No
15
Inserting AllowedInserting Allowed
CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;
INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12,‘Joe’,51,10);
When we select from OldSailors next time, we will see Joe
16
Inserting AllowedInserting Allowed
CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;
INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12,‘Mary’,49,10);
When we select from OldSailors next time, we will not see Mary.
But she will appear in Sailors!
17
Preventing Insertions that Preventing Insertions that are not seen through the are not seen through the
ViewViewCREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50WITH CHECK OPTION;
INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12,‘Joe’,51,10);
INSERT INTO OldSailors(sid,sname,age,rating) VALUES(12,‘Mary’,49,10);
Error!
OK
18
Inserting Not AllowedInserting Not Allowed
CREATE VIEW SailorsInfo asSELECT sname, ratingFROM SailorsWHERE age>50;
INSERT INTO SailorsInfo VALUES(‘Joe’,10);
Illegal! Why?
19
Updating AllowedUpdating Allowed
CREATE VIEW SailorsInfo asSELECT sname, rating, ageFROM SailorsWHERE age>50;
UPDATE SailorsInfo SET rating = 6WHERE sname = ‘Joe’;
UPDATE SailorsSET rating = 6WHERE sname = ‘Joe’ and age>50;
Oracle only changes the rating of Joes who are older than 50.
Implemented by adding WHERE condition of view to WHERE condition of Update
20
Updating AllowedUpdating Allowed
CREATE VIEW SailorsInfo2 asSELECT sname, rating, ageFROM SailorsWHERE age>50;
UPDATE SailorsInfo2 SET age = age - 1;
Will cause tuples to "disappear from the view"Can prevent this with "WITH CHECK OPTION"
How is it implemented?
UPDATE SailorsSET age = age - 1WHERE age>50;
21
Updating Not Allowed if …?Updating Not Allowed if …?
CREATE VIEW SailorsInfo2 asSELECT sname, rating, ageFROM SailorsWHERE age>50WITH CHECK OPTION;
UPDATE SailorsInfo2 SET age = age - 1;
22
Updating Not AllowedUpdating Not AllowedCREATE VIEW SailorsInfo3 asSELECT sname, rating + age as raFROM SailorsWHERE age>50;
UPDATE SailorsInfo3 SET ra = 7WHERE sname = ‘Joe’;
Illegal! Why?
UPDATE SailorsInfo3 SET sname = ‘Joe’WHERE ra = 7;
legal
23
Deleting AllowedDeleting Allowed
CREATE VIEW SailorsInfo3 asSELECT sname, rating + age as raFROM SailorsWHERE age>50;
DELETE FROM SailorsInfo3 WHERE sname = ‘Joe’
and ra = 56;
Oracle only deletes Joes visible through the view. How do you think that this is implement
by Oracle?DELETE FROM Sailors WHERE sname = ‘Joe’
and rating + age = 56 and age > 50;
24
Examples (1)Examples (1)
UPDATE OldSailorsSET rating = 10;
CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;
Update rating of sailors older than 50
25
Examples (2)Examples (2)
UPDATE OldSailorsSET age = age +1 WHERE age <= 50;
CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;
NOTHING!
26
Examples(3)Examples(3)
DELETE FROM OldSailors;
CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;
DELETE FROM SailorsWHERE age > 50
Implementation
Remove from Sailors the sailors that are older than 50
27
Inserting/Updating/Inserting/Updating/Deleting Not AllowedDeleting Not Allowed
CREATE VIEW OldSailors asSELECT sname FROM Sailors GROUP BY snameHAVING MIN(age) > 50;
DELETE FROM OldSailors;
INSERT INTO OldSailors VALUES(‘Joe’);
28
Inserting/Updating/Inserting/Updating/Deleting Not AllowedDeleting Not Allowed
CREATE VIEW OldSailors asSELECT distinct sname, age FROM Sailors WHERE age > 50;
DELETE FROM OldSailors;
INSERT INTO OldSailors VALUES(‘Joe’,55);
UPDATE OldSailorsSET age = age +1;
29
Materialized ViewsMaterialized Views
• What: A materialized view is a view that actually exists as a table
• Why: This can be more efficient than re-computing the view’s query each time it is accessed
• How: We specify how often the materialized view is refreshed and how
30
Null ValuesNull Values
"As we know, There are known knowns.
There are things we know we know. We also know
There are known unknowns. That is to say
We know there are some things We do not know.”
- Donald Rumsfeld, US Defence Secretary
31
Null Values in ExpressionsNull Values in Expressions
• The result of an arithmetic expression, over something that is null -> is null (e.g., null*10 = null)
• Three-valued logic: true, false, unknown• Nulls in logical expressions:
– null AND true -> unknown
– null AND false -> false
– null OR true -> true
– null OR false -> unknown
– NOT (null) -> unknown
– x { =<, =>, <>, <, >, =} null -> unknown
32
Three-Valued Logic Table
p q p AND q p OR q
True True True True
True False False True
True Null Unknown True
False True False True
False False False False
False Null False Unknown
Null True Unknown True
Null False False Unknown
Null Null Unknown Unknown
Two-Valued Logic Table
p q p AND q p OR q
True True True True
True False False True
False True False True
False False False False
33
What will these return?What will these return?
SELECT S.sname
FROM Sailors S
WHERE S.age = null
SELECT S.sname
FROM Sailors S
WHERE S.age != null
34
?
?
35
Null Values in Expressions Null Values in Expressions (2)(2)
• Tuples only pass the WHERE/HAVING
condition if the WHERE/HAVING evaluate to
true (not false or unknown)
• Null verification: – IS NULL (not = NULL)
– IS NOT NULL (not <> NULL)
36
ExamplesExamples
• If x is null
– x = 3 -> unknown
– null = 3 -> unknown
– x = x -> unknown
– null = null -> unknown
– x * 0 -> = null
– null * 0 -> = null
37
Nulls in Aggregation Nulls in Aggregation FunctionsFunctions
• count(A): counts non-null As. Returns 0 if
all As are null
• sum(A), avg(A), min(A), max(A)
– ignore null values of A
– if A only contains null value, the result is null
• count(*): counts ALL rows (even rows
that are all null values)
38
SELECT S.sname, R.bid
FROM Sailors S, Reserves R
WHERE S.sid = R.sid(+)
We want the sailors that have not reserved a boat to appear in the result as well
Sailors who have not reserved a boat will have null in the R.bid column