Database Systems
Relational Algebra
What are Relational Algebra and Relational
Calculus?
• Relational algebra and relational calculus are
formal languages associated with the relational
model.
– Informally, relational algebra is a (high-level)
procedural language and relational
calculus a non- procedural language.
– However, formally both are equivalent to one
another.
• A language that produces a relation that can be
derived using relational calculus is relationally
complete.
1
What is Relational Algebra?
• Relational algebra operations work on one or
more relations to define another relation
without changing the original relations.
• Both operands and results are relations, so
output from one operation can become input to
another operation.
• Allows expressions to be nested, just as in
arithmetic. This property is called closure.
Operations of Relational Algebra
• Five basic operations in relational algebra:
Selection, Projection, Cartesian product,
Union, and Set Difference.
• These perform most of the data retrieval
operations needed.
• Also have Join, Intersection, and Division
operations, which can be expressed in terms of
5 basic operations.
2
Operations of Relational Algebra
Operations of Relational Algebra
3
Selection (or Restriction)
•predicate (R)
– Works on a single relation R and defines a relation
that contains only those tuples (rows) of R that
satisfy the specified condition (predicate).
Selection – An Example
• List all staff with a salary greater than £10,000.
salary > 10000 (Staff)
4
Projection
•col1, . . . , coln(R)
– Works on a single relation R and defines a relation
that contains a vertical subset of R, extracting the
values of specified attributes and eliminating
duplicates.
Projection – An Example
• Produce a list of salaries for all staff, showing
only staffNo, fName, lName, and salary
details.
staffNo, fName, lName, salary(Staff)
5
Union
•RS
– Union of two relations R and S defines a relation
that contains all the tuples of R, or S, or both R
and S, duplicate tuples being eliminated.
– R and S must be union-compatible.
• If R and S have I and J tuples, respectively,
union is obtained by concatenating them into
one relation with a maximum of (I + J) tuples.
Union – An Example
• List all cities where there is either a branch
office or a property for rent.
city(Branch) city(PropertyForRent)
6
Set Difference
•R–S
– Defines a relation consisting of the tuples that
are in relation R, but not in S.
– R and S must be union-compatible.
Set Difference – An Example
• List all cities where there is a branch office
but no properties for rent.
city(Branch) – city(PropertyForRent)
7
Intersection
•RS
– Defines a relation consisting of the set of all
tuples that are in both R and S.
– R and S must be union-compatible.
• Expressed using basic operations:
R S = R – (R – S)
Intersection – An Example
• List all cities where there is both a branch
office and at least one property for rent.
city(Branch) city(PropertyForRent)
8
Cartesian Product
•RXS
– Defines a relation that is the concatenation
of every tuple of relation R with every tuple
of relation S.
Cartesian Product – An Example
• List the names and comments of all clients who have
viewed a property for rent.
(clientNo, fName, lName(Client)) X (clientNo, propertyNo,
comment
(Viewing))
9
Cartesian Product and Selection –
An Example
• Use selection operation to extract those tuples where
Client.clientNo = Viewing.clientNo.
Client.clientNo = Viewing.clientNo((clientNo, fName,
lName(Client))
(clientNo, propertyNo, comment(Viewing)))
• Cartesian product and Selection can be reduced to a single
operation called a Join.
Join Operations
• Join is a derivative of Cartesian product.
• Equivalent to performing a Selection, using
join predicate as selection formula, over
Cartesian product of the two operand relations.
• One of the most difficult operations to
implement efficiently in an RDBMS and one
reason why RDBMSs have intrinsic
performance problems.
10
Join Operations
• Various forms of join operation
– Theta join
– Equijoin (a particular type of Theta join)
– Natural join
– Outer join
– Semijoin
Theta join (θ-join)
• R FS
– Defines a relation that contains tuples
satisfying the predicate F from the Cartesian
product of R and S.
– The predicate F is of the form R.ai S.bi where
may be one of the comparison operators (<, ,
>,
, =, ).
11
Theta join (θ-join)
• Can rewrite Theta join using basic Selection
and Cartesian product operations.
R FS = F(R S)
• Degree of a Theta join is sum of degrees of the
operand relations R and S. If predicate F
contains only equality (=), the term Equijoin is
used.
Equijoin – An Example
• List the names and comments of all clients
who have viewed a property for rent.
(clientNo, fName, lName(Client))
Client.clientNo = Viewing.clientNo (clientNo, propertyNo,
comment(Viewing))
12
Natural Join
• RS
– An Equijoin of the two relations R and S over
all common attributes x. One occurrence of each
common attribute is eliminated from the result.
Natural Join – An Example
• List the names and comments of all clients
who have viewed a property for rent.
(clientNo, fName, lName(Client)) (clientNo,
propertyNo, comment(Viewing))
13
Outer Join
• To display rows in the result that do not have
matching values in the join column, use Outer
join.
•R S
– (Left) outer join is join in which tuples from R
that do not have matching values in common
columns of S are also included in result relation.
Outer Join – An Example
• Produce a status report on property viewings.
propertyNo, street, city(PropertyForRent)
Viewing
14
Semijoin
•R F S
– Defines a relation that contains the tuples of R
that participate in the join of R with S.
• Can rewrite Semijoin using Projection and
Join:
–R F S = A(R F S)
Semijoin – An Example
• List complete details of all staff who work at
the branch in Glasgow.
Staff
Staff.branchNo=Branch.branchNo(city=‘Glasgow’(Branch))
15
Division
•RS
– Defines a relation over the attributes C that consists of set
of tuples from R that match combination of every tuple in
S.
• Expressed using basic operations:
T1 C(R)
T2 C((S X T1) – R)
T T1 – T2
Division – An Example
• Identify all clients who have viewed all
properties with three rooms.
(clientNo, propertyNo(Viewing))
(propertyNo(rooms = 3 (PropertyForRent)))
16