Download presentation
Presentation is loading. Please wait.
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!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.