Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Lecture 4: Advanced SQL. 2 INTERSECT and EXCEPT: (missing from MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM.

Similar presentations


Presentation on theme: "1 Lecture 4: Advanced SQL. 2 INTERSECT and EXCEPT: (missing from MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM."— Presentation transcript:

1 1 Lecture 4: Advanced SQL

2 2 INTERSECT and EXCEPT: (missing from MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) SELECT R.A, R.B FROM R WHERE EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) SELECT R.A, R.B FROM R WHERE EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) (SELECT R.A, R.B FROM R) EXCEPT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM R) EXCEPT (SELECT S.A, S.B FROM S) SELECT R.A, R.B FROM R WHERE NOT EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B) SELECT R.A, R.B FROM R WHERE NOT EXISTS(SELECT * FROM S WHERE R.A=S.A and R.B=S.B)

3 3 Null Values NULL in SQL is used as a placeholder for a missing or unknown values By default, a table column can hold a NULL value FirstLastBirth_DateImmigration_Date OlaHansen1989/09/011992/08/31 HanShin-Cho1987/07/17NULL JoeNULL1990/04/211999/11/23

4 4 Use of Null Values If x=Null then 4*(3-x)/7 is still NULL If x=Null then x=Joe is UNKNOWN In SQL there are three boolean values: FALSE = 0 UNKNOWN = 0.5 TRUE = 1

5 5 Three-Valued Logic C1 AND C2 = min(C1, C2) C1 OR C2 = max(C1, C2) NOT C1 = 1 – C1 Rule in SQL: include only tuples that yield TRUE 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 height=NULL weight=200

6 6 Three-Valued Logic Unexpected behavior: Some Persons are not included ! SELECT * FROM Person WHERE age = 25 SELECT * FROM Person WHERE age = 25

7 7 Working with 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

8 8 Explicit Joins Explicit joins in SQL: Product(name, category) Purchase(prodName, store) Same as: But Products that never sold will be lost ! SELECT Product.name, Purchase.store FROM Product JOIN Purchase ON Product.name = Purchase.prodName SELECT Product.name, Purchase.store FROM Product JOIN Purchase ON Product.name = Purchase.prodName SELECT Product.name, Purchase.store FROM Product, Purchase WHERE Product.name = Purchase.prodName SELECT Product.name, Purchase.store FROM Product, Purchase WHERE Product.name = Purchase.prodName

9 9 Left Outer Joins Left outer joins in SQL: Product(name, category) Purchase(prodName, store) SELECT Product.name, Purchase.store FROM Product LEFT OUTER JOIN Purchase ON Product.name = Purchase.prodName SELECT Product.name, Purchase.store FROM Product LEFT OUTER JOIN Purchase ON Product.name = Purchase.prodName

10 10 NameCategory Gizmogadget CameraPhoto OneClickPhoto ProdNameStore GizmoWiz CameraRitz CameraWiz NameStore GizmoWiz CameraRitz CameraWiz OneClickNULL ProductPurchase

11 11 Types of Joins - Summary Inner join: same as Join, implicit Join Left outer join: –Same as Left join –Include the left tuple even if theres no match Right outer join: –Same as right join –Include the right tuple even if theres no match Full outer join: –Missing from MySQL (but can be emulated! how?) –Include the both left and right tuples even if theres no match

12 12 Modifying the Database Three kinds of modifications Insertions Deletions Updates Sometimes they are all called updates

13 13 Insertions General form: Missing attributes NULL. May drop attribute names if give them in order. INSERT INTO R(A1,…., An) VALUES (v1,…., vn) INSERT INTO Purchase(buyer, seller, product, store) VALUES (Joe, Fred, wakeup-clock-espresso-machine, The Sharper Image) INSERT INTO Purchase(buyer, seller, product, store) VALUES (Joe, Fred, wakeup-clock-espresso-machine, The Sharper Image) Example: Insert a new purchase to the database:

14 14 Insertions INSERT INTO PRODUCT(name) SELECT DISTINCT Purchase.product FROM Purchase WHERE Purchase.date > 10/26/01 INSERT INTO PRODUCT(name) SELECT DISTINCT Purchase.product FROM Purchase WHERE Purchase.date > 10/26/01 The query replaces the VALUES keyword. Here we insert many tuples into PRODUCT The number of columns must be identical

15 15 Insertion: an Example prodName is foreign key in Product.name Suppose database got corrupted and we need to fix it: namelistPricecategory gizmo100gadgets prodNamebuyerNameprice cameraJohn200 gizmoSmith80 cameraSmith225 Task: insert in Product all prodNames from Purchase Product Product(name, listPrice, category) Purchase(prodName, buyerName, price) Product(name, listPrice, category) Purchase(prodName, buyerName, price) Purchase

16 16 Insertion: an Example INSERT INTO Product(name) SELECT DISTINCT prodName FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) INSERT INTO Product(name) SELECT DISTINCT prodName FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) namelistPricecategory gizmo100Gadgets camera--

17 17 Insertion: an Example INSERT INTO Product(name, listPrice) SELECT DISTINCT prodName, price FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) INSERT INTO Product(name, listPrice) SELECT DISTINCT prodName, price FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product) namelistPricecategory gizmo100Gadgets camera200- camera ??225 ??- ERROR!

18 18 Deletions DELETE FROM PURCHASE WHERE seller = Joe AND product = Brooklyn Bridge DELETE FROM PURCHASE WHERE seller = Joe AND product = Brooklyn Bridge Factoid about SQL:there is no way to delete only x occurrences of a tuple that appears x+k times in a relation. Example:

19 19 Updates UPDATE Product SET listPrice= listPrice/2 WHERE Product.name IN (SELECT product FROM Purchase WHERE Date =Oct, 25, 1999); UPDATE Product SET listPrice= listPrice/2 WHERE Product.name IN (SELECT product FROM Purchase WHERE Date =Oct, 25, 1999); Example:

20 20 Updates Using Exists UPDATE Product SET listPrice = (SELECT AVG(price) FROM Purchase WHERE prodName=name) WHERE EXISTS (SELECT * FROM Purchase WHERE prodName=name); UPDATE Product SET listPrice = (SELECT AVG(price) FROM Purchase WHERE prodName=name) WHERE EXISTS (SELECT * FROM Purchase WHERE prodName=name); Example:

21 Table Modifications - Summary 21 INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...) INSERT INTO table_name (column1, column2,...) SELECT … DELETE FROM table_name WHERE cond DELETE FROM table_name WHERE cond UPDATE table_name SET column1=expr1, column2=expr2,... WHERE cond


Download ppt "1 Lecture 4: Advanced SQL. 2 INTERSECT and EXCEPT: (missing from MySQL) (SELECT R.A, R.B FROM R) INTERSECT (SELECT S.A, S.B FROM S) (SELECT R.A, R.B FROM."

Similar presentations


Ads by Google