370 likes | 943 Views
SQL and Relational Algebra. Zaki Malik September 02, 2008. Basics of Relational Algebra. Four types of operators: Select/Show parts of a single relation: projection and selection. Usual set operations (union, intersection, difference).
E N D
SQL and Relational Algebra Zaki Malik September 02, 2008
Basics of Relational Algebra • Four types of operators: • Select/Show parts of a single relation: projection and selection. • Usual set operations (union, intersection, difference). • Combine the tuplesof two relations, such as cartesian product and joins. • Renaming.
Projection • The projection operator produces from a relation R a new relation containing only some of R’s columns. • “Delete” (i.e. not show) attributes not in projection list. • Duplicates eliminated • To obtain a relation containing only the columns A1,A2, . . . An of R RA: πA1,A2, . . . An (R) SQL: SELECT A1,A2, . . . AnFROM R;
Selection • The selection operator applied to a relation R produces a new relation with a subset of R’s tuples. • The tuples in the resulting relation satisfy some condition C that involves the attributes of R. • with duplicate removal RA: σ(R) SQL: SELECT*FROMR WHERE C; • The WHERE clause of a SQL command corresponds to σ( ). c
Union • The union of two relations R and S is the set of tuples that are in R or in S or in both. • R and S must have identical sets of attributes and the types of the attributes must be the same. • The attributes of R and S must occur in the same order. • What is the schema of the result ? RA: R U S SQL: (SELECT * FROM R) UNION (SELECT * FROM S);
Union S1 S2
Intersection • The intersection of two relations R and S is the set of tuples that are in both R and S. • Same conditions hold on R and S as for the union operator. • R and S must have identical sets of attributes and the types of the attributes must be the same. • The attributes of R and S must occur in the same order. RA: R ∩ S SQL: (SELECT * FROM R) INTERSECT (SELECT * FROM S);
Intersection S2 S1
Difference • The difference of two relations R and S is the set of tuples that are in R but not in S. • Same conditions hold on R and S as for the union operator. • R and S must have identical sets of attributes and the types of the attributes must be the same. • The attributes of R and S must occur in the same order. RA: R - S SQL: (SELECT * FROM R) EXCEPT (SELECT * FROM S); • R – (R – S) = R ∩ S
Difference S2 S1
Cartesian Product • The Cartesian product (or cross-product or product) of two relations R and S is a the set of pairs that can be formed by pairing each tuple of R with each tuple of S. • The result is a relation whose schema is the schema for R followed by the schema for S. RA: R X S SQL: SELECT * FROM R , S ;
Cartesian Product S1 R1 ? S1 x R1 We rename attributes to avoid ambiguity or we prefix attribute with the name of the relation it belongs to.
Theta-Join • The theta-join of two relations R and S is the set of tuples in the Cartesian product of R and S that satisfy some condition C. RA: R ∞ S SQL: SELECT * FROM R , S WHERE C; • R ∞ S = C σ(R x S) C C
Theta-Join R1 S1
Natural Join • The natural join of two relations R and S is a set of pairs of tuples, one from R and one from S, that agree on whatever attributes are common to the schemas of R and S. • The schema for the result contains the union of the attributes of R and S. • Assume the schemas R(A,B, C) and S(B, C,D) RA: R ∞ S SQL: SELECT * FROM R , S WHERE R.B = S.B AND R.C = S.C;
Renaming • If two relations have the same attribute, disambiguate the attributes by prefixing the attribute with the name of the relation it belongs to. • How do we answer the query “Name pairs of students who live at the same address”? Students(Name, Address) • We need to take the cross-product of Students with itself? • How do we refer to the two “copies” of Students? • Use the rename operator. RA: : give R the name S; R has n attributes, which are called A1,A2, . . . ,An in S SQL: Use the AS keyword in the FROM clause: Students AS Students1 renames Students to Students1. SQL: Use the AS keyword in the SELECT clause to rename attributes. (R) S (A1,A2, . . . An)
Renaming • Are these correct ? • No !!! the result includes tuples where a student is paired with himself/herself • Solution: Add the condition S1.name <> S2.name.
Q1: Find names of sailors whohave reserved boat #103 Reserves(sid, bid, day) Sailors(sid, sname, rating, age) • Solution 1: • πsname(σbid = 103 (Reserves ∞ Sailors)) • Solution 2 (more efficient) • πsname((σbid = 103 Reserves) ∞ Sailors) • Solution 3 (using rename operator) • P(Temp1 (σbid = 103 Reserves)) • P(Temp2 (Temp1 ∞ Sailors)) • πsname(Temp2)
Q2: Find names of sailors whohave reserved a red boat Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) • Solution 1: • πsname((σcolor = ‘red’ Boats) ∞ Reserves ∞ Sailors ) • Solution 2 (more efficient) • πsname(πsid((πbidσcolor = ‘red’ Boats)∞ Reserves )∞ Sailors )
Q3: Find the colors of boats reserved by Lubber Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) • Solution: • πcolor((σsname = ‘Lubber’ Sailor)∞ Reserves ∞ Boats )
Q4: Find the names of sailors who have reserved at least one boat Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) • Solution: • πsname(Sailor∞ Reserves)
Q5: Find the names of sailors who have reserved a red or a green boat Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) • Solution: • πsname(σcolor=‘red’ or color = ‘green’ Boats ∞ Reserves ∞ Sailors)
Q6: Find the names of sailors who have reserved a red and a green boat Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) • Solution: • πsname(σcolor=‘red’ and color = ‘green’ Boats ∞ Reserves ∞ Sailors) A ship cannot have TWO colors at the same time πsname(σcolor=‘red’Boats ∞ Reserves ∞ Sailors) ∩ πsname(σcolor = ‘green’ Boats ∞ Reserves ∞ Sailors)
Q7: Find the sids of sailors with ageover 20 who have not reserved a red boat Reserves(sid, bid, day) Sailors(sid, sname, rating, age) Boats(bid, bname, color) Strategy ? ? ? • Find all sailors (sids) with age over 20 • Find all sailors (sids) who have reserved a red boat • Take their set difference • Solution: • πsid (σage>20 Sailors) –πsid ((σcolor=‘red’ Boats) ∞ Reserves)