Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 The Oracle Database System Querying the Data Database Course The Hebrew University of Jerusalem.

Similar presentations


Presentation on theme: "1 The Oracle Database System Querying the Data Database Course The Hebrew University of Jerusalem."— Presentation transcript:

1 1 The Oracle Database System Querying the Data Database Course The Hebrew University of Jerusalem

2 2 Basic SQL Query SELECT [Distinct] target-list FROM from-list WHERE condition; from-list: A list of relation names (possibly with a range- variable after each name) target-list: A list of fields of relations in relation-list condition: A boolean condition DISTINCT: Optional keyword to delete duplicates

3 3 Basic SQL Query (continues) SELECT [Distinct] target-list FROM from-list WHERE condition; The result evaluation: 1.Compute the cross product of the tables in from-list. 2.Delete all rows that do not satisfy condition. 3.Delete all columns that do not appear in target-list. 4.If Distinct is specified eliminate duplicate rows.

4 4 Basic SQL Query (continues) SELECT Distinct A 1,…,A n FROM R 1,…,R m WHERE C; This translates to the expression in relational algebra:  A 1,…,A n (  C (R 1 x…x R m ))

5 5 Example Tables Used Reserves sidbidDay 22 58 101 103 10/10/02 11/12/02 Sailors sidsnameratingage 22 31 58 Dustin Lubber Rusty 7 8 10 45.0 55.5 35.0 Boats bidbnamecolor 101 103 Nancy Gloria red green Key

6 6 Boat Names and Reservation Dates SELECT bname,day FROM Boats,Reserves WHERE Boats.bid = Reserves.bid

7 7 Boat Names and Reservation Dates SELECT bname,day FROM Boats,Reserves WHERE Boats.bid = Reserves.bid Reserves sidbidday 22 101 10/10/02 58 103 11/12/02 Boats bidbnamecolor 101 103 Nancy Gloria red green 101 103 Nancy Gloria red green

8 8 Boat Names and Reservation Dates SELECT bname,day FROM Boats,Reserves WHERE Boats.bid = Reserves.bid Reserves sidbidday 2210110/10/02 5810311/12/02 Boats bidbnamecolor 101Nancyred 103Gloriagreen

9 9 Boat Names and Reservation Dates SELECT bname,day FROM Boats,Reserves WHERE Boats.bid = Reserves.bid Reserves day 10/10/02 11/12/02 Boats bname Nancy Gloria

10 10 Sailors Who Reserved Boat 103 SELECT sname FROM Sailors, Reserves WHERE Sailors.sid = Reserves.sid and bid = 103;  sname (  Sailors.sid = Reserves.sid  bid = 103 (Sailors x Reserves))

11 11 SailorsReserves sidsnameratingagesidbidday 22Dustin745.02210110/10/02 22Dustin745.05810311/12/02 31Lubber855.52210110/10/02 31Lubber855.55810311/12/02 58Rusty1035.02210110/10/02 58Rusty1035.05810311/12/02 Sailors x Reserves Sailors Who Reserved Boat 103

12 12 SailorsReserves sidsnameratingagesidbidday 22Dustin745.02210110/10/02 22Dustin745.05810311/12/02 31Lubber855.52210110/10/02 31Lubber855.55810311/12/02 58Rusty1035.02210110/10/02 58Rusty1035.05810311/12/02 Sailors Who Reserved Boat 103  Sailors.sid = Reserves.sid  bid = 103

13 13 SailorsReserves sidsnameratingagesidbidday 22Dustin745.02210110/10/02 22Dustin745.05810311/12/02 31Lubber855.52210110/10/02 31Lubber855.55810311/12/02 58Rusty1035.02210110/10/02 58Rusty1035.05810311/12/02 Sailors Who Reserved Boat 103  sname

14 14 Range Variables SELECT S.sname FROM Sailors S, Reserves R WHERE S.sid = R.sid and R.bid = 103; Range variables are good style They are necessary if the same relation appears twice in the FROM clause

15 15 A Few SELECT Options Select all columns: SELECT * FROM Sailors S; Rename selected columns: SELECT S.sname AS Sailors_Name FROM Sailors S;

16 16 A Few SELECT Options Applying functions: Mathematical manipulations: SELECT (age-5)*2 FROM Sailors S; Aggregate functions: SELECT COUNT(*) FROM Sailors S; SELECT MAX(age) FROM Sailors S;

17 17 The WHERE Clause Numerical and string comparison: !=,<>,=,, >=, <=, between(between val1 AND val2) String comparisson is according to the alphabetical order! Logical components: AND, OR Null verification: IS NULL, IS NOT NULL Example: SELECT sname FROM Sailors WHERE age>=40 AND rating IS NOT NULL ;

18 18 The WHERE Clause (continues) The LIKE operator: A pattern matching operator Basic format: colname LIKE pattern Example: _ is a single character % is 0 or more characters SELECT sid FROM Sailors WHERE sname LIKE ‘B_%g’;

19 19 Sailors Who’ve Reserved a Boat SELECT sname FROM Sailors S, Reserves R WHERE S.sid = R.sid; Would adding DISTINCT give a different result?

20 20 Exercise Formulate a query that finds the names of sailors who reserved a yellow boat. Sailors sidsnameratingage 22 31 58 Dustin Lubber Rusty 7 8 10 45.0 55.5 35.0 Boats bidbnamecolor 101 103 Nancy Gloria red green Reserves sidbidDay 22 58 101 103 10/10/02 11/12/02

21 21 A Harder Exercise 1.Formulate a query that finds the bid of boats that are reserved in at least two different days 2.Fix the query you formulated to find the names of these boats Hint: A relation may appear more than once in the FROM list…

22 22 Union, Intersect and Except Sqlplus supports the union, intersection and difference operators The syntax: query1 UNION query2; query1 INTERSECT query2; query1 MINUS query2;

23 23 Sailors who’ve reserved a red or green boat SELECT S.sname FROM Sailors S, Boats B, Reserves R WHERE S.sid = R.sid and R.bid = B.bid and (B.color = ‘red’ or B.color = ‘green’);  sname (  color = ‘red’  color = ‘green’ (Sailors ⋈ Reserves ⋈ Boats)) What would happen if we replaced or by and ?

24 24 Sailors who’ve reserved red or green boat SELECT S.sname FROM Sailors S, Boats B, Reserves R WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘red’ UNION SELECT S.sname FROM Sailors S, Boats B, Reserves R WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘green’;

25 25 The Second Version in Relational Algebra  sname (  color = ‘red’ (Sailors ⋈ Reserves ⋈ Boats))   sname (  color = ‘green’ (Sailors ⋈ Reserves ⋈ Boats))

26 26 Nested Queries A query may be nested within another through the following operators: (NOT) IN (NOT) EXISTS ANY ALL A query with nested queries is computed using nested loops

27 27 The IN Operator SELECT S.sname FROM Sailors S WHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid = 103); Names of sailors who’ve reserved boat 103: What would happen if we wrote NOT IN?

28 28 The EXISTS Operator SELECT S.sname FROM Sailors S WHERE EXISTS (SELECT * FROM Reserves R WHERE R.bid = 103 and S.sid = R.sid); Names of sailors who’ve reserved boat 103: What would happen if we wrote NOT EXISTS? Notice the correlation between the examined row and the inner query

29 29 Set-Comparison Queries: ANY,ALL SELECT * FROM Sailors S1 WHERE S1.age > ANY (SELECT S2.age FROM Sailors S2); Sailors who are not the youngest: We can also use op ALL (op is >, =, )

30 30 Another Exercise What does the following query compute? Using IN and INTERSECT operators, formulate a query that finds the names of the sailors who reserved both green and red boats. SELECT S.sname FROM Sailors S, Boats B, Reserves R WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘red’ INTERSECT SELECT S.sname FROM Sailors S, Boats B, Reserves R WHERE S.sid = R.sid and R.bid = B.bid and B.color = ‘green’;

31 31 Another Exercise (continues) What does the following query compute? SELECT S.sname FROM Sailors S WHERE NOT EXISTS ( (SELECT B.bid FROM Boats B) MINUS (SELECT R.bid FROM Reserves R WHERE R.sid=S.sid) ) ;

32 32 For The Brave Ones… 1. Formulate a query that computes the sid of all sailors who have not reserved a green boat. 2. Prove formally that in the Sailors-Reserves-Boats database, the query of question 1 cannot be as simple as a query of the form: SELECT V j.sid FROM R1 V 1, R 2 V 2 …R n V n WHERE C Where C is a simple condition (contains only comparison clauses, AND and OR, and does not contain nested queries) Notice that the records in each table are arbitrary!


Download ppt "1 The Oracle Database System Querying the Data Database Course The Hebrew University of Jerusalem."

Similar presentations


Ads by Google