1 views. 2 views a view is a "virtual table" defined using a query you can use a view as...

38
1 Views Views

Post on 21-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Views. 2 Views 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

1

ViewsViews

Page 2: 1 Views. 2 Views 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

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

Page 3: 1 Views. 2 Views 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

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

Page 4: 1 Views. 2 Views 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

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;

Page 5: 1 Views. 2 Views 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

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

Page 6: 1 Views. 2 Views 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

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

Page 7: 1 Views. 2 Views 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

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

Page 8: 1 Views. 2 Views 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

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;

Page 9: 1 Views. 2 Views 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

9

Changing Tables through a Changing Tables through a ViewView

Page 10: 1 Views. 2 Views 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

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”)

Page 11: 1 Views. 2 Views 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

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

Page 12: 1 Views. 2 Views 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

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!

Page 13: 1 Views. 2 Views 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

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”)

Page 14: 1 Views. 2 Views 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

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

Page 15: 1 Views. 2 Views 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

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

Page 16: 1 Views. 2 Views 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

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!

Page 17: 1 Views. 2 Views 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

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

Page 18: 1 Views. 2 Views 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

18

Inserting Not AllowedInserting Not Allowed

CREATE VIEW SailorsInfo asSELECT sname, ratingFROM SailorsWHERE age>50;

INSERT INTO SailorsInfo VALUES(‘Joe’,10);

Illegal! Why?

Page 19: 1 Views. 2 Views 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

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

Page 20: 1 Views. 2 Views 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

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;

Page 21: 1 Views. 2 Views 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

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;

Page 22: 1 Views. 2 Views 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

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

Page 23: 1 Views. 2 Views 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

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;

Page 24: 1 Views. 2 Views 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

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

Page 25: 1 Views. 2 Views 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

25

Examples (2)Examples (2)

UPDATE OldSailorsSET age = age +1 WHERE age <= 50;

CREATE VIEW OldSailors asSELECT * FROM Sailors WHERE age > 50;

NOTHING!

Page 26: 1 Views. 2 Views 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

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

Page 27: 1 Views. 2 Views 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

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’);

Page 28: 1 Views. 2 Views 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

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;

Page 29: 1 Views. 2 Views 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

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

Page 30: 1 Views. 2 Views 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

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

Page 31: 1 Views. 2 Views 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

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

Page 32: 1 Views. 2 Views 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

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

Page 33: 1 Views. 2 Views 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

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

Page 34: 1 Views. 2 Views 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

34

?

?

Page 35: 1 Views. 2 Views 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

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)

Page 36: 1 Views. 2 Views 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

36

ExamplesExamples

• If x is null

– x = 3 -> unknown

– null = 3 -> unknown

– x = x -> unknown

– null = null -> unknown

– x * 0 -> = null

– null * 0 -> = null

Page 37: 1 Views. 2 Views 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

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)

Page 38: 1 Views. 2 Views 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

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