1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.
-
Upload
katrina-poole -
Category
Documents
-
view
220 -
download
0
description
Transcript of 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.
![Page 1: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/1.jpg)
1
Introduction to Database SystemsCSE 444
Lecture 04: SQLApril 7, 2008
![Page 2: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/2.jpg)
2
Outline
• The Project• Nulls (6.1.6)• Outer joins (6.3.8)• Database Modifications (6.5)
![Page 3: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/3.jpg)
3
The Project
• Application:– Boutique online music and book store
• Project:– Create database, access through a Web interface– Import real data and develop inventory logic– Customer checkout– Advanced functionality (TBD)
![Page 4: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/4.jpg)
4
The Project
• Team:– Two people– Find partner now!
• Tools:– SQL Server 2005– Visual Studio 2005– C# 2.0– ASP.NET 2.0
![Page 5: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/5.jpg)
5
The Project
Phase 1: posted now, due April 18• Create a schema• Populate the database: fake data for now• Access through a simple Web interface
![Page 6: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/6.jpg)
6
NULLS in SQL
• Whenever we don’t have a value, we can put a NULL• Can mean many things:
– Value does not exists– Value exists but is unknown– Value not applicable– Etc.
• The schema specifies for each attribute if can be null (nullable attribute) or not
• How does SQL cope with tables that have NULLs ?
![Page 7: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/7.jpg)
7
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 = 0UNKNOWN = 0.5TRUE = 1
![Page 8: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/8.jpg)
8
Null Values• 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 PersonWHERE (age < 25) AND (height > 6 OR weight > 190)
E.g.age=20heigth=NULLweight=200
![Page 9: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/9.jpg)
9
Null ValuesUnexpected behavior:
Some Persons are not included !
SELECT *FROM PersonWHERE age < 25 OR age >= 25
![Page 10: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/10.jpg)
10
Null ValuesCan test for NULL explicitly:
– x IS NULL– x IS NOT NULL
Now it includes all Persons
SELECT *FROM PersonWHERE age < 25 OR age >= 25 OR age IS NULL
![Page 11: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/11.jpg)
11
OuterjoinsExplicit joins in SQL = “inner joins”:
Product(name, category) Purchase(prodName, store)
SELECT Product.name, Purchase.storeFROM Product JOIN Purchase ON Product.name = Purchase.prodName
SELECT Product.name, Purchase.storeFROM Product, PurchaseWHERE Product.name = Purchase.prodName
Same as:
But Products that never sold will be lost !
![Page 12: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/12.jpg)
12
OuterjoinsLeft 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
![Page 13: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/13.jpg)
13
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 14: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/14.jpg)
14
ApplicationCompute, 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
What’s wrong ?
![Page 15: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/15.jpg)
15
ApplicationCompute, 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
Now we also get the products who sold in 0 quantity
![Page 16: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/16.jpg)
16
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 17: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/17.jpg)
17
Modifying the Database
Three kinds of modifications• Insertions• Deletions• Updates
Sometimes they are all called “updates”
![Page 18: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/18.jpg)
18
InsertionsGeneral form:
Missing attribute 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’)
Example: Insert a new purchase to the database:
![Page 19: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/19.jpg)
19
Insertions
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 20: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/20.jpg)
20
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)
Purchase
![Page 21: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/21.jpg)
21
Insertion: an ExampleINSERT INTO Product(name)
SELECT DISTINCT prodName FROM Purchase WHERE prodName NOT IN (SELECT name FROM Product)
name listPrice category
gizmo 100 Gadgets
camera - -
![Page 22: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/22.jpg)
22
Insertion: an Example
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 23: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/23.jpg)
23
Deletions
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 24: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/24.jpg)
24
Updates
UPDATE PRODUCTSET price = price/2WHERE Product.name IN (SELECT product FROM Purchase WHERE Date =‘Oct, 25, 1999’);
Example:
![Page 25: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/25.jpg)
25
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 26: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/26.jpg)
26
Creating Tables
CREATE TABLE Person(
name VARCHAR(30), social-security-number INT, age SHORTINT, city VARCHAR(30), gender BIT(1), Birthdate DATE
);
![Page 27: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/27.jpg)
27
Deleting or Modifying a TableDeleting:
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; Example: Exercise with care !!
![Page 28: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/28.jpg)
28
Default ValuesSpecifying 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
The default of defaults: NULL
![Page 29: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/29.jpg)
29
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”
![Page 30: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/30.jpg)
30
• Create an index on name:
Indexes
Adam Betty Charles …. Smith ….
B+ trees have fan-out of 100s: max 4 levels !Will discuss in the second half of this course
![Page 31: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/31.jpg)
31
Creating Indexes
CREATE INDEX nameIndex ON Person(name)
Syntax:
![Page 32: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/32.jpg)
32
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)
SELECT * FROM Person WHERE age > 25 AND age < 28
![Page 33: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/33.jpg)
33
Creating IndexesIndexes can be created on more than one attribute:
SELECT * FROM Person WHERE age = 55 AND city = “Seattle”
Helps in:
SELECT * FROM Person WHERE city = “Seattle”
But not in:
CREATE INDEX doubleindex ON Person (age, city)Example:
SELECT * FROM Person WHERE age = 55
and even in:
![Page 34: 1 Introduction to Database Systems CSE 444 Lecture 04: SQL April 7, 2008.](https://reader035.fdocuments.net/reader035/viewer/2022062906/5a4d1b447f8b9ab0599a2d6c/html5/thumbnails/34.jpg)
34
The Index Selection Problem
• Why not build an index on every attribute ? On every pair of attributes ? Etc. ?
• The index selection problem is hard: balance the query cost v.s. the update cost, in a large application workload