Top Banner
1 Lecture 05: SQL Wednesday, October 8, 2003
34

1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

1

Lecture 05: SQL

Wednesday, October 8, 2003

Page 2: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

2

Outline

• Outer joins (6.3.8)

• Database Modifications (6.5)

• Defining Relation Schema in SQL (6.6)

• Indexes

• Defining Views (6.7)

• Constraints (Chapter 7)

Page 3: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

3

OuterjoinsExplicit joins in SQL:

Product(name, category) Purchase(prodName, store)

Same as:

But Products that never sold will be lost !

SELECT Product.name, Purchase.storeFROM Product JOIN Purchase ON Product.name = Purchase.prodName

SELECT Product.name, Purchase.storeFROM Product JOIN Purchase ON Product.name = Purchase.prodName

SELECT Product.name, Purchase.storeFROM Product, PurchaseWHERE Product.name = Purchase.prodName

SELECT Product.name, Purchase.storeFROM Product, PurchaseWHERE Product.name = Purchase.prodName

Page 4: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

4

Outerjoins

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

Page 5: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

5

Name Category

Gizmo gadget

Camera Photo

OneClick Photo

ProdName Store

Gizmo Wiz

Camera Ritz

Camera Wiz

Name Store

Gizmo Wiz

Camera Ritz

Camera Wiz

OneClick NULL

Product Purchase

Page 6: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

6

Application

Compute, for each product, the total number of sales in ‘September’Product(name, category)

Purchase(prodName, month, store)

SELECT Product.name, count(*) FROM Product, Purchase WHERE Product.name = Purchase.prodName and Purchase.month = ‘September’ GROUP BY Product.name

SELECT Product.name, count(*) FROM Product, Purchase WHERE Product.name = Purchase.prodName and Purchase.month = ‘September’ GROUP BY Product.name

What’s wrong ?

Page 7: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

7

Application

Compute, for each product, the total number of sales in ‘September’Product(name, category)

Purchase(prodName, month, store)

SELECT Product.name, count(*) FROM Product LEFT OUTER JOIN Purchase ON Product.name = Purchase.prodName and Purchase.month = ‘September’ GROUP BY Product.name

SELECT Product.name, count(*) FROM Product LEFT OUTER JOIN Purchase ON Product.name = Purchase.prodName and Purchase.month = ‘September’ GROUP BY Product.name

Now we also get the products who sold in 0 quantity

Page 8: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

8

Outer Joins

• Left outer join:– Include the left tuple even if there’s no match

• Right outer join:– Include the right tuple even if there’s no match

• Full outer join:– Include the both left and right tuples even if there’s no

match

Page 9: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

9

Modifying the Database

Three kinds of modifications

• Insertions

• Deletions

• Updates

Sometimes they are all called “updates”

Page 10: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

10

InsertionsGeneral form:

Missing attribute NULL.May drop attribute names if give them in order.

INSERT INTO R(A1,…., An) VALUES (v1,…., vn) 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:

Page 11: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

11

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

Page 12: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

12

Insertion: an Example

prodName is foreign key in Product.name

Suppose database got corrupted and we need to fix it:

name listPrice category

gizmo 100 gadgets

prodName buyerName price

camera John 200

gizmo Smith 80

camera Smith 225

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

Page 13: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

13

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)

name listPrice category

gizmo 100 Gadgets

camera - -

Page 14: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

14

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)

name listPrice category

gizmo 100 Gadgets

camera 200 -

camera ?? 225 ?? - Depends on the implementation

Page 15: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

15

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 a single

occurrence of a tuple that appears twice

in a relation.

Example:

Page 16: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

16

Updates

UPDATE PRODUCTSET price = price/2WHERE Product.name IN (SELECT product FROM Purchase WHERE Date =‘Oct, 25, 1999’);

UPDATE PRODUCTSET price = price/2WHERE Product.name IN (SELECT product FROM Purchase WHERE Date =‘Oct, 25, 1999’);

Example:

Page 17: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

17

Data Definition in SQLSo far we have see the Data Manipulation Language, DMLNext: Data Definition Language (DDL)

Data types: Defines the types.

Data definition: defining the schema.

• Create tables• Delete tables• Modify table schema

Indexes: to improve performance

Page 18: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

18

Data Types in SQL

• Characters: – CHAR(20) -- fixed length– VARCHAR(40) -- variable length

• Numbers:– INT, REAL plus variations

• Times and dates: – DATE, DATETIME (SQL Server only)

• To reuse domains:CREATE DOMAIN address AS VARCHAR(55)

Page 19: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

19

Creating Tables

CREATE TABLE Person(

name VARCHAR(30), social-security-number INT, age SHORTINT, city VARCHAR(30), gender BIT(1), Birthdate DATE

);

CREATE TABLE Person(

name VARCHAR(30), social-security-number INT, age SHORTINT, city VARCHAR(30), gender BIT(1), Birthdate DATE

);

Example:

Page 20: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

20

Deleting or Modifying a TableDeleting:

ALTER TABLE Person ADD phone CHAR(16);

ALTER TABLE Person DROP age;

ALTER TABLE Person ADD phone CHAR(16);

ALTER TABLE Person DROP age;

Altering: (adding or removing an attribute).

What happens when you make changes to the schema?

Example:

DROP Person; DROP Person; Example: Exercise with care !!

Page 21: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

21

Default Values

Specifying default values:

CREATE TABLE Person( name VARCHAR(30), social-security-number INT, age SHORTINT DEFAULT 100, city VARCHAR(30) DEFAULT ‘Seattle’, gender CHAR(1) DEFAULT ‘?’, Birthdate DATE

CREATE TABLE Person( name VARCHAR(30), social-security-number INT, age SHORTINT DEFAULT 100, city VARCHAR(30) DEFAULT ‘Seattle’, gender CHAR(1) DEFAULT ‘?’, Birthdate DATE

The default of defaults: NULL

Page 22: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

22

IndexesREALLY important to speed up query processing time.

Suppose we have a relation

Person (name, age, city)

Sequential scan of the file Person may take long

SELECT *FROM PersonWHERE name = “Smith”

SELECT *FROM PersonWHERE name = “Smith”

Page 23: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

23

• Create an index on name:

• B+ trees have fan-out of 100s: max 4 levels !• Will discuss in the second half of this course

Indexes

Adam Betty Charles …. Smith ….

Page 24: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

24

Creating Indexes

CREATE INDEX nameIndex ON Person(name)CREATE INDEX nameIndex ON Person(name)

Syntax:

Page 25: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

25

Creating Indexes

Indexes can be useful in range queries too:

B+ trees help in:

Why not create indexes on everything?

CREATE INDEX ageIndex ON Person (age)CREATE INDEX ageIndex ON Person (age)

SELECT * FROM Person WHERE age > 25 AND age < 28

SELECT * FROM Person WHERE age > 25 AND age < 28

Page 26: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

26

Creating IndexesIndexes can be created on more than one attribute:

SELECT * FROM Person WHERE age = 55 AND city = “Seattle”

SELECT * FROM Person WHERE age = 55 AND city = “Seattle”

Helps in:

SELECT * FROM Person WHERE city = “Seattle”

SELECT * FROM Person WHERE city = “Seattle”

But not in:

CREATE INDEX doubleindex ON Person (age, city)

CREATE INDEX doubleindex ON Person (age, city)

Example:

SELECT * FROM Person WHERE age = 55

SELECT * FROM Person WHERE age = 55

and even in:

Page 27: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

27

The Index Selection Problem

• We are given a workload = a set of SQL queries plus how often they run

• What indexes should we build to speed up the workload ?

• FROM/WHERE clauses favor an index• INSERT/UPDATE clauses discourage an index• Index selection = normally done by people,

recently done automatically (SQL Server)

Page 28: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

28

Defining ViewsViews are relations, except that they are not physically stored.

For presenting different information to different users

Employee(ssn, name, department, project, salary)

Payroll has access to Employee, others only to Developers

CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = “Development”

CREATE VIEW Developers AS SELECT name, project FROM Employee WHERE department = “Development”

Page 29: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

29

Person(name, city)Purchase(buyer, seller, product, store)Product(name, maker, category)

We have a new virtual table:Seattle-view(buyer, seller, product, store)

CREATE VIEW Seattle-view AS

SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = “Seattle” AND Person.name = Purchase.buyer

CREATE VIEW Seattle-view AS

SELECT buyer, seller, product, store FROM Person, Purchase WHERE Person.city = “Seattle” AND Person.name = Purchase.buyer

Example

Page 30: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

30

SELECT name, storeFROM Seattle-view, ProductWHERE Seattle-view.product = Product.name AND Product.category = “shoes”

SELECT name, storeFROM Seattle-view, ProductWHERE Seattle-view.product = Product.name AND Product.category = “shoes”

We can later use the view:

Page 31: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

31

What Happens When We Query a View ?

SELECT name, Seattle-view.store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = “shoes”

SELECT name, Seattle-view.store FROM Seattle-view, Product WHERE Seattle-view.product = Product.name AND Product.category = “shoes”

SELECT name, Purchase.storeFROM Person, Purchase, ProductWHERE Person.city = “Seattle” AND Person.name = Purchase.buyer AND Purchase.poduct = Product.name AND Product.category = “shoes”

SELECT name, Purchase.storeFROM Person, Purchase, ProductWHERE Person.city = “Seattle” AND Person.name = Purchase.buyer AND Purchase.poduct = Product.name AND Product.category = “shoes”

Page 32: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

32

Types of Views

• Virtual views:– Used in databases– Computed only on-demand – slow at runtime– Always up to date

• Materialized views– Used in data warehouses– Pre-computed offline – fast at runtime– May have stale data

Page 33: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

33

Updating ViewsHow can I insert a tuple into a table that doesn’t exist?

Employee(SSN, name, department, managerSSN, salary)

CREATE VIEW Developers AS SELECT SSN, name FROM Employee WHERE department = “Development”

CREATE VIEW Developers AS SELECT SSN, name FROM Employee WHERE department = “Development”

INSERT INTO Developers VALUES(“123456789”, “Joe”)

INSERT INTO Developers VALUES(“123456789”, “Joe”)

INSERT INTO Employee(ssn, name, department, project, salary)VALUES(“123456789”, , “Joe”, NULL, NULL, NULL)

INSERT INTO Employee(ssn, name, department, project, salary)VALUES(“123456789”, , “Joe”, NULL, NULL, NULL)

If we make thefollowing insertion:

It becomes:

Page 34: 1 Lecture 05: SQL Wednesday, October 8, 2003. 2 Outline Outer joins (6.3.8) Database Modifications (6.5) Defining Relation Schema in SQL (6.6) Indexes.

34

Non-Updatable Views

Employee(SSN, name, department, managerSSN, salary)

CREATE VIEW HighManagers AS SELECT DISTINCT x.SSN, x.name FROM Employee x, Employee y, Employee z WHERE y.managerSSN = x.SSN and z.managerSSN = y.SSN

CREATE VIEW HighManagers AS SELECT DISTINCT x.SSN, x.name FROM Employee x, Employee y, Employee z WHERE y.managerSSN = x.SSN and z.managerSSN = y.SSN

INSERT INTO HighManagers VALUES(“123456789”, “Joe”)

INSERT INTO HighManagers VALUES(“123456789”, “Joe”)

Impossible to execute !