Presentation is loading. Please wait.

Presentation is loading. Please wait.

OCL3 Oracle 10g: SQL & PL/SQL Session #3

Similar presentations


Presentation on theme: "OCL3 Oracle 10g: SQL & PL/SQL Session #3"— Presentation transcript:

1 OCL3 Oracle 10g: SQL & PL/SQL Session #3
Matthew P. Johnson CISDD, CUNY June, 2005 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

2 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Agenda Last time: FDs This time: Anomalies Normalization Then: SQL Matthew P. Johnson, OCL3, CISDD CUNY, June 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] Keys: {student, room, time}, {student, course} and all supersets Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

4 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

5 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

6 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Example of anomalies Name SSN Mailing-address Phone Michael 123 NY Hilary 456 DC Bill 789 Chappaqua SSN  Name, Mailing-address SSN  Phone 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} Matthew P. Johnson, OCL3, CISDD CUNY, June 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 (A1,…,An) means removing all other attributes Result of projection is another relation Yields tuples whose fields are A1,…,An Resulting duplicates ignored Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

8 Projection for decomposition
R(A1, ..., An, B1, ..., Bm, C1, ..., Cp) R1(A1, ..., An, B1, ..., Bm) R2(A1, ..., An, C1, ..., Cp) R1 = projection of R on A1, ..., An, B1, ..., Bm R2 = projection of R on A1, ..., An, C1, ..., Cp A1, ..., An  B1, ..., Bm  C1, ..., Cp = all attributes, usually disjoint sets R1 and R2 may (/not) be reassembled to produce original R Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

9 Decomposition example
Name SSN Mailing-address Phone Michael 123 NY Hilary 456 DC Bill 789 Chappaqua Break the relation into two: Chappaqua 789 Bill DC 456 Hilary NY 123 Michael Mailing-address SSN Name 789 456 123 Phone SSN The anomalies are gone No more redundant data Easy to for Bill to move Okay for Bill to lose all phones Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

10 Thus: high-level strategy
Person buys Product name price ssn Conceptual Model: Relational Model: plus FD’s Normalization: Eliminates anomalies Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

11 Using FDs to produce good schemas
Start with set of relations Define FDs (and keys) for them based on real world 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 Matthew P. Johnson, OCL3, CISDD CUNY, June 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 R1 and a row from R2 have the same value for some atts A, join together to form a row of R3 If exactly the original rows are reproduced by joining the relations, then the decomposition was lossless We join on the attributes R1 and R2 have in common (As) If it can’t, the decomposition was lossy Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

13 Lossless Decompositions
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) Decompose Recover R’ is in general larger than R. Must ensure R’ = R Matthew P. Johnson, OCL3, CISDD CUNY, June 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) Name Price Category Word 100 WP Oracle 1000 DB Access Name Price Word 100 Oracle 1000 Access Name Category Word WP Oracle DB Access Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

15 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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) What’s wrong? Name Price Category Word 100 WP Oracle 1000 DB Access Price Category 100 WP 1000 DB Name Category Word WP Oracle DB Access Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

16 Ensuring lossless decomposition
R(A1, ..., An, B1, ..., Bm, C1, ..., Cp) R1(A1, ..., An, B1, ..., Bm) R2(A1, ..., An, C1, ..., Cp) If A1, ..., An  B1, ..., Bm or A1, ..., An  C1, ..., Cp Then the decomposition is lossless Note: don’t need both Examples: name  price, so first decomposition was lossless category  name and category  price, and so second decomposition was lossy Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

17 Quick lossless/lossy example
At a glance: can we decompose into R1(Y,X), R2(Y,Z)? At a glance: can we decompose into R1(X,Y), R2(X,Z)? X Y Z 1 2 3 4 5 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

18 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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) Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

19 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Most important: BCNF A simple condition for removing anomalies from relations: A relation R is in BCNF if: If As  Bs is a non-trivial dependency in R , then As is a superkey for R 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 Codd: Ted Codd, IBM researcher, inventor of relational model, 1970 Boyce: Ray Boyce, IBM researcher, helped develop SQL in the 1970s Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

20 BCNF decomposition algorithm
Repeat choose A1, …, Am  B1, …, Bn that violates the BNCF condition //Heuristic: choose Bs as large as possible split R into R1(A1, …, Am, B1, …, Bn) and R2(A1, …, Am, [others]) continue with both R1 and R2 Until no more violations A’s Others B’s R1 R2 Matthew P. Johnson, OCL3, CISDD CUNY, June 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 Name SSN Mailing-address Phone Michael 123 NY Name SSN Mailing-address Michael 123 NY SSN PhoneNumber 123 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

22 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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. Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

23 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

24 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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: Studios(studio, president, pres-address) 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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

25 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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} Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

26 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 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) Name Office Residence Phone George Pres. WH 202-… 486-… Dick VP NO 307-… Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

28 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

29 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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” Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

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

31 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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? Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

32 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

33 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

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

35 Next topic: SQL Structured Query Language
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) Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

36 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

37 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Table name Attribute names “Tables” Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi Tuples or rows Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

38 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Simple SQL Query Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi SELECT * FROM Product WHERE category='Gadgets' PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 “selection” Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

39 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Simple SQL Query Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi SELECT PName, Price, Manufacturer FROM Product WHERE Price > 100 PName Price Manufacturer SingleTouch $149.99 Canon MultiTouch $203.99 Hitachi “selection” and “projection” Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

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

41 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

42 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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? Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

43 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
SQL e.g. Reps(ssn, name, etc.) Clients(ssn, name, rssn) Q: Who are George’s clients, in SQL? Conceptually: PClients.name(sReps.name=“George” and Reps.ssn=rssn(Reps x Clients)) Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

44 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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%' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

45 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

46 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

47 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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.: Names with spaces: create table bad table name (a int, b int); Reserved words as names: create table badfieldname(from int, b int); Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

48 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

49 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
More on single-quotes Dates with DATE: DATE ' ' Timestamps with TIMESTAMP: TIMESTAMP ' :00:00' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

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

51 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 DESC, pname ASC Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

52 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Ordering the Results SELECT Category FROM Product ORDER BY PName PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi ? Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

53 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Joins in SQL Connect two or more tables: PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi Product Company CName StockPrice Country GizmoWorks 25 USA Canon 65 Japan Hitachi 15 What is the connection between them? Matthew P. Johnson, OCL3, CISDD CUNY, June 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. Join between Product and Company SELECT PName, Price FROM Product, Company WHERE Manufacturer=CName AND Country='Japan' AND Price <= 200 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

55 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Joins in SQL Product Company PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi Cname StockPrice Country GizmoWorks 25 USA Canon 65 Japan Hitachi 15 SELECT PName, Price FROM Product, Company WHERE Manufacturer=CName AND Country='Japan' AND Price <= 200 PName Price SingleTouch $149.99 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

56 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

57 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Joins in SQL Product Company Name Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi Cname StockPrice Country GizmoWorks 25 USA Canon 65 Japan Hitachi 15 SELECT Country FROM Product, Company WHERE Manufacturer=CName AND Category='Gadgets' Country ?? What is the problem? What’s the solution? Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

58 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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' Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

59 Disambiguating Attributes
Sometimes two relations have the same attr: Person(pname, address, worksfor) Company(cname, address) Which 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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

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

61 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Product.name FROM Product AS Product WHERE Product.price > 100 Matthew P. Johnson, OCL3, CISDD CUNY, June 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 Matthew P. Johnson, OCL3, CISDD CUNY, June 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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

64 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

65 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
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 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005

66 Matthew P. Johnson, OCL3, CISDD CUNY, June 2005
Now lab 3 online Matthew P. Johnson, OCL3, CISDD CUNY, June 2005


Download ppt "OCL3 Oracle 10g: SQL & PL/SQL Session #3"

Similar presentations


Ads by Google