cs411 database systems
play

CS411 Database Systems Join Expressions 06: SQL Kazuhiro Minami - PDF document

CS411 Database Systems Join Expressions 06: SQL Kazuhiro Minami Join Expressions Products and Natural Joins Natural join is obtained by: SQL provides a number of expression forms that act like varieties of join in relational R


  1. CS411 Database Systems Join Expressions 06: SQL Kazuhiro Minami Join Expressions Products and Natural Joins • Natural join is obtained by: • SQL provides a number of expression forms that act like varieties of join in relational R NATURAL JOIN S; algebra. • Cartesian product is obtained by: – But using bag semantics, not set semantics. R CROSS JOIN S; • These expressions can be stand-alone • Example: queries or used in place of relations in a FROM clause. Likes NATURAL JOIN Serves; • Relations can be parenthesized subexpressions, as well.

  2. Theta Join • R JOIN S ON <condition> is a theta- join, using <condition> for selection. • Example: using Drinkers(name, addr) Grouping and Aggregation and Frequents(drinker, bar): Drinkers JOIN Frequents ON name = drinker; gives us all ( d, a, d, b ) quadruples such that drinker d lives at address a and frequents bar b . Aggregations Example: Aggregation From Sells(bar, beer, price), find the average price of Bud: • SUM, AVG, COUNT, MIN, and MAX can be applied to a column in a SELECT clause to produce that aggregation on the column. SELECT AVG(price) • Also, COUNT(*) counts the number of tuples. FROM Sells WHERE beer = ‘Bud’;

  3. Eliminating Duplicates NULLs are ignored in in an Aggregation aggregations of a column SELECT count(*) • DISTINCT inside an aggregation causes The number of bars FROM Sells that sell Bud duplicates to be eliminated before the WHERE beer = ‘Bud’; aggregation. • Example: find the number of different The number of bars prices charged for Bud: SELECT count(price) that sell Bud at a FROM Sells non-null price SELECT COUNT( DISTINCT price) WHERE beer = ‘Bud’; FROM Sells WHERE beer = ‘Bud’; If there are no non-NULL values in a column, then the result of the aggregation is NULL Example: Grouping Grouping Sells(bar, beer, price) • We may follow a SELECT-FROM-WHERE expression by GROUP BY and a list of Q: find the average price for each beer: attributes. • The relation that results from the SELECT- SELECT beer, AVG(price) FROM-WHERE is partitioned according to FROM Sells the values of all those attributes, and any aggregation is applied only within each GROUP BY beer; group.

  4. Example: Grouping Restriction on SELECT Lists With Aggregation Frequents(drinker, bar), Sells(bar, beer, price) Q: find for each drinker the average price of Bud at the bars they frequent: SELECT drinker, AVG(price) • If any aggregation is used, then each element Compute of the SELECT list must be either: FROM Frequents, Sells drinker-bar- price of Bud 1. Aggregated, or WHERE Sells.bar = Frequents.bar tuples first, 2. An attribute on the GROUP BY list. AND beer = ‘Bud’ then group by drinker. GROUP BY drinker; HAVING Clauses Illegal Query Example You might think you could find the bar that • HAVING <condition> may follow a GROUP sells Bud the cheapest by: BY clause. SELECT bar, MIN(price) FROM Sells • If so, the condition applies to each group, and WHERE beer = ‘Bud’; groups not satisfying the condition are eliminated. But this query is illegal in SQL. – Why? Note bar is neither aggregated nor on the GROUP BY list.

  5. Requirements on HAVING Example: HAVING Conditions Sells(bar, beer, price) • These conditions may refer to any relation or tuple-variable in the FROM clause. Q: Find the average price of those beers that • They may refer to attributes of those are served in at least three bars relations, as long as the attribute makes sense within a group; i.e., it is either: 1. A grouping attribute, or 2. Aggregated. General form of Grouping and Solution Aggregation SELECT S FROM R 1 ,…,R n SELECT beer, AVG(price) WHERE C1 FROM Sells GROUP BY a 1 ,…,a k GROUP BY beer HAVING C2 HAVING COUNT(bar) >= 3 S = may contain attributes a 1 ,…,a k and/or any aggregates but NO OTHER ATTRIBUTES Beer groups with at least 3 non-NULL bars and also C1 = is any condition on the attributes in R 1 ,…,R n beer groups where the C2 = is any condition on aggregate expressions or grouping manufacturer is Pete’s. attributes

  6. General form of Grouping and Example Aggregation • From Sells(bar, beer, price), find the average price for each beer that is sold by more than SELECT S one bar in Champaign: FROM R 1 ,…,R n WHERE C1 GROUP BY a 1 ,…,a k SE L E CT b e e r, AVG(pric e ) HAVING C2 F ROM Se lls Evaluation steps: Whe re a ddre ss = ‘ Cha mpa ig n’ 1. Compute the FROM-WHERE part, obtain a table with all attributes in R 1 ,…,R n GROUP BY b e e r 2. Group by the attributes a 1 ,…,a k Ha ving COUNT (b a r) > 1 3. Compute the aggregates in C2 and keep only groups satisfying C2 4. Compute aggregates in S and return the result Example Exercise 3: online bookstore bar address beer price Book(isbn, title, publisher, price) Smith’s Champaign Bud $2 Smith’s Champaign Bud $2 Author(assn, aname, isbn) 1 Smith’s Champaign Kirin $2 Smith’s Champaign Kirin $2 Customer(cid, cname, state, city, zipcode) J’s bar Urbana Bud $4 K’s bar Champaign Bud $3 Buy(tid, cid, isbn, year, month, day) K’s bar Champaign Bud $3 2 Q3: Make a list of the names of customers who live in Smith’s Champaign Bud $2 Illinois and spent more than $5,000 in year 2000. K’s bar Champaign Bud $3 Smith’s Champaign Kirin $2 3 4 Smith’s Champaign Bud $2 Bud $2.50 K’s bar Champaign Bud $3

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend