You are on page 1of 55

Chapter 4: Intermediate SQL

Database System Concepts, 6th Ed.


Silberschatz, Korth and Sudarshan
See www.db-book.com for conditions on re-use

Chapter 4: Intermediate SQL


Join Expressions
Views
Transactions
Integrity Constraints
SQL Data Types and Schemas
Authorization

Database System Concepts - 6th Edition

4.2

Silberschatz, Korth and Sudarshan

Joined Relations
Join operations take two relations and return as a result

another relation.

These additional operations are typically used as subquery

expressions in the from clause

Join condition defines which tuples in the two relations

match, and what attributes are present in the result of the join.

Join type defines how tuples in each relation that do not

match any tuple in the other relation (based on the join


condition) are treated.

Database System Concepts - 6th Edition

4.3

Silberschatz, Korth and Sudarshan

Full Outer Join


course natural full outer join prereq

Database System Concepts - 6th Edition

4.4

Silberschatz, Korth and Sudarshan

Joined Relations Examples


course inner join prereq on

course.course_id = prereq.course_id

What is the difference between the above, and a natural join?


course left outer join prereq on
course.course_id = prereq.course_id

Database System Concepts - 6th Edition

4.5

Silberschatz, Korth and Sudarshan

Joined Relations Examples


course natural right outer join prereq

course full outer join prereq using (course_id)

Database System Concepts - 6th Edition

4.6

Silberschatz, Korth and Sudarshan

Views
In some cases, it is not desirable for all users to see the

entire logical model

Consider a person who needs to know an instructors name

and department, but not the salary. This person should see a
relation described, in SQL, by
select ID, name, dept_name
from instructor

A view provides a mechanism to hide certain data from the

view of certain users.

view :Any relation that is not in the conceptual model but is

made visible to a user as a virtual relation .

Database System Concepts - 6th Edition

4.7

Silberschatz, Korth and Sudarshan

View Definition
A view is defined using the create view statement which has

the form

create view v as < query expression >


where <query expression> is any legal SQL expression. The
view name is represented by v.
Once a view is defined, the view name can be used to refer to

the virtual relation that the view generates.

View definition is not the same as creating a new relation by

evaluating the query expression

Rather, a view definition causes the saving of an expression;


the expression is substituted into queries using the view.

Database System Concepts - 6th Edition

4.8

Silberschatz, Korth and Sudarshan

Example Views
A view of instructors without their salary

create view faculty as


select ID, name, dept_name
from instructor

Find all instructors in the Biology department

select name
from faculty
where dept_name = Biology

Create a view of department salary totals

create view departments_total_salary(dept_name, total_salary) as


select dept_name, sum (salary)
from instructor
group by dept_name;

Database System Concepts - 6th Edition

4.9

Silberschatz, Korth and Sudarshan

Views Defined Using Other Views


create view physics_fall_2009 as

select course.course_id, sec_id, building, room_number


from course, section
where course.course_id = section.course_id
and course.dept_name = Physics
and section.semester = Fall
and section.year = 2009;

create view physics_fall_2009_watson as

select course_id, room_number


from physics_fall_2009
where building= Watson;

Database System Concepts - 6th Edition

4.10

Silberschatz, Korth and Sudarshan

View Expansion
Expand a view in a query/another view

create view physics_fall_2009_watson as


(select course_id, room_number
from (select course.course_id, building, room_number
from course, section
where course.course_id = section.course_id
and course.dept_name = Physics
and section.semester = Fall
and section.year = 2009)
where building= Watson;

Database System Concepts - 6th Edition

4.11

Silberschatz, Korth and Sudarshan

Views Defined Using Other Views


One view may be used in the expression defining another view
A view relation v1 is said to depend directly on a view relation

v2 if v2 is used in the expression defining v1

A view relation v1 is said to depend on view relation v2 if either

v1 depends directly to v2 or there is a path of dependencies

from v1 to v2

A view relation v is said to be recursive if it depends on itself.

Database System Concepts - 6th Edition

4.12

Silberschatz, Korth and Sudarshan

View Expansion
A way to define the meaning of views defined in terms of other

views.

Let view v1 be defined by an expression e1 that may itself

contain uses of view relations.

View expansion- the process of replacing views by view

definitions following the path of view dependecies:

repeat
Find any view relation vi in e1
Replace the view relation vi by the expression defining vi
until no more view relations are present in e1
Note:As long as the view definitions are not recursive, this

loop will terminate

Database System Concepts - 6th Edition

4.13

Silberschatz, Korth and Sudarshan

Update of a View
Add a new tuple to faculty view which we defined earlier

insert into faculty values (30765, Green, Music);


This insertion must be represented by the insertion of the tuple
(30765, Green, Music, null)
into the instructor relation

Database System Concepts - 6th Edition

4.14

Silberschatz, Korth and Sudarshan

Some Updates cannot be Translated Uniquely

create view instructor_info as


select ID, name, building
from instructor, department
where instructor.dept_name= department.dept_name;

insert into instructor_info values (69987, White, Taylor);


which
what

department, if multiple departments in Taylor?

if no department is in Taylor?

Most SQL implementations allow updates only on simple views

The from clause has only one database relation.

The select clause contains only attribute names of the


relation, and does not have any expressions, aggregates, or
distinct specification.

Any attribute not listed in the select clause can be set to null

The query does not have a group by or having clause.

Database System Concepts - 6th Edition

4.15

Silberschatz, Korth and Sudarshan

Materialized Views
Materializing a view: creates a physical table containing the tuples

of the view

Incrementally updated whenever the underlying relations are


updated .

Improves response time

Note: Create materialized views corresponding to Aggregate queries

that are frequently used by Applications/users

Database System Concepts - 6th Edition

4.17

Silberschatz, Korth and Sudarshan

Transactions
Transaction-Unit of work-- consists of a sequence of query and/or

update statements

Transactions begin implicitly

Ended by commit work or rollback work

Commit work- the updates performed by the transaction become


permanent in the database

Rollback work - undoes all the updates performed by the SQL


statements in the transaction

By default : each SQL statement commits automatically

Can turn off auto commit for a session (e.g. using API)

In SQL:1999, can use: begin atomic . end

Not supported on most databases

Database System Concepts - 6th Edition

4.18

Silberschatz, Korth and Sudarshan

Integrity Constraints
Integrity constraints ensure that changes made by

authorized users do not violate consistency of database

Examples of integrity constraints:

An instructor name cannot be null.

No two instructors can have the same instructor ID.


Every department name in the course relation must

have a matching department name in the department


relation.

The budget of a department must be greater than


$0.00.

Database System Concepts - 6th Edition

4.19

Silberschatz, Korth and Sudarshan

Integrity Constraints
In general, an integrity constraint can be an arbitrary

predicate pertaining to the database. As arbitrary


predicates are costly to test , databases allow the integrity
constraints that can be tested with minimal overhead

declared as part of the create table


can also be added to an existing relation by using the

command alter table table-name add constraint

Integrity constraints on single table

not null

primary key

unique

check (P), where P is a predicate

Database System Concepts - 6th Edition

4.20

Silberschatz, Korth and Sudarshan

Not Null and Unique Constraints


not null

prohibits the insertion of a null value for the attribute

Declare name and budget to be not null


name varchar(20) not null
budget numeric(12,2) not null

unique ( A1, A2, , Am)

Used to specify candidate key.

Null values are permitted.

Database System Concepts - 6th Edition

4.21

Silberschatz, Korth and Sudarshan

The check clause


check (P)

where P is a predicate

Example: ensure that semester is one of fall, winter, spring


or summer:
create table section (
course_id varchar (8),
sec_id varchar (8),
semester varchar (6),
year numeric (4,0),
building varchar (15),
room_number varchar (7),
time slot id varchar (4),
primary key (course_id, sec_id, semester, year),
check (semester in (Fall, Winter, Spring, Summer))
);
Database System Concepts - 6th Edition

4.22

Silberschatz, Korth and Sudarshan

The check clause


The predicate in the check clause can, according to the SQL

standard, be an arbitrary predicate that can include a subquery.


However, currently none of the widely used database products allows
the predicate to contain a sub query

check (time_slot_id in (select time_slot_id from time_slot))

Eg time-slots of two different subjects should not clash

A course should not be given more than four time slots

Database System Concepts - 6th Edition

4.23

Silberschatz, Korth and Sudarshan

Referential Integrity
Ensures that a value that appears in one relation for a given

set of attributes also appears for a certain set of attributes in


another relation.

Usually specified as part of foreign key.


Values in child table refers values in parent table or takes a

null value

create table course (


course_id char(5) primary key,
title
varchar(20),
dept_name varchar(20) references department
)

Note: SQL also supports a version of the references clause where a

candidate key of the referenced relation is specified

Database System Concepts - 6th Edition

4.24

Silberschatz, Korth and Sudarshan

SQL data definition for part of the


university database
create table classroom

(building varchar (15),


room number varchar (7),
capacity numeric (4,0),
primary key (building, room number))
create table department
(dept name varchar (20),
building varchar (15),
budget numeric (12,2) check (budget > 0),
primary key (dept name))

Database System Concepts - 6th Edition

4.25

Silberschatz, Korth and Sudarshan

SQL data definition for part of the


university database
create table course
(course id varchar (8),
title varchar (50),
dept name varchar (20),
credits numeric (2,0) check (credits > 0),
primary key (course id),
foreign key (dept name) references department)
create table instructor
(ID varchar (5),
name varchar (20), not null
dept name varchar (20),
salary numeric (8,2), check (salary > 29000),
primary key (ID),
foreign key (dept name) references department)

Database System Concepts - 6th Edition

4.26

Silberschatz, Korth and Sudarshan

SQL data definition for part of the


university database
create table section
(course id varchar (8),
sec id varchar (8),
semester varchar (6), check (semester in
(Fall, Winter, Spring, Summer),
year numeric (4,0), check (year > 1759 and year < 2100)
building varchar (15),
room number varchar (7),
time slot id varchar (4),
primary key (course id, sec id, semester, year),
foreign key (course id) references course,
foreign key (building, room number) references classroom)

Database System Concepts - 6th Edition

4.27

Silberschatz, Korth and Sudarshan

Cascading Actions in Referential Integrity


a foreign key clause can specify that if a delete or update action

on the referenced relation violates the constraint, then instead of


rejecting the action, the system must take steps to change the
tuple in the referencing relation to satisfy the constraint
create table course (

dept_name varchar(20),
foreign key (dept_name) references department
on delete cascade
on update cascade,
...
)
alternative actions to cascade: set null, set default, restrict
In case of chain of cascade updates system may abort the
transaction
c

Database System Concepts - 6th Edition

4.28

Silberschatz, Korth and Sudarshan

Integrity Constraint Violation During


Transactions
E.g.

create table person (


ID char(10),
name char(40),
mother char(10),
father char(10),
primary key ID,
foreign key father references person,
foreign key mother references person)
How to insert a tuple without causing constraint violation ?

insert father and mother of a person before inserting person

OR, set father and mother to null initially, update after inserting all
persons (not possible if father and mother attributes declared to be
not null)

OR defer constraint checking (next slide)

Database System Concepts - 6th Edition

4.29

Silberschatz, Korth and Sudarshan

Integrity Constraint Violation During


Transactions
Specify the following options in the constraints

clause

initially deferred ( part of constraint clause)

Deferrable

(part of constraint clause)

set constraints constraint-list deferred as part of a


transaction clauses

Database System Concepts - 6th Edition

4.30

Silberschatz, Korth and Sudarshan

Complex Check Clauses


Every section has at least one instructor teaching the section.

how to write this?

create assertion <assertion-name> check <predicate>;


For each tuple in the student relation, the value of the attribute tot cred

must equal the sum of credits of courses that the student has
completed successfully.
create assertion credits earned constraint check
(not exists (select ID
from student
where tot cred <> (select sum(credits)
from takes natural join course
Where grade is not null and grade<> F ) )

Also not supported by anyone

Database System Concepts - 6th Edition

4.31

Silberschatz, Korth and Sudarshan

Index Creation
create table student

(ID varchar (5),


name varchar (20) not null,
dept_name varchar (20),
tot_cred numeric (3,0) default 0,
primary key (ID))

create index studentID_index on student(ID)


Indices are data structures used to speed up access to records

with specified values for index attributes

e.g. select *
from student
where ID = 12345

Database System Concepts - 6th Edition

4.32

Silberschatz, Korth and Sudarshan

User-Defined Types
create type construct in SQL creates user-defined type

create type Dollars as numeric (12,2) final


create type Pounds as numeric(12,2) final;
SQL supports two forms of user defined types: Distinct types,

Structured types

Follows rules of strong type checking(name equivalence)

Use cast operator to perform operations


cast

(budget to numeric(12,2))+20

SQL provides drop type and alter type clauses to drop or

modify types that have been created earlier

Database System Concepts - 6th Edition

4.33

Silberschatz, Korth and Sudarshan

Domains
create domain construct in SQL-92 creates user-defined

domain types

create domain person_name char(20) not null


Domains vs User defined Types:

Domains can have constraints and default values specified


on them

Domains are not strongly typed.

Note: support for types and domains varies from vendor to

vendor.

Database System Concepts - 6th Edition

4.34

Silberschatz, Korth and Sudarshan

Large-Object Types
Large objects (photos, videos, CAD files, etc.) are stored as a

large object:

blob: binary large object -- object is a large collection of


uninterpreted binary data (whose interpretation is left to an
application outside of the database system)

clob: character large object -- object is a large collection of


character data

When a query returns a large object, a pointer(locator) is


returned rather than the large object itself.

Database System Concepts - 6th Edition

4.35

Silberschatz, Korth and Sudarshan

Default Values
SQL allows a default value to be specified for an attribute

create table student


(ID varchar (5),
name varchar (20) not null,
dept name varchar (20),
tot cred numeric (3,0) default 0,
primary key (ID));
insert into student(ID, name, dept name)
values (12789, Newman, Comp. Sci.);

Database System Concepts - 6th Edition

4.36

Silberschatz, Korth and Sudarshan

Create Table Extensions


Applications often require creation of tables that have the same

schema as an existing table

create table temp_instructor like instructor;

SQL:2003 provides a technique to create a table containing the results

of a query

create table t1 as
(select *
from instructor
where dept name= Music)
with data;
Note: create view vs create table as :contents of the table are set

when the table is created, whereas the contents of a view always


reflect the current query result.

Database System Concepts - 6th Edition

4.37

Silberschatz, Korth and Sudarshan

Schemas, Catalogs, and Environments

a three-level hierarchy for naming relations

The top level of the hierarchy consists of catalogs, each of which


can contain schemas
SQL objects such as relations and views are contained within a

schema.

Used To identify a relation uniquely

catalog5.univ schema.course

different applications and different users can work independently

without worrying about name clashes

We can create and drop schemas by means of create schema and

drop schema statements

Database System Concepts - 6th Edition

4.38

Silberschatz, Korth and Sudarshan

Schemas, Catalogs, and Environments


Each user has a default catalog and schema,
In order to perform any actions on a database, a user (or a program)

must first connect to the database by specifying user id and his


password

When a user connects to a database system, the default catalog and

schema are set up for the connection

The default catalog and schema are part of an SQL environment that

is set up for each connection

Database System Concepts - 6th Edition

4.39

Silberschatz, Korth and Sudarshan

Authorization
Authorization control: ensures that only authorized users are

allowed to perform operations they are permitted to do.

Consists of following triple:

User----Operation------Database object

Authentication: done by user name and password


More complicated than OS as it includes many types of

objects

Database System Concepts - 6th Edition

4.40

Silberschatz, Korth and Sudarshan

Authorization
Note: Also known as privilege

Forms of authorization on parts of the database such as relation/view:


Read -reading, but not modification .
Insert - insertion of new data, but not modification .
Update - modification, but not deletion .
Delete - allows deletion of data.

Forms of authorization to modify the database schema


Index - creation and deletion of indices.
Resources - creation of new relations.
Alteration - addition or deletion of attributes in a relation.
Drop - deletion of relations.

Database System Concepts - 6th Edition

4.41

Silberschatz, Korth and Sudarshan

Privileges in SQL
select: same as read

eg

grant select on instructor to U1, U2, U3

insert: insert tuples


Update: use the SQL update statement
delete: delete tuples.
all privileges: short form for all the privileges
Note:A user who creates a new relation(owner) is given all
privileges on that relation automatically

Database System Concepts - 6th Edition

4.42

Silberschatz, Korth and Sudarshan

Authorization Specification in SQL


The grant statement is used to confer authorization

grant <privilege list>


on <relation name or view name> to <user list>
<user list> is:

a user-id

public, which denotes all current and future users

A role

Granting a privilege on a view does not imply granting any

privileges on the underlying relations.

Database System Concepts - 6th Edition

4.43

Silberschatz, Korth and Sudarshan

Authorization in SQL
Example:

grant select on department to Amit, Satoshi


grant update (budget) on department to Amit, Satoshi
Note: Attribute names can be specified with Insert and Update

privileges

By default, a user/role that is granted a privilege is not

authorized to grant that privilege to another user/role.

SQL allows a privilege grant to specify that the recipient may

further grant the privilege to another user.

Note: SQL does not permit authorizations on specific tuples of

a relation. Use application level security/ virtual private


databases

Database System Concepts - 6th Edition

4.44

Silberschatz, Korth and Sudarshan

Authorization in SQL

Database System Concepts - 6th Edition

4.45

Silberschatz, Korth and Sudarshan

Revoking Authorization in SQL


The revoke statement is used to revoke authorization.

revoke <privilege list>


on <relation name or view name> from <user list>
Example:

revoke select on department from Amit, Satoshi;


revoke update (budget) on department from Amit, Satoshi;

<privilege-list> may be all to revoke all privileges the revokee may

hold.
If <user-list> includes public, all users lose the privilege except the
owners.
If the same privilege was granted twice to the same user by
different grantees, the user may retain the privilege after the
revocation.
All privileges that depend on the privilege being revoked are also
revoked

Database System Concepts - 6th Edition

4.46

Silberschatz, Korth and Sudarshan

Revoking Authorization in SQL

Database System Concepts - 6th Edition

4.47

Silberschatz, Korth and Sudarshan

Revoking Authorization in SQL

Database System Concepts - 6th Edition

4.48

Silberschatz, Korth and Sudarshan

Revoking Authorization in SQL

Database System Concepts - 6th Edition

4.49

Silberschatz, Korth and Sudarshan

Roles

Database System Concepts - 6th Edition

4.50

Silberschatz, Korth and Sudarshan

Roles

create role instructor;


grant instructor to Amit;
Privileges can be granted to roles:
grant select on takes to instructor;
Roles can be granted to users, as well as to other roles
create role teaching_assistant
grant teaching_assistant to instructor;
Instructor inherits all privileges of teaching_assistant
Chain of roles
create role dean;
grant instructor to dean;
grant dean to Satoshi;
Note: When a user logs in to the database system, the actions executed by
the user during that session have all the privileges granted directly to
the user, and all privileges granted to roles that are granted to the
user

Database System Concepts - 6th Edition

4.51

Silberschatz, Korth and Sudarshan

Authorization on Views
create view geo_instructor as

(select *
from instructor
where dept_name = Geology);

grant select on geo_instructor to geo_staf


Suppose that a geo_staf member issues

select *
from geo_instructor;

Note: the creator of the view must have select authorization on


the instructor relation.

geo_staf does not have permissions on instructor?

Database System Concepts - 6th Edition

4.52

Silberschatz, Korth and Sudarshan

Authorizations on Schema
Only the owner of the schema can carry out any modification to

the schema

references privilege to create foreign key

grant reference (dept_name) on department to Mariano;

why is this required?

Foreignkey constraints restrict deletion and update operations


on the referenced relation

Database System Concepts - 6th Edition

4.53

Silberschatz, Korth and Sudarshan

Transfer of Privileges
A user who has been granted some form of authorization may

be allowed to pass on this authorization to other users

grant select on department to Amit with grant option;

The passing of a specific authorization from one user to another


can be represented by an authorization graph

A user has an authorization if and only if there is a path from the


root of the authorization graph

Database System Concepts - 6th Edition

4.54

Silberschatz, Korth and Sudarshan

Transfer of Privileges
If DBA revokes grant from U1:

Grant must be revoked from U4 but not from U5

Must prevent cycles of grant with no path from root:

DBA grants authorization to U7

U7 Grants authorization to U8

U8 Grants authorization to U7

DBA revokes authorization from U7

Must revoke grant from U7 to U8 and from U8 to U7 as there is no path


from DBA to either U7 or U8

Database System Concepts - 6th Edition

4.55

Silberschatz, Korth and Sudarshan

Transfer of Privileges
cascading revocation: revocation of a privilege from a user/role may

cause other users/roles also to lose that privilege.

the revoke statement may specify restrict in order to prevent

cascading revocation:

revoke select on department from Amit, Satoshi restrict;

Cascading revocations are in appropriate in many cases

SQL permits a privilege to be granted by a role rather than by a user


SQL has a notion of the current role associated with a session (set role role name ).

To grant a privilege with the grantor set to the current role associated

with a session, we can add the clause:

granted by current role

Database System Concepts - 6th Edition

4.56

Silberschatz, Korth and Sudarshan

You might also like