Lecture 2 (cont’d) & Lecture 3: Advanced SQL – Part I

Slides:



Advertisements
Similar presentations
1 Lecture 02: SQL. 2 Outline Data in SQL Simple Queries in SQL (6.1) Queries with more than one relation (6.2) Recomeded reading: Chapter 3, Simple Queries.
Advertisements

SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: SQL92, SQL2, SQL3. Vendors support.
Relational Algebra (end) SQL April 19 th, Complex Queries Product ( pid, name, price, category, maker-cid) Purchase (buyer-ssn, seller-ssn, store,
1 Lecture 12: SQL Friday, October 26, Outline Simple Queries in SQL (5.1) Queries with more than one relation (5.2) Subqueries (5.3) Duplicates.
1 Lecture 03: SQL Friday, January 7, Administrivia Have you logged in IISQLSRV yet ? HAVE YOU CHANGED YOUR PASSWORD ? Homework 1 is now posted.
Matthew P. Johnson, OCL1, CISDD CUNY, F20041 OCL1 Oracle 8i: SQL & PL/SQL Session #3 Matthew P. Johnson CISDD, CUNY Fall, 2004.
1 Lecture 02: Basic SQL. 2 Outline Data in SQL Simple Queries in SQL Queries with more than one relation Reading: Chapter 3, “Simple Queries” from SQL.
Correlated Queries SELECT title FROM Movie AS Old WHERE year < ANY (SELECT year FROM Movie WHERE title = Old.title); Movie (title, year, director, length)
1 Lecture 2: SQL Wednesday, January 7, Agenda Leftovers from Monday The relational model (very quick) SQL Homework #1 given out later this week.
1 Lecture 3: More SQL Friday, January 9, Agenda Homework #1 on the web site today. Sign up for the mailing list! Next Friday: –In class ‘activity’
Union, Intersection, Difference (SELECT name FROM Person WHERE City=“Seattle”) UNION (SELECT name FROM Person, Purchase WHERE buyer=name AND store=“The.
1 Information Systems Chapter 6 Database Queries.
Complex Queries (1) Product ( pname, price, category, maker)
One More Normal Form Consider the dependencies: Product Company Company, State Product Is it in BCNF?
CSE544: SQL Monday 3/27 and Wednesday 3/29, 2006.
Integrity Constraints An important functionality of a DBMS is to enable the specification of integrity constraints and to enforce them. Knowledge of integrity.
Lecture 3: Introduction to SQL September 29, 2014.
1. Midterm summary Types of data on the web: unstructured, semi- structured, structured Scale and uncertainty are key features Main goals are to model,
1 SQL cont.. 2 Outline Unions, intersections, differences (6.2.5, 6.4.2) Subqueries (6.3) Aggregations (6.4.3 – 6.4.6) Hint for reading the textbook:
IM433-Industrial Data Systems Management Lecture 5: SQL.
More SQL: Complex Queries, Triggers, Views, and Schema Modification UMM AL QURA UNIVERSITY College of Computer Dr. Ali Al Najjar 1.
Lectures 2&3: Introduction to SQL. Lecture 2: SQL Part I Lecture 2.
SQL SQL Review. SQL Introduction Standard language for querying and manipulating data Structured Query Language Many standards out there: ANSI SQL, SQL92.
1 Introduction to Database Systems CSE 444 Lecture 02: SQL September 28, 2007.
1 Lecture 02: SQL Friday, September 30, Administrivia Homework 1 is out. Due: Wed., Oct. 12 Did you login on IISQLSRV ? Did you change your password.
COMP 430 Intro. to Database Systems Multi-table SQL Slides use ideas from Chris Ré and Chris Jermaine. Get clickers today!
Lectures 2&3: Introduction to SQL. Lecture 2: SQL Part I Lecture 2.
Hassan Tariq INTRODUCTION TO SQL What is SQL? –When a user wants to get some information from a database file, he can issue a query. – A query is a user–request.
The Relational Data Model Database Model (ODL, E/R) Relational Schema Physical storage ODL definitions Diagrams (E/R) Tables: row names: attributes rows:
SQL.
Lectures 2&3: Introduction to SQL
Relational Algebra at a Glance
Lecture 8: Relational Algebra
Database Systems Subqueries, Aggregation
Server-Side Application and Data Management IT IS 3105 (FALL 2009)
Chapter 2: Intro to Relational Model
Programming with Android:
The Best Of Collection (Master Tracks), Vol. 1
Monday 3/27 and Wednesday 3/29, 2006
Class 2 Relational Data Languages
CS 405G: Introduction to Database Systems
Cse 344 January 12th –joins.
March 30th – intro to joins
Cse 344 January 10th –joins.
Introduction to SQL Wenhao Zhang October 5, 2018.
CSE544 SQL Wednesday, March 31, 2004.
Building a Database Application
SQL Introduction Standard language for querying and manipulating data
Lectures 3: Introduction to SQL Part II
Lectures 3: Introduction to SQL 2
Introduction to Database Systems CSE 444 Lecture 02: SQL
Lectures 5: Introduction to SQL 4
Where are we? Until now: Modeling databases (ODL, E/R): all about the schema Now: Manipulating the data: queries, updates, SQL Then: looking inside -
Lecture 4: SQL Thursday, January 11, 2001.
Chapter 2: Intro to Relational Model
Integrity Constraints
Lecture 3 Monday, April 8, 2002.
Lecture 5: The Relational Data Model
CS639: Data Management for Data Science
Lecture 06: SQL Monday, October 11, 2004.
Chapter 2: Intro to Relational Model
Lecture 03: SQL Friday, October 3, 2003.
Terminology Product Attribute names Name Price Category Manufacturer
Lecture 3: Relational Algebra and SQL
Lectures 2: Introduction to SQL 1
Syllabus Introduction Website Management Systems
Presentation transcript:

Lecture 2 (cont’d) & Lecture 3: Advanced SQL – Part I

Announcements! You should be Jupyter notebook Ninjas! Welcome Ting! Lecture 2 Announcements! You should be Jupyter notebook Ninjas! Welcome Ting! New TA-Office hours on website (room to be announced) Project groups finalized! If you do not have a group talk with us ASAP! Problem Set #1 released

Lecture 2 (cont’d) & Lecture 3: Advanced SQL – Part I

Today’s Lecture Recap from Lecture 2 & Multi-table queries ACTIVITY: Multi-table queries Set operators & nested queries ACTIVITY: Set operator subtleties

Lecture 2 (cont’d): Introduction to SQL

Lecture 2 > Section 3 3. Multi-table queries

What you will learn about in this section Lecture 2 > Section 3 What you will learn about in this section Primary keys and Foreign keys recap Joins: SQL semantics ACTIVITY: Multi-table queries

What is a foreign key vs. a key here? Lecture 2 > Section 3 > Foreign Keys Keys and Foreign Keys Company A key is a minimal subset of attributes that acts as a unique identifier for tuples in a relation CName StockPrice Country GizmoWorks 25 USA Canon 65 Japan Hitachi 15 What is a foreign key vs. a key here? Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi If two tuples agree on the values of the key, then they must be the same tuple!

What is a foreign key vs. a key here? Lecture 2 > Section 3 > Foreign Keys Keys and Foreign Keys Company  A foreign key is an attribute (or collection of attributes) in one table that uniquely identifies a row of another table. CName StockPrice Country GizmoWorks 25 USA Canon 65 Japan Hitachi 15 What is a foreign key vs. a key here? Product PName Price Category Manufacturer Gizmo $19.99 Gadgets GizmoWorks Powergizmo $29.99 SingleTouch $149.99 Photography Canon MultiTouch $203.99 Household Hitachi The foreign key is defined in a second table, but it refers to the primary key in the first table.

Declaring Foreign Keys Lecture 2 > Section 3 > Foreign Keys Declaring Foreign Keys Company(CName: string, StockPrice: float, Country: string) Product(PName: string, Price: float, Category: string, Manufacturer: string) CREATE TABLE Product( pname VARCHAR(100), price FLOAT, category VARCHAR(100), manufacturer VARCHAR(100), PRIMARY KEY (pname, manufacturer), FOREIGN KEY (manufacturer) REFERENCES Company(cname) )

Declaring Foreign Keys Lecture 2 > Section 3 > Foreign Keys Declaring Foreign Keys CREATE TABLE Company( cname VARCHAR(100), stockprice FLOAT, country VARCHAR(100), PRIMARY KEY (cname), FOREIGN KEY (cname) REFERENCES Product(pname, manufacturer) ) CREATE TABLE Product( pname VARCHAR(100), price FLOAT, category VARCHAR(100), manufacturer VARCHAR(100), PRIMARY KEY (pname, manufacturer) Can we do this? What would be the problem?

Declaring Foreign Keys Lecture 2 > Section 3 > Foreign Keys Declaring Foreign Keys CREATE TABLE Company( cname VARCHAR(100), stockprice FLOAT, country VARCHAR(100), PRIMARY KEY (cname), FOREIGN KEY (cname) REFERENCES Product(pname, manufacturer) ) CREATE TABLE Product( pname VARCHAR(100), price FLOAT, category VARCHAR(100), manufacturer VARCHAR(100), PRIMARY KEY (pname, manufacturer) Can we do this? What would be the problem? We can have products without a registered company! Bad design! We’ll see more next week.

Declaring Foreign Keys Lecture 2 > Section 3 > Foreign Keys Declaring Foreign Keys CREATE TABLE Company( cname VARCHAR(100), stockprice FLOAT, country VARCHAR(100), PRIMARY KEY (cname), FOREIGN KEY (cname) REFERENCES Product(pname, manufacturer) ) CREATE TABLE Product( pname VARCHAR(100), price FLOAT, category VARCHAR(100), manufacturer VARCHAR(100), PRIMARY KEY (pname, manufacturer) If the primary key is a set of columns (a composite key), then the foreign key also must be a set of columns that corresponds to the composite key.

Joins Product Company Cname Stock Country GWorks 25 USA Canon 65 Japan Lecture 2 > Section 3 > Joins: Basics Joins Product Company PName Price Category Manuf Gizmo $19 Gadgets GWorks Powergizmo $29 SingleTouch $149 Photography Canon MultiTouch $203 Household Hitachi Cname Stock Country GWorks 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

An example of SQL semantics Lecture 2 > Section 3 > Joins: semantics An example of SQL semantics Output SELECT R.A FROM R, S WHERE R.A = S.B A 3 A 1 3 A B C 1 2 3 4 5 Cross Product Apply Projection Apply Selections / Conditions B C 2 3 4 5 A B C 3 4 5

Note the semantics of a join Lecture 2 > Section 3 > Joins: semantics Note the semantics of a join SELECT R.A FROM R, S WHERE R.A = S.B Recall: Cross product (A X B) is the set of all unique tuples in A,B Ex: {a,b,c} X {1,2} = {(a,1), (a,2), (b,1), (b,2), (c,1), (c,2)} Take cross product: 𝑋=𝑅×𝑆 Apply selections / conditions: 𝑌= 𝑟,𝑠 ∈𝑋 𝑟.𝐴==𝑟.𝐵} Apply projections to get final output: 𝑍=(𝑦.𝐴,) 𝑓𝑜𝑟 𝑦∈𝑌 = Filtering! = Returning only some attributes Remembering this order is critical to understanding the output of certain queries (see later on…)

Note: we say “semantics” not “execution order” Lecture 2 > Section 3 > Joins: semantics Note: we say “semantics” not “execution order” The preceding slides show what a join means Not actually how the DBMS executes it under the covers

Lecture 2 > Section 3 > Joins: semantics Lecture 2 > Section 3 > ACTIVITY A Subtlety about Joins 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’

A subtlety about Joins Product Company Country ? What is the problem ? Lecture 2 > Section 3 > ACTIVITY Lecture 2 > Section 3 > Joins: semantics A subtlety about Joins Product Company PName Price Category Manuf Gizmo $19 Gadgets GWorks Powergizmo $29 SingleTouch $149 Photography Canon MultiTouch $203 Household Hitachi Cname Stock Country GWorks 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 ?

ACTIVITY: Lecture-2-3.ipynb Lecture 2 > Section 3 > ACTIVITY ACTIVITY: Lecture-2-3.ipynb

An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T Lecture 2 > Section 3 > ACTIVITY An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A What does it compute?

An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T Lecture 2 > Section 3 > ACTIVITY An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A S T R But what if S = f? Computes R Ç (S È T) Go back to the semantics!

An Unintuitive Query Recall the semantics! Lecture 2 > Section 3 > ACTIVITY An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A Recall the semantics! Take cross-product Apply selections / conditions Apply projection If S = {}, then the cross product of R, S, T = {}, and the query result = {}! Must consider semantics here. Are there more explicit way to do set operations like this?

Lecture 3: Advanced SQL – Part I

1. Set Operators & Nested Queries Lecture 3 > Section 1 1. Set Operators & Nested Queries

What you will learn about in this section Lecture 3 > Section 1 What you will learn about in this section Multiset operators in SQL Nested queries ACTIVITY: Set operator subtleties

An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T Lecture 3 > Section 1 > Set Operators An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A What does it compute? S T R But what if S = f? Computes R Ç (S È T) Go back to the semantics!

An Unintuitive Query Recall the semantics! Lecture 3 > Section 1 > Set Operators An Unintuitive Query SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A Recall the semantics! Take cross-product Apply selections / conditions Apply projection If S = {}, then the cross product of R, S, T = {}, and the query result = {}! Must consider semantics here. Are there more explicit way to do set operations like this?

What does this look like in Python? Lecture 3 > Section 1 > Set Operators What does this look like in Python? R Ç (S È T) S T R SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A Semantics: Take cross-product Apply selections / conditions Apply projection Joins / cross-products are just nested for loops (in simplest implementation)! If-then statements!

What does this look like in Python? Lecture 3 > Section 1 > Set Operators What does this look like in Python? R Ç (S È T) S T R SELECT DISTINCT R.A FROM R, S, T WHERE R.A=S.A OR R.A=T.A output = {} for r in R: for s in S: for t in T: if r[‘A’] == s[‘A’] or r[‘A’] == t[‘A’]: output.add(r[‘A’]) return list(output) Can you see now what happens if S = []?

Lecture 3 > Section 1 > Set Operators Multiset Operations

Recall Multisets 𝝀 𝑿 = “Count of tuple in X” Lecture 3 > Section 1 > Set Operators Recall Multisets 𝝀 𝑿 = “Count of tuple in X” (Items not listed have implicit count 0) Multiset X Tuple (1, a) (1, b) (2, c) (1, d) Multiset X Tuple 𝝀(𝑿) (1, a) 2 (1, b) 1 (2, c) 3 (1, d) Equivalent Representations of a Multiset Note: In a set all counts are {0,1}.

Generalizing Set Operations to Multiset Operations Lecture 3 > Section 1 > Set Operators Generalizing Set Operations to Multiset Operations Multiset X Multiset Y Multiset Z Tuple 𝝀(𝑿) (1, a) 2 (1, b) (2, c) 3 (1, d) Tuple 𝝀(𝒀) (1, a) 5 (1, b) 1 (2, c) 2 (1, d) Tuple 𝝀(𝒁) (1, a) 2 (1, b) (2, c) (1, d) ∩ = For sets, this is intersection 𝝀 𝒁 =𝒎𝒊𝒏(𝝀 𝑿 ,𝝀 𝒀 )

Generalizing Set Operations to Multiset Operations Lecture 3 > Section 1 > Set Operators Generalizing Set Operations to Multiset Operations Multiset X Multiset Y Multiset Z Tuple 𝝀(𝑿) (1, a) 2 (1, b) (2, c) 3 (1, d) Tuple 𝝀(𝒀) (1, a) 5 (1, b) 1 (2, c) 2 (1, d) Tuple 𝝀(𝒁) (1, a) 5 (1, b) 1 (2, c) 3 (1, d) 2 ∪ = For sets, this is union 𝝀 𝒁 =𝒎𝒂𝒙(𝝀 𝑿 ,𝝀 𝒀 )

Multiset Operations in SQL Lecture 3 > Section 1 > Set Operators Multiset Operations in SQL

Explicit Set Operators: INTERSECT Lecture 3 > Section 1 > Set Operators Explicit Set Operators: INTERSECT SELECT R.A FROM R, S WHERE R.A=S.A INTERSECT FROM R, T WHERE R.A=T.A 𝑟.𝐴 𝑟.𝐴=𝑠.𝐴 ∩ 𝑟.𝐴 𝑟.𝐴=𝑡.𝐴} Q1 Q2

UNION Why aren’t there duplicates? What if we want duplicates? Lecture 3 > Section 1 > Set Operators UNION SELECT R.A FROM R, S WHERE R.A=S.A UNION SELECT R.A FROM R, T WHERE R.A=T.A 𝑟.𝐴 𝑟.𝐴=𝑠.𝐴 ∪ 𝑟.𝐴 𝑟.𝐴=𝑡.𝐴} Q1 Q2 Why aren’t there duplicates? What if we want duplicates?

UNION ALL ALL indicates the Multiset disjoint union operation Lecture 3 > Section 1 > Set Operators UNION ALL SELECT R.A FROM R, S WHERE R.A=S.A UNION ALL SELECT R.A FROM R, T WHERE R.A=T.A 𝑟.𝐴 𝑟.𝐴=𝑠.𝐴 ∪ 𝑟.𝐴 𝑟.𝐴=𝑡.𝐴} Q1 Q2 ALL indicates the Multiset disjoint union operation

Generalizing Set Operations to Multiset Operations Lecture 3 > Section 1 > Set Operators Generalizing Set Operations to Multiset Operations Multiset X Multiset Y Multiset Z Tuple 𝝀(𝑿) (1, a) 2 (1, b) (2, c) 3 (1, d) Tuple 𝝀(𝒀) (1, a) 5 (1, b) 1 (2, c) 2 (1, d) Tuple 𝝀(𝒁) (1, a) 7 (1, b) 1 (2, c) 5 (1, d) 2 = For sets, this is disjoint union 𝝀 𝒁 = 𝝀 𝑿 + 𝝀 𝒀

For elements that are in X Lecture 3 > Section 1 > Set Operators EXCEPT SELECT R.A FROM R, S WHERE R.A=S.A EXCEPT FROM R, T WHERE R.A=T.A 𝑟.𝐴 𝑟.𝐴=𝑠.𝐴 \{𝑟.𝐴|𝑟.𝐴=𝑡.𝐴} Q1 Q2 What is the multiset version? 𝝀 𝒁 = 𝝀 𝑿 − 𝝀 𝒀 For elements that are in X

INTERSECT: Still some subtle problems… Lecture 3 > Section 1 > Set Operators INTERSECT: Still some subtle problems… Company(name, hq_city) Product(pname, maker, factory_loc) SELECT hq_city FROM Company, Product WHERE maker = name AND factory_loc = ‘US’ INTERSECT AND factory_loc = ‘China’ “Headquarters of companies which make gizmos in US AND China” What if two companies have HQ in US: BUT one has factory in China (but not US) and vice versa? What goes wrong?

INTERSECT: Remember the semantics! Lecture 3 > Section 1 > Set Operators INTERSECT: Remember the semantics! Example: C JOIN P on maker = name Company(name, hq_city) AS C Product(pname, maker, factory_loc) AS P C.name C.hq_city P.pname P.maker P.factory_loc X Co. Seattle X U.S. Y Inc. China SELECT hq_city FROM Company, Product WHERE maker = name AND factory_loc=‘US’ INTERSECT AND factory_loc=‘China’

INTERSECT: Remember the semantics! Lecture 3 > Section 1 > Set Operators INTERSECT: Remember the semantics! Example: C JOIN P on maker = name Company(name, hq_city) AS C Product(pname, maker, factory_loc) AS P C.name C.hq_city P.pname P.maker P.factory_loc X Co. Seattle X U.S. Y Inc. China SELECT hq_city FROM Company, Product WHERE maker = name AND factory_loc=‘US’ INTERSECT AND factory_loc=‘China’ X Co has a factory in the US (but not China) Y Inc. has a factor in China (but not US) But Seattle is returned by the query! We did the INTERSECT on the wrong attributes!

One Solution: Nested Queries Lecture 3 > Section 1 > Nested Queries One Solution: Nested Queries Company(name, hq_city) Product(pname, maker, factory_loc) “Headquarters of companies which make gizmos in US AND China” SELECT DISTINCT hq_city FROM Company, Product WHERE maker = name AND name IN ( SELECT maker FROM Product WHERE factory_loc = ‘US’) WHERE factory_loc = ‘China’) Note: If we hadn’t used DISTINCT here, how many copies of each hq_city would have been returned?

High-level note on nested queries Lecture 3 > Section 1 > Nested Queries High-level note on nested queries We can do nested queries because SQL is compositional: Everything (inputs / outputs) is represented as multisets- the output of one query can thus be used as the input to another (nesting)! This is extremely powerful!

Nested queries: Sub-queries Returning Relations Lecture 3 > Section 1 > Nested Queries Nested queries: Sub-queries Returning Relations Another example: Company(name, city) Product(name, maker) Purchase(id, product, buyer) SELECT c.city FROM Company c WHERE c.name IN ( SELECT pr.maker FROM Purchase p, Product pr WHERE p.product = pr.name AND p.buyer = ‘Joe Blow‘) “Cities where one can find companies that manufacture products bought by Joe Blow”

Nested Queries Beware of duplicates! Is this query equivalent? Lecture 3 > Section 1 > Nested Queries Nested Queries Is this query equivalent? SELECT c.city FROM Company c, Product pr, Purchase p WHERE c.name = pr.maker AND pr.name = p.product AND p.buyer = ‘Joe Blow’ Beware of duplicates!

Now they are equivalent Lecture 3 > Section 1 > Nested Queries Nested Queries SELECT DISTINCT c.city FROM Company c, Product pr, Purchase p WHERE c.name = pr.maker AND pr.name = p.product AND p.buyer = ‘Joe Blow’ SELECT DISTINCT c.city FROM Company c WHERE c.name IN ( SELECT pr.maker FROM Purchase p, Product pr WHERE p.product = pr.name AND p.buyer = ‘Joe Blow‘) Now they are equivalent

Subqueries Returning Relations Lecture 3 > Section 1 > Nested Queries Subqueries Returning Relations ANY and ALL not supported by SQLite. You can also use operations of the form: s > ALL R s < ANY R EXISTS R Ex: Product(name, price, category, maker) SELECT name FROM Product WHERE price > ALL( SELECT price WHERE maker = ‘Gizmo-Works’) Find products that are more expensive than all those produced by “Gizmo-Works”

Subqueries Returning Relations Lecture 3 > Section 1 > Nested Queries Subqueries Returning Relations You can also use operations of the form: s > ALL R s < ANY R EXISTS R Ex: Product(name, price, category, maker) Find ‘copycat’ products, i.e. products made by competitors with the same names as products made by “Gizmo-Works” SELECT p1.name FROM Product p1 WHERE p1.maker = ‘Gizmo-Works’ AND EXISTS( SELECT p2.name FROM Product p2 WHERE p2.maker <> ‘Gizmo-Works’ AND p1.name = p2.name) <> means !=

Nested queries as alternatives to INTERSECT and EXCEPT Lecture 3 > Section 1 > Nested Queries Nested queries as alternatives to INTERSECT and EXCEPT INTERSECT and EXCEPT not in some DBMSs! (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) If R, S have no duplicates, then can write without sub-queries (HOW?) (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)

Correlated Queries Movie(title, year, director, length) Lecture 3 > Section 1 > Nested Queries Correlated Queries Movie(title, year, director, length) Find movies whose title appears more than once. SELECT DISTINCT title FROM Movie AS m WHERE year <> ANY( SELECT year FROM Movie WHERE title = m.title) Note the scoping of the variables! Note also: this can still be expressed as single SFW query…

Complex Correlated Query Lecture 3 > Section 1 > Nested Queries Complex Correlated Query Product(name, price, category, maker, year) SELECT DISTINCT x.name, x.maker FROM Product AS x WHERE x.price > ALL( SELECT y.price FROM Product AS y WHERE x.maker = y.maker AND y.year < 1972) Find products (and their manufacturers) that are more expensive than all products made by the same manufacturer before 1972 Can be very powerful (also much harder to optimize)

Lecture 3 > Section 1 > ACTIVITY Activity-3-1.ipynb

Lecture 3 > Section 1 > Summary Basic SQL Summary SQL provides a high-level declarative language for manipulating data (DML) The workhorse is the SFW block Set operators are powerful but have some subtleties Powerful, nested queries also allowed.