Download presentation
Presentation is loading. Please wait.
1
Structured Query Language – Continued Rose-Hulman Institute of Technology Curt Clifton
2
The Story Thus Far SELECT … FROM … WHERE SELECT * … SELECT Foo AS Bar … SELECT expression … SELECT … FROM … WHERE … LIKE … SELECT … FROM Foo, Bar … SELECT … FROM Foo f1, Foo f2 …
3
Next Up: Subqueries As values As relations
4
Subqueries as Values Only allowed when subquery evaluates to single value Run-time error otherwise Example: Find the restaurants that sell Slice for the price the Joe's charges for Pepsi
5
Subqueries as Relations – in FROM SELECT Likes.customer, mix.soda1, mix.soda2 FROM Likes, (SELECT s1.name AS soda1, s2.name AS soda2 FROM Soda s1, Soda s2 WHERE s1.manf = s2.manf AND s1.name < s2.name) AS mix WHERE Likes.soda = mix.soda1
6
Subqueries as Relations – in WHERE value IN relation Evaluates to true if relation contains value SELECT * FROM Soda WHERE name IN (SELECT soda FROM Likes WHERE customer = 'Fred')
7
Subqueries as Relations – in WHERE EXISTS relation Evaluates to true if relation is non-empty Find every soda where its manufacturer does not make anything else SELECT name FROM Soda s1 WHERE NOT EXISTS ( SELECT * FROM Soda s2 WHERE s2.manf = s1.manf AND s2.name <> s1.name)
8
Subqueries as Relations – in WHERE ANY x comp ANY(relation) comp can be, =, <>, >=, <= Evaluates to true if comparison holds for any tuple in relation ALL x comp ALL(relation) comp can be, =, <>, >=, <= Evaluates to true if comparison holds for every tuple in relation
9
Example SELECT soda FROM Sells WHERE price >= ALL(SELECT price FROM Sells)
10
Subqueries Summary As values As relations in FROM clause As relations in WHERE clause IN EXISTS ANY ALL
11
Combining Relations Union, Intersection, Difference Joins
12
Union, Intersection, and Difference Union (subquery) UNION (subquery ) Intersection (subquery) INTERSECT (subquery) Difference (subquery) EXCEPT (subquery)
13
SQL Goofiness – Sets vs. Bags Bags by default SELECT Sets by default UNION INTERSECT EXCEPT Overriding defaults SELECT DISTINCT UNION ALL Cannot override
14
Example Find all the different prices charged for sodas
15
Example Find all the different prices charged for sodas SELECT DISTINCT price FROM Sells
16
Theta Join Syntax: SELECT … FROM table1 JOIN table2 ON condition …
17
Example Give name and phone number of all customers that frequent Joe's Sushi
18
Example SELECT name, phone FROM Customer JOIN Frequents ON name = customer WHERE rest = 'Joe''s Sushi' Compare: SELECT name, phone FROM Customer, Frequents WHERE name = customer AND rest = 'Joe''s Sushi'
19
Natural Join Not in SQL Server But some DBMS allow: SELECT … FROM table1 NATURAL JOIN table2
20
Outer Joins Recall: solution to dangling tuple problem Make sure every tuple shows up, even if no “mate”, by inserting nulls if needed Three basic forms: SELECT … FROM t1 LEFT OUTER JOIN t2 SELECT … FROM t1 RIGHT OUTER JOIN t2 SELECT … FROM t1 OUTER JOIN t2
21
Cross Product Possible, though less common SELECT … FROM table1 CROSS JOIN table2 Or just write: SELECT … FROM table1, table2
22
Reporting Aggregation Grouping
23
Aggregation Calculations over rows Example: SELECT AVG(price) FROM Sells WHERE soda = 'Pepsi' Other aggregations: SUM AVG COUNT, COUNT(*) MIN, MAX “Let me explain. No, would take too long. Let me sum up.”
24
Aggregation and Duplicates Can use DISTINCT inside an aggregation Example – Find the number of different prices charged for Pepsi
25
Aggregation and Duplicates Can use DISTINCT inside an aggregation Example – Find the number of different prices charged for Pepsi SELECT COUNT(DISTINCT price) FROM Sells WHERE soda = 'Pepsi'
26
Grouping For aggregating subsections of result SELECT … FROM … WHERE … GROUP BY attr,…
27
Example: Grouping Find the average price for each soda
28
Example: Grouping Find the average price for each soda SELECT soda, AVG(price) FROM Sells GROUP BY soda
29
Having Like a WHERE clause for groups SELECT … FROM … WHERE …-- filter rows GROUP BY …-- group rows HAVING …-- filter groups
30
Example: Having Find the average price of those sodas that are served by at least three restaurants
31
Example: Having Find the average price of those sodas that are served by at least three restaurants SELECT soda, AVG(price) FROM Sells GROUP BY soda HAVING COUNT(rest) >= 3
32
Modifying the Database Insert Delete Update
33
Insertion Single tuple, quick and dirty: INSERT INTO table VALUES (value1, …) Single tuple, more robust: INSERT INTO table(attr1, …) VALUES (value1, …) Many tuples: INSERT INTO table (subquery)
34
Deletion Single tuple: DELETE FROM table WHERE condition All tuples (zoinks!): DELETE FROM table
35
Updates Syntax: UPDATE table SET attr1 = expr1, …-- attributes, new values WHERE condition-- rows to change
36
Example Change Fred's phone number to 555-1212
37
Example Change Fred's phone number to 555-1212 UPDATE Customer SET phone = '555-1212' WHERE name = 'Fred'
38
Example Raise all prices by 10%
39
Example Raise all prices by 10% UPDATE Sells SET price = (price * 1.10)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.