Presentation is loading. Please wait.

Presentation is loading. Please wait.

Matthew P. Johnson, OCL5, CISDD CUNY, Sept 20051 OCL4 Oracle 10g: SQL & PL/SQL Session #2 Matthew P. Johnson CISDD, CUNY June, 2005.

Similar presentations


Presentation on theme: "Matthew P. Johnson, OCL5, CISDD CUNY, Sept 20051 OCL4 Oracle 10g: SQL & PL/SQL Session #2 Matthew P. Johnson CISDD, CUNY June, 2005."— Presentation transcript:

1

2 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 20051 OCL4 Oracle 10g: SQL & PL/SQL Session #2 Matthew P. Johnson CISDD, CUNY June, 2005

3 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 2 Agenda Last time: FDs This time: 1. Anomalies 2. Normalization Then: SQL

4 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 3 Review examples: finding FDs Product(name, price, category, color) name, category  price category  color Keys are: {name, category} Enrollment(student, address, course, room, time) student  address room, time  course student, course  room, time Keys are: [in class]

5 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 4 Next topic: Anomalies Identify anomalies in existing schema How to decompose a relation Boyce-Codd Normal Form (BCNF) Recovering information from a decomposition Third Normal Form

6 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 5 Types of anomalies Redundancy  Repeat info unnecessarily in several tuples Update anomalies:  Change info in one tuple but not in another Deletion anomalies:  Delete some values & lose other values too Insert anomalies:  Inserting row means having to insert other, separate info / null-ing it out

7 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 6 Example of anomalies Redundancy: name, maddress Update anomaly: Bill moves Delete anom.: Bill doesn’t pay bills, lose phones  lose Bill! Insert anom: can’t insert someone without a (non-null) phone Underlying cause: SSN-phone is many-many Effect: partial dependency ssn  name, maddress,  Whereas key = {ssn,phone} NameSSNMailing-addressPhone Michael123NY212-111-1111 Michael123NY917-111-1111 Hilary456DC202-222-2222 Hilary456DC914-222-2222 Bill789Chappaqua914-222-2222 Bill789Chappaqua212-333-3333 SSN  Name, Mailing-address SSN  Phone

8 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 7 Decomposition by projection Soln: replace anomalous R with projections of R onto two subsets of attributes Projection: an operation in Relational Algebra  Corresponds to SELECT command in SQL Projecting R onto attributes (A 1,…,A n ) means removing all other attributes  Result of projection is another relation  Yields tuples whose fields are A 1,…,A n  Resulting duplicates ignored

9 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 8 Projection for decomposition R 1 = projection of R on A 1,..., A n, B 1,..., B m R 2 = projection of R on A 1,..., A n, C 1,..., C p A 1,..., A n  B 1,..., B m  C 1,..., C p = all attributes, usually disjoint sets R 1 and R 2 may (/not) be reassembled to produce original R R(A 1,..., A n, B 1,..., B m, C 1,..., C p ) R 1 (A 1,..., A n, B 1,..., B m ) R 2 (A 1,..., A n, C 1,..., C p )

10 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 9 Chappaqua789Bill DC456Hilary NY123Michael Mailing-addressSSNName Decomposition example The anomalies are gone  No more redundant data  Easy to for Bill to move  Okay for Bill to lose all phones Break the relation into two: NameSSNMailing-addressPhone Michael123NY212-111-1111 Michael123NY917-111-1111 Hilary456DC202-222-2222 Hilary456DC914-222-2222 Bill789Chappaqua914-222-2222 Bill789Chappaqua212-333-3333 789 914-222-2222 789 914-222-2222 456 202-222-2222 456 917-111-1111 123 212-111-1111 123 PhoneSSN

11 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 10 Thus: high-level strategy Person buys Product name pricenamessn Conceptual Model: Relational Model: plus FD’s Normalization: Eliminates anomalies

12 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 11 Using FDs to produce good schemas 1. Start with set of relations 2. Define FDs (and keys) for them based on real world 3. Transform your relations to “normal form” (normalize them)  Do this using “decomposition” Intuitively, good design means  No anomalies  Can reconstruct all (and only the) original information

13 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 12 Decomposition terminology Projection: eliminating certain attributes from relation Decomposition: separating a relation into two by projection Join: (re)assembling two relations  Whenever a row from R 1 and a row from R 2 have the same value for some atts A, join together to form a row of R 3 If exactly the original rows are reproduced by joining the relations, then the decomposition was lossless  We join on the attributes R 1 and R 2 have in common (As) If it can’t, the decomposition was lossy

14 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 13 A decomposition is lossless if we can recover: R(A,B,C) R1(B,C) R2(B,A) R’(A,B,C) should be the same as R(A,B,C) R’ is in general larger than R. Must ensure R’ = R Decompose Recover Lossless Decompositions

15 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 14 Lossless decomposition Sometimes the data can be reproduced: (Word, 100) + (Word, WP)  (Word, 100, WP) (Oracle, 1000) + (Oracle, DB)  (Oracle, 1000, DB) (Access, 100) + (Access, DB)  (Access, 100, DB) NamePriceCategory Word100WP Oracle1000DB Access100DB NamePrice Word100 Oracle1000 Access100 NameCategory WordWP OracleDB AccessDB

16 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 15 Lossy decomposition Sometimes it’s not: (Word, WP) + (100, WP)  (Word, 100, WP) (Oracle, DB) + (1000, DB)  (Oracle, 1000, DB) (Oracle, DB) + (100, DB)  (Oracle, 100, DB) (Access, DB) + (1000, DB)  (Access, 1000, DB) (Access, DB) + (100, DB)  (Access, 100, DB) NamePriceCategory Word100WP Oracle1000DB Access100DB NameCategory WordWP OracleDB AccessDB PriceCategory 100WP 1000DB 100DB What’s wrong?

17 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 16 Ensuring lossless decomposition Examples: name  price, so first decomposition was lossless category  name and category  price, and so second decomposition was lossy R(A 1,..., A n, B 1,..., B m, C 1,..., C p ) If A 1,..., A n  B 1,..., B m or A 1,..., A n  C 1,..., C p Then the decomposition is lossless R 1 (A 1,..., A n, B 1,..., B m ) R 2 (A 1,..., A n, C 1,..., C p ) Note: don’t need both

18 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 17 Quick lossless/lossy example At a glance: can we decompose into R 1 (Y,X), R 2 (Y,Z)? At a glance: can we decompose into R 1 (X,Y), R 2 (X,Z)? XYZ 123 425

19 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 18 Normal Forms First Normal Form = all attributes are atomic  As opposed to set-valued  Assumed all along Second Normal Form (2NF) Third Normal Form (3NF) Boyce Codd Normal Form (BCNF) Fourth Normal Form (4NF) Fifth Normal Form (5NF)

20 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 19 Most important: BCNF A simple condition for removing anomalies from relations: I.e.: The left side must always contain a key I.e: If a set of attributes determines other attributes, it must determine all the attributes A relation R is in BCNF if: If As  Bs is a non-trivial dependency in R, then As is a superkey for R A relation R is in BCNF if: If As  Bs is a non-trivial dependency in R, then As is a superkey for R Codd: Ted Codd, IBM researcher, inventor of relational model, 1970 Boyce: Ray Boyce, IBM researcher, helped develop SQL in the 1970s

21 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 20 BCNF decomposition algorithm Repeat choose A 1, …, A m  B 1, …, B n that violates the BNCF condition //Heuristic: choose Bs as large as possible split R into R 1 (A 1, …, A m, B 1, …, B n ) and R 2 (A 1, …, A m, [others]) continue with both R 1 and R 2 Until no more violations Repeat choose A 1, …, A m  B 1, …, B n that violates the BNCF condition //Heuristic: choose Bs as large as possible split R into R 1 (A 1, …, A m, B 1, …, B n ) and R 2 (A 1, …, A m, [others]) continue with both R 1 and R 2 Until no more violations A’s Others B’s R1R1 R2R2

22 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 21 Boyce-Codd Normal Form Name/phone example is not BCNF:  {ssn,phone} is key  FD: ssn  name,mailing-address holds Violates BCNF: ssn is not a superkey Its decomposition is BCNF  Only superkeys  anything else NameSSNMailing-addressPhone Michael123NY212-111-1111 Michael123NY917-111-1111 NameSSNMailing-address Michael123NY SSNPhoneNumber 123 212-111-1111 123 917-111-1111

23 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 22 BCNF motivation Two big ideas:  Only a key field can determine other fields  Key values are unique   no FD-caused redundancy Slogan: “Every FD must contain the key, the whole key and nothing but the key.” More accurate: “Every FD must contain (on the left) a key, a whole key, and maybe other fields.

24 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 23 BCNF Decomposition Larger example: multiple decompositions {Title, Year, Studio, President, Pres-Address} FDs:  Title Year  Studio  Studio  President  President  Pres-Address   Studio  President, Pres-Address (why?) No many-many this time Problem cause: transitive FDs:  Title,year  studio  president

25 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 24 BCNF Decomposition Illegal: As  Bs, where As don’t include key Decompose: Studio  President, Pres-Address  As = {studio}  Bs = {president, pres-address}  Cs = {title, year} Result: 1. Studios(studio, president, pres-address) 2. Movies(studio, title, year) Is (2) in BCNF? Is in (1) BCNF?  Key: Studio  FD: President  Pres-Address  Q: Does president  studio? If so, president is a key  But if not, it violates BCNF

26 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 25 BCNF Decomposition Studios(studio, president, pres-address) Illegal: As  Bs, where As don’t include key  Decompose: President  Pres-Address  As = {president}  Bs = {pres-address}  Cs = {studio} {Studio, President, Pres-Address} becomes  {President, Pres-Address}  {Studio, President}

27 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 26 Roadmap Want to remove redundancy/anomalies  Convert to BCNF Find FDs – closure alg Check if each FD A  B is ok  If A contains a key If not, decompose into R1(A,B), R2(A,rest) Because A  B, this will be lossless Could check by joining R1 and R2  Would get no rows not in original

28 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 27 Decomposition algorithm example R(N,O,R,P) F = {N  O, O  R, R  N} Key: N,P Violations of BCNF: N  O, O  R, N  OR  which kinds of violations are these? Pick N  OR(on board) Can we rejoin?(on board) What happens if we pick N  O instead? Can we rejoin? (on board) NameOfficeResidencePhone GeorgePres.WH202-… GeorgePres.WH486-… DickVPNO202-… DickVPNO307-…

29 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 28 BCNF summary BCNF decomposition is lossless  Can reproduce original by joining Saw last time: Every 2-attribute relation is in BCNF Final set of decomposed relations might be different depending on  Order of bad FDs chosen Saw last time: But all results will be in BCNF

30 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 29 BCNF summary BCNF decomp. does not lose data  Resulting relations can be rejoined to obtain the original In BCNF, there’s no FD-based redundancy  Values in key field are unique  Other FDs are from key fields   everything is “as compressed as possible”

31 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 30 BCNF Review Q: What’s required for BCNF? Q: What’s the slogan for BCNF? Q: Who are B & C?

32 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 31 BCNF Review Q: How do we fix a non-BCNF relation? Q: If As  Bs violates BCNF, what do we do?  Q: In this case, could the decomposition be lossy? Q: Under what circumstances could a decomposition be lossy? Q: How do we combine two relations?

33 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 32 Design Goals Goal for a relational database design is:  No redundancy  Lossless Join  Dependency Preservation If we cannot achieve this, we accept one of  dependency loss  use of more expensive inter-relational methods to preserve dependencies  data redundancy due to use of 3NF Interesting: SQL does not provide a direct way of specifying FDs other than superkeys  can specify FDs using assertions, but they are expensive to test

34 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 33 Recap: You are here First part of course is done: conceptual foundations You now know:  E/R Model  Relational Model  Relational Algebra You now know how to:  Capture part of world as an E/R model  Convert E/R models to relational models  Convert relational models to good (normal) forms Next:  Create, update, query tables with R.A/SQL  Write SQL/DB-connected applications

35 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 34 High-level agenda Install Oracle Start SQL Lab on Oracle system info/SQL

36 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 35 Next topic: SQL Standard language for querying and manipulating data Structured Query Language Many standards: ANSI SQL, SQL92/SQL2, SQL3/SQL99 Vendors support various subsets/extensions We’ll do Oracle’s version Basic form (many more bells and whistles in addition): SELECT attributes FROM relations (possibly multiple, joined) WHERE conditions (selections) SELECT attributes FROM relations (possibly multiple, joined) WHERE conditions (selections)

37 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 36 Data Types in SQL Characters:  CHAR(20)-- fixed length  VARCHAR(40)-- variable length Numbers:  BIGINT, INT, SMALLINT, TINYINT  REAL, FLOAT -- differ in precision  MONEY Times and dates:  DATE  DATETIME-- SQL Server

38 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 37 “Tables” PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi Product Attribute names Table name Tuples or rows

39 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 38 Simple SQL Query PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi SELECT * FROM Product WHERE category='Gadgets' Product PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks “selection”

40 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 39 Simple SQL Query PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi SELECT PName, Price, Manufacturer FROM Product WHERE Price > 100 Product PNamePriceManufacturer SingleTouch$149.99Canon MultiTouch$203.99Hitachi “selection” and “projection”

41 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 40 A Notation for SQL Queries SELECT Name, Price, Manufacturer FROM Product WHERE Price > 100 Product(PName, Price, Category, Manfacturer) (PName, Price, Manfacturer) Input Schema Output Schema

42 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 41 SQL SQL SELECT  Sometimes called a “projection” What goes in the WHERE clause: x = y, x < y, x <= y, etc.  For number, they have the usual meanings  For CHAR and VARCHAR: lexicographic ordering Expected conversion between CHAR and VARCHAR  For dates and times, what you expect

43 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 42 SQL e.g. Movies(Title,Year,Length,inColor,Studio,Prdcr#) Q: How long was Star Wars (1977), in SQL? Q: Which Fox movies are are at least 100 minutes long, in SQL?

44 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 43 SQL e.g. Reps(ssn, name, etc.) Clients(ssn, name, rssn) Q: Who are George’s clients, in SQL? Conceptually:   Clients.name (  Reps.name=“George” and Reps.ssn=rssn (Reps x Clients))

45 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 44 The LIKE operator s LIKE p: pattern matching on strings p may contain two special symbols:  _ = any single character  % = zero or more chars Product(Name, Price, Category, Manufacturer) Find all products whose name contains ‘gizmo’: SELECT * FROM Products WHERE Name LIKE '%gizmo%'

46 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 45 The LIKE operator Q: What it want to search for values containing a ‘%’? PName LIKE '%%' won’t work Instead, must use escape chars  In C/C++/J, prepend ‘\’  In SQL, prepend an arbitrary escape char: PName LIKE '%x%' ESCAPE 'x'

47 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 46 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 vary SQL string literals put in ' ':  'mystring' Single-quote literals escaped with single- quotes:  'George''s string'

48 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 47 Q: What about double quotes? A: Can’t be used in place of single quotes But can be used when Oracle would otherwise misparse your command, e.g.: 1. Names with spaces:  create table bad table name (a int, b int); 2. Reserved words as names:  create table badfieldname(from int, b int);

49 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 48 Q: Can an escape char be an escape string? A: No. SQL> select * from newtable where a like '%\%' escape '\'; A B ---------- h%i there SQL> select * from newtable where a like '%\%' escape '\\'; select * from newtable where a like '%\%' escape '\\' * ERROR at line 1: ORA-01425: escape character must be character string of length 1 SQL> select * from newtable where a like '%\%' escape '\'; A B ---------- h%i there SQL> select * from newtable where a like '%\%' escape '\\'; select * from newtable where a like '%\%' escape '\\' * ERROR at line 1: ORA-01425: escape character must be character string of length 1

50 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 49 More on single-quotes Dates with DATE:  DATE '1948-05-14' Timestamps with TIMESTAMP:  TIMESTAMP '1948-05-14 12:00:00'

51 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 50 Eliminating Duplicates SELECT DISTINCT category FROM Product SELECT DISTINCT category FROM Product Compare to: SELECT category FROM Product SELECT category FROM Product Category Gadgets Photography Household Category Gadgets Photography Household

52 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 51 Ordering the Results Ordering is ascending, unless you specify the DESC keyword per attribute. SELECT pname, price, manufacturer FROM Product WHERE category='gizmo' AND price > 50 ORDER BY price, pname SELECT pname, price, manufacturer FROM Product WHERE category='gizmo' AND price > 50 ORDER BY price, pname SELECT pname, price, manufacturer FROM Product WHERE category='gizmo' AND price > 50 ORDER BY price DESC, pname ASC SELECT pname, price, manufacturer FROM Product WHERE category='gizmo' AND price > 50 ORDER BY price DESC, pname ASC

53 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 52 Ordering the Results SELECT Category FROM Product ORDER BY PName SELECT Category FROM Product ORDER BY PName PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi ?

54 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 53 Joins in SQL Connect two or more tables: PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi Product Company CNameStockPriceCountry GizmoWorks25USA Canon65Japan Hitachi15Japan What is the connection between them?

55 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 54 Joins in SQL Product (pname, price, category, manufacturer) Company (cname, stockPrice, country) Find all products under $200 manufactured in Japan; return their names and prices. SELECT PName, Price FROM Product, Company WHERE Manufacturer=CName AND Country='Japan' AND Price <= 200 Join between Product and Company

56 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 55 Joins in SQL PNamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi Product Company CnameStockPriceCountry GizmoWorks25USA Canon65Japan Hitachi15Japan PNamePrice SingleTouch$149.99 SELECT PName, Price FROM Product, Company WHERE Manufacturer=CName AND Country='Japan' AND Price <= 200

57 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 56 Joins in SQL Product (pname, price, category, manufacturer) Company (cname, stockPrice, country) Find all countries that manufacture some product in the ‘Gadgets’ category. SELECT Country FROM Product, Company WHERE Manufacturer=CName AND Category='Gadgets'

58 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 57 Joins in SQL NamePriceCategoryManufacturer Gizmo$19.99GadgetsGizmoWorks Powergizmo$29.99GadgetsGizmoWorks SingleTouch$149.99PhotographyCanon MultiTouch$203.99HouseholdHitachi Product Company CnameStockPriceCountry GizmoWorks25USA Canon65Japan Hitachi15Japan Country ?? What is the problem? What’s the solution? SELECT Country FROM Product, Company WHERE Manufacturer=CName AND Category='Gadgets'

59 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 58 Joins Product (pname, price, category, manufacturer) Purchase (buyer, seller, store, product) Person(name, phone, city) Find names of Seattleites who bought Gadgets, and the names of the stores they bought such product from. SELECT DISTINCT name, store FROM Person, Purchase, Product WHERE persname=buyer AND product = pname AND city='Seattle' AND category='Gadgets'

60 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 59 Disambiguating Attributes Sometimes two relations have the same attr: Person(pname, address, worksfor) Company(cname, address) SELECT DISTINCT pname, address FROM Person, Company WHERE worksfor = cname SELECT DISTINCT Person.pname, Company.address FROM Person, Company WHERE Person.worksfor = Company.cname Which address ?

61 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 60 Tuple Variables SELECT DISTINCT x.store FROM Purchase AS x, Purchase AS y WHERE x.product = y.product AND y.store = 'BestBuy' SELECT DISTINCT x.store FROM Purchase AS x, Purchase AS y WHERE x.product = y.product AND y.store = 'BestBuy' Find all stores that sold at least one product that the store ‘BestBuy’ also sold: Answer: (store) Product (pname, price, category, manufacturer) Purchase (buyer, seller, store, product) Person(persname, phoneNumber, city)

62 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 61 Tuple Variables Tuple variables introduced automatically: Product (name, price, category, manufacturer) Becomes: Doesn’t work when Product occurs more than once In that case the user needs to define variables explicitly SELECT name FROM Product WHERE price > 100 SELECT name FROM Product WHERE price > 100 SELECT Product.name FROM Product AS Product WHERE Product.price > 100 SELECT Product.name FROM Product AS Product WHERE Product.price > 100

63 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 62 Details: Disambiguation in 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

64 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 63 Details: 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

65 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 64 SQL Query Semantics SELECT a1, a2, …, ak FROM R1 AS x1, R2 AS x2, …, Rn AS xn WHERE Conditions 1. Nested loops: Answer = {} for x1 in R1 do for x2 in R2 do ….. for xn in Rn do if Conditions then Answer = Answer  {(a1,…,ak)} return Answer Answer = {} for x1 in R1 do for x2 in R2 do ….. for xn in Rn do if Conditions then Answer = Answer  {(a1,…,ak)} return Answer

66 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 65 SQL Query Semantics SELECT a1, a2, …, ak FROM R1 AS x1, R2 AS x2, …, Rn AS xn WHERE Conditions 2. Parallel assignment Doesn’t impose any order! Answer = {} for all assignments x1 in R1, …, xn in Rn do if Conditions then Answer = Answer  {(a1,…,ak)} return Answer Answer = {} for all assignments x1 in R1, …, xn in Rn do if Conditions then Answer = Answer  {(a1,…,ak)} return Answer

67 Matthew P. Johnson, OCL5, CISDD CUNY, Sept 2005 66 Now lab 2 online


Download ppt "Matthew P. Johnson, OCL5, CISDD CUNY, Sept 20051 OCL4 Oracle 10g: SQL & PL/SQL Session #2 Matthew P. Johnson CISDD, CUNY June, 2005."

Similar presentations


Ads by Google