Download presentation
Presentation is loading. Please wait.
1
M.P. Johnson, DBMS, Stern/NYU, Sp20041 C20.0046: Database Management Systems Lecture #11 Matthew P. Johnson Stern School of Business, NYU Spring, 2004
2
M.P. Johnson, DBMS, Stern/NYU, Sp2004 2 Agenda Last time: Started SQL This time: More SQL Homework 2 is up
3
M.P. Johnson, DBMS, Stern/NYU, Sp2004 3 Review Examples from sqlzoo.netsqlzoo.net SELECT L FROM R 1, …, R n WHERE C SELECT L FROM R 1, …, R n WHERE C L ( C (R 1 x … R n )
4
M.P. Johnson, DBMS, Stern/NYU, Sp2004 4 First Unintuitive SQLism SELECTR.A FROMR, S, T WHERER.A=S.A OR R.A=T.A Looking for R (S T) But what happens if T is empty? See transcript of this in Oracle on salestranscript
5
M.P. Johnson, DBMS, Stern/NYU, Sp2004 5 More on escape chars SQL: no official default escape char In SQL*Plus: default escape char == ‘\’ Can set with SQL> set escape X Other tools, DBMSs: your mileage may very SQL string literals put in ‘ ‘: ‘mystring’ Single-quote literals escaped with single- quotes: ‘George’’s string’
6
M.P. Johnson, DBMS, Stern/NYU, Sp2004 6 More on single-quotes Bitstrings specified like regular strings but with B: B’001’ Hex strings with X: X’7ff’ Dates with DATE: DATE ‘1948-05-14’ Timestamps with TIMESTAMP: TIMESTAMP ‘1948-05-14 12:00:00’
7
M.P. Johnson, DBMS, Stern/NYU, Sp2004 7 Set/bag ops in SQL Orthodox SQL has set operators: UNION, INTERSECT, EXCEPT And bag operators: UNION ALL, INTERSECT ALL, EXCEPT ALL These operators are applied to queries: (SELECT name FROM Person WHERE City=“Seattle”) UNION (SELECT name FROM Person, Purchase WHERE buyer=name AND store=“The Bon”) (SELECT name FROM Person WHERE City=“Seattle”) UNION (SELECT name FROM Person, Purchase WHERE buyer=name AND store=“The Bon”)
8
M.P. Johnson, DBMS, Stern/NYU, Sp2004 8 Set/bag ops in Oracle SQL Oracle SQL support uses MINUS rather than EXCEPT Oracle SQL supports bag op UNION ALL but not INTERSECT ALL or MINUS ALL See the Ullman page on more differencesUllman
9
M.P. Johnson, DBMS, Stern/NYU, Sp2004 9 Disambiguation in Oracle SQL Can rename fields by Select name as n … Select name n … But not by Select name=n… Can rename relations only by … from tab t1, tab t2 Lesson: if you get errors, remove all =s, ASs
10
M.P. Johnson, DBMS, Stern/NYU, Sp2004 10 Disambiguation in Oracle SQL Every selected field must be unambiguous For R(A,B), Select A from R, R Select R1.A from R R1, R R2 Consider: Why? * is shorthand for all fields, each must be unambiguous Select * from R R1, R R2 SQL> Select * from R, R; Select * from R, R * ERROR at line 1: ORA-00918: column ambiguously defined SQL> Select * from R, R; Select * from R, R * ERROR at line 1: ORA-00918: column ambiguously defined
11
M.P. Johnson, DBMS, Stern/NYU, Sp2004 11 R.A. SQL People(ssn, name, street, city, state) assume for clarity that cities are unique Q: Who lives on George’s street? In R.A.: street=s2 AND city=c2 ( p2(s2,c2) (People) x street,city ( name=“George” (People))) In SQL? The other way in R.A.: People street,city ( name=“George” (People)) In SQL? Later on…
12
M.P. Johnson, DBMS, Stern/NYU, Sp2004 12 R.A. SQL Acc(name,ssn,balance) Q: Who has the largest balance? In R.A.: name (Acc) - a2.name ( a2.bal < Acc.bal (Acc x a2 (Acc))) In SQL?
13
M.P. Johnson, DBMS, Stern/NYU, Sp2004 13 Nulls in SQL If we don’t have a value, can put a NULL Null can mean several things: Value does not exists Value exists but is unknown Value not applicable The schema specifies whether null is allowed for each attribute not null if not allowed Otherwise, null is allowed
14
M.P. Johnson, DBMS, Stern/NYU, Sp2004 14 Null Values x = NULL 4*(3-x)/7 = NULL x = NULL x + 3 – x = NULL x = NULL 3 + (x-x) = NULL x = NULL x = ‘Joe’ is UNKNOWN In general: no row use null fields appear in the selection test will pass the test Pace Boole, SQL has three boolean values: FALSE=0 TRUE=1 UNKNOWN=0.5
15
M.P. Johnson, DBMS, Stern/NYU, Sp2004 15 Null values in boolean expressions C1 AND C2= min(C1, C2) C1 OR C2= max(C1, C2) NOT C1= 1 – C1 height > 6 = UNKNOWN UNKNOWN OR weight > 190 = UNKOWN (age < 25) AND UNKNOWN = UNKNOWN SELECT * FROM Person WHERE (age < 25) AND (height > 6 OR weight > 190) SELECT * FROM Person WHERE (age < 25) AND (height > 6 OR weight > 190) E.g. age=20 heigth=NULL weight=200
16
M.P. Johnson, DBMS, Stern/NYU, Sp2004 16 Comparing null and non-nulls Unexpected behavior: Some Persons are not included! The “trichotomy law” does not hold! SELECT * FROM Person WHERE age = 25 SELECT * FROM Person WHERE age = 25
17
M.P. Johnson, DBMS, Stern/NYU, Sp2004 17 Testing for null values Can test for NULL explicitly: x IS NULL x IS NOT NULL Now it includes all Persons SELECT * FROM Person WHERE age = 25 OR age IS NULL SELECT * FROM Person WHERE age = 25 OR age IS NULL
18
M.P. Johnson, DBMS, Stern/NYU, Sp2004 18 Evaluation strategies for SQL queries Semantics of a SQL query defined in terms of the following conceptual evaluation strategy: Compute the cross-product of relation-list in FROM clause Discard resulting tuples if they fail WHERE clause Delete attributes that are not in SELECT clause If DISTINCT is specified, eliminate duplicate rows Often the least efficient way to compute a query! Optimizer finds better ways, but result is the same
19
M.P. Johnson, DBMS, Stern/NYU, Sp2004 19 Subqueries (5.3) Powerful feature of SQL: one clause can contain other SQL queries! So can FROM and HAVING clauses Several ways: Selection single constant (scalar) in WHERE Selection relation in WHERE Selection relation in FROM Etc.
20
M.P. Johnson, DBMS, Stern/NYU, Sp2004 20 Subquery motivation Consider standard multi-table example: Purchase(prodname, buyerssn, etc.) Person(name, ssn, etc.) What did Conrad buy? As usual, need to AND on equality identifying ssn’s row and buyerssn’s row SELECT Purchase.prodname FROM Purchase, Person WHERE buyerssn = ssn AND name = ‘Conrad’
21
M.P. Johnson, DBMS, Stern/NYU, Sp2004 21 Subquery motivation Purchase(prodname, buyerssn, etc.) Person(name, ssn, etc.) What did Conrad buy? Natural intuition: 1.Go find Conrad’s ssn 2.Then find purchases SELECT ssn FROM Person WHERE name = ‘Conrad’ SELECT Purchase.prodname FROM Purchase, Person WHERE buyerssn = Conrad’s-ssn
22
M.P. Johnson, DBMS, Stern/NYU, Sp2004 22 Subqueries Subquery: copy in Conrad’s selection for his ssn: The subquery returns one value, so the = is valid If it returns more, we get a run-time error. SELECT Purchase.prodname FROM Purchase WHERE buyerssn = (SELECT ssn FROM Person WHERE name = ‘Conrad’) SELECT Purchase.prodname FROM Purchase WHERE buyerssn = (SELECT ssn FROM Person WHERE name = ‘Conrad’)
23
M.P. Johnson, DBMS, Stern/NYU, Sp2004 23 Operators on selections Several new operators applied to (unary) selections: 1. EXISTS R 2. s > ALL R 3. s > ANY R > is just an example op Each expression can be negated with NOT
24
M.P. Johnson, DBMS, Stern/NYU, Sp2004 24 Subqueries returning relations Q: Find companies Martha bought from Intuition: Find Martha’s ssn Find Martha’s products Find those products’ companies SELECT Product.maker FROM Product WHERE Product.name IN (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’)) SELECT Product.maker FROM Product WHERE Product.name IN (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’))
25
M.P. Johnson, DBMS, Stern/NYU, Sp2004 25 Subqueries returning relations Equivalent to: But are they really equivalent? Make both distinct to be sure SELECT Product.maker FROM Product, Purchase, People WHERE Product.name = Purchase.product AND Purchase.buyerssn = ssn AND name = ‘Martha’ SELECT Product.maker FROM Product, Purchase, People WHERE Product.name = Purchase.product AND Purchase.buyerssn = ssn AND name = ‘Martha’
26
M.P. Johnson, DBMS, Stern/NYU, Sp2004 26 Subqueries returning relations SELECT name FROM Product WHERE price > ALL (SELECT price FROM Purchase WHERE maker=‘Gizmo-Works’) SELECT name FROM Product WHERE price > ALL (SELECT price FROM Purchase WHERE maker=‘Gizmo-Works’) Product (pname, price, category, maker) Find products that are more expensive than all Gizmo-Works products You can also use: s > ALL R s > ANY R EXISTS R
27
M.P. Johnson, DBMS, Stern/NYU, Sp2004 27 Correlated Queries So far, subquery executed once; result used for higher query More complicated: correlated queries “[T]he subquery… [is] evaluated many times, once for each assignment of a value to some term in the subquery that comes from a tuple variable outside the subquery” (p286). Q: What does this mean? A: That subqueries refer to vars from outer qureries
28
M.P. Johnson, DBMS, Stern/NYU, Sp2004 28 Correlated Queries Movie (title, year, director, length) Q: Find titles that are titles of multiple movies Note (1) scope of variables (2) this can still be expressed as single SFW SELECT DISTINCT title FROM Movie AS x WHERE year <> ANY (SELECT year FROM Movie WHERE title = x.title); SELECT DISTINCT title FROM Movie AS x WHERE year <> ANY (SELECT year FROM Movie WHERE title = x.title); correlation
29
M.P. Johnson, DBMS, Stern/NYU, Sp2004 29 Complex Correlated Query Product (pname, price, category, maker, year) Find products (and their manufacturers) that are more expensive than all products made by the same manufacturer before 1972 Powerful, but much harder to optimize! SELECT DISTINCT pname, maker FROM Product AS x WHERE price > ALL (SELECT price FROM Product AS y WHERE x.maker = y.maker AND y.year < 1972); SELECT DISTINCT pname, maker FROM Product AS x WHERE price > ALL (SELECT price FROM Product AS y WHERE x.maker = y.maker AND y.year < 1972);
30
M.P. Johnson, DBMS, Stern/NYU, Sp2004 30 FROM subqueries Recall Q: Which companies did Martha buy from? Before: found ssn, found products, found companies SELECT Product.maker FROM Product WHERE Product.name IN (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’)) SELECT Product.maker FROM Product WHERE Product.name IN (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’))
31
M.P. Johnson, DBMS, Stern/NYU, Sp2004 31 FROM subqueries Motivation for another way: suppose we’re given Martha’s purchases Then could just cross with Products and select identified rows Substitute (named) subquery for Martha’s purchases SELECT Product.maker FROM Product, (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’)) Marthas WHERE Product.name = Martha.product SELECT Product.maker FROM Product, (SELECT Purchase.product FROM Purchase WHERE Purchase.buyerssn = (SELECT ssn FROM Person WHERE name = ‘Martha’)) Marthas WHERE Product.name = Martha.product
32
M.P. Johnson, DBMS, Stern/NYU, Sp2004 32 Existential/Universal Conditions Product (pname, price, company) Company(cname, city) Find all companies s.t. some of their products have price < 100 SELECT DISTINCT Company.cname FROM Company, Product WHERE Company.cname = Product.company and Produc.price < 100 SELECT DISTINCT Company.cname FROM Company, Product WHERE Company.cname = Product.company and Produc.price < 100 Existential: easy!
33
M.P. Johnson, DBMS, Stern/NYU, Sp2004 33 Existential/Universal Conditions Product (pname, price, company) Company(cname, city) Find all companies s.t. all of their products have price < 100 Universal: hard!
34
M.P. Johnson, DBMS, Stern/NYU, Sp2004 34 Existential/universal with IN 2. Find all companies s.t. all their products have price < 100 1. Find the other companies: i.e. s.t. some product 100 SELECT DISTINCT Company.cname FROM Company WHERE Company.cname IN (SELECT Product.company FROM Product WHERE Produc.price >= 100 SELECT DISTINCT Company.cname FROM Company WHERE Company.cname IN (SELECT Product.company FROM Product WHERE Produc.price >= 100 SELECT DISTINCT Company.cname FROM Company WHERE Company.cname NOT IN (SELECT Product.company FROM Product WHERE Produc.price >= 100 SELECT DISTINCT Company.cname FROM Company WHERE Company.cname NOT IN (SELECT Product.company FROM Product WHERE Produc.price >= 100
35
M.P. Johnson, DBMS, Stern/NYU, Sp2004 35 More on Set-Comparison Operators We’ve already seen IN R, NOT IN R. Can also use EXISTS R, NOT EXISTS R Also available: op ANY R, op ALL R Find sailors whose rating is greater than that of some sailor called Horatio: SELECT R.SID FROM Reserves R WHERE R.rating > ANY ( SELECT R2.rating FROM Reserves R2 WHERE R2.sname=‘Horatio’)
36
M.P. Johnson, DBMS, Stern/NYU, Sp2004 36 Joins operations Variations: Cross join (Cartesian product) Join … On Natural join Outer join Apply to relations appearing in selections
37
M.P. Johnson, DBMS, Stern/NYU, Sp2004 37 Cross join - example NameAddressGenderBirthdate Hanks123 Palm RdM01/01/60 Taylor456 Maple AvF02/02/40 Lucas789 Oak StM03/03/55 NameAddressNetworth Spielberg246 Palm Rd10M Taylor456 Maple Av20M Lucas789 Oak St30M MovieStar MovieExec
38
M.P. Johnson, DBMS, Stern/NYU, Sp2004 38 Cross join – example Select * From MovieStar Cross Join MovieExec MovieS tar.nam e MovieStar.add ress MovieSta r. Gender MovieStar.Birthdate MovieEx ec. Name MovieExec.Ad dress MovieEx ec. Networth Hanks123 Palm RdM01/01/60Spielberg246 Palm Rd10M Hanks123 Palm RdM01/01/60Taylor456 Maple Av20M Hanks123 Palm RdM01/01/60Lucas789 Oak St30M Taylor456 Maple AvF02/02/40Spielberg246 Palm Rd10M Taylor456 Maple AvF02/02/40Taylor456 Maple Av20M Taylor456 Maple AvF02/02/40Lucas789 Oak St30M Lucas789 Oak StM03/03/55Spielberg246 Palm Rd10M Lucas789 Oak StM03/03/55Taylor456 Maple Av20M Lucas789 Oak StM03/03/55Lucas789 Oak St30M Row 1 2 3 4 5 6 7 8 9
39
M.P. Johnson, DBMS, Stern/NYU, Sp2004 39 Join … On: example Select * From MovieStar Join MovieExec On MovieStar.Name <> MovieExec. Name MovieSt ar.name MovieStar.addr ess MovieSta r. Gender MovieStar. Birthdate MovieExe c. Name MovieExec.Add ress MovieEx ec. Networth Hanks123 Palm RdM01/01/60Spielber g 246 Palm Rd10M Hanks123 Palm RdM01/01/60Taylor456 Maple Av20M Hanks123 Palm RdM01/01/60Lucas789 Oak St30M Taylor456 Maple AvF02/02/40Spielber g 246 Palm Rd10M Taylor456 Maple AvF02/02/40Taylor456 Maple Av20M Taylor456 Maple AvF02/02/40Lucas789 Oak St30M Lucas789 Oak StM03/03/55Spielber g 246 Palm Rd10M Lucas789 Oak StM03/03/55Taylor456 Maple Av20M Lucas789 Oak StM03/03/55Lucas789 Oak St30M Row 1 2 3 4 5 6 7 8 9
40
M.P. Johnson, DBMS, Stern/NYU, Sp2004 40 Natural Joins MovieStar(name, address, gender, birthdate) MovieExec(name, address, networth) Natural Join: MovieStar Natural Join MovieExec; Results in: list of individuals who are movie- stars as well as executives: (Name, address, gender, birthdate, networth)
41
M.P. Johnson, DBMS, Stern/NYU, Sp2004 41 Example - Natural join NameAddressGenderBirthdate Hanks123 Palm RdM01/01/60 Taylor456 Maple AvF02/02/40 Lucas789 Oak StM03/03/55 NameAddressNetworth Spielberg246 Palm Rd10M Taylor456 Maple Av 20M Lucas789 Oak St30M MovieStar MovieExec NameAddressGenderBirthdateNetworth Taylor456 Maple AvF02/02/4020M Lucas789 Oak StM03/03/5530M Select *from MovieStar Natural Join MovieExec
42
M.P. Johnson, DBMS, Stern/NYU, Sp2004 42 Outer Join - Example NameAddressGenderBirthdate Hanks123 Palm RdM01/01/60 Taylor456 Maple AvF02/02/40 Lucas789 Oak StM03/03/55 NameAddressNetworth Spielberg246 Palm Rd10M Taylor456 Maple Av20M Lucas789 Oak St30M NameAddressGenderBirthdateNetworth Hanks123 Palm RdM01/01/60NULL Spielberg246 Palm RdNULL 10M Taylor456 Maple AvF02/02/4020M Lucas789 Oak StM03/03/5530M MovieStarMovieExec Select *from MovieStar NATURAL FULL OUTER JOIN MovieExec
43
M.P. Johnson, DBMS, Stern/NYU, Sp2004 43 Outer Join - Example Select *from MovieStar LEFT OUTER JOIN MovieExec NameAddressGenderBirthdateNetworth Hanks123 Palm RdM01/01/60NULL Spielberg246 Palm RdNULL 10M Taylor456 Maple AvF02/02/4020M Lucas789 Oak StM03/03/5530M Select *from MovieStar RIGHT OUTER JOIN MovieExec NameAddressGenderBirthdateNetworth Hanks123 Palm RdM01/01/60NULL Spielberg246 Palm RdNULL 10M Taylor456 Maple AvF02/02/4020M Lucas789 Oak StM03/03/5530M
44
M.P. Johnson, DBMS, Stern/NYU, Sp2004 44 R.A. SQL People(ssn, name, street, city, state) assume for clarity that cities are unique Q: Who lives on George’s street? Now, the second way in R.A.: People street,city ( name=“George” (People)) In SQL?
45
M.P. Johnson, DBMS, Stern/NYU, Sp2004 45 Live Examples Examples from sqlzoo.netsqlzoo.net
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.