jerry post copyright © 1998 1 database management systems chapter 4 queries
TRANSCRIPT
1
Jerry PostCopyright © 1998
Database Management Database Management SystemsSystems
Chapter 4
Queries
2
DDAATTAABBAASSEE
Why do we Need Queries
Natural languages (English) are too vagueWith complex questions, it can be hard to verify that the
question was interpreted correctly, and that the answer we received is truly correct.
Consider the question: Who are our best customers?
We need a query system with more structure We need a standardized system so users and
developers can learn one method that works on any (most) systems.Query By Example (QBE)SQL
3
DDAATTAABBAASSEE
Four Questions to Create a Query
What output do you want to see? What do you already know (or what constraints are
given)? What tables are involved? How are the tables joined together?
4
DDAATTAABBAASSEE
Tables
SupplierIDNameContactNamePhoneAddressZipCodeCityID
Supplier
PONumberOrderDateReceiveDateSupplierIDEmployeeIDShippingCost
MerchandiseOrder
OrderIDOrderDateReceiveDateSupplierIDShippingCostEmployeeID
AnimalOrder
OrderIDAnimalIDCost
AnimalOrderItem
CityIDZipCodeCityStateAreaCodePopulation1990Population1980CountryLatitudeLongitude
City
EmployeeIDLastNameFirstNamePhoneAddressZipCodeCityIDTaxPayerIDDateHiredDateReleased
Employee
PONumberItemIDQuantityCost
OrderItem
CategoryRegistration
Category
CategoryBreed
Breed
AnimalIDNameCategoryBreedDateBornGenderRegisteredColorListPricePhoto
Animal
SaleIDSaleDateEmployeeIDCustomerIDSalesTax
Sale
SaleIDItemIDQuantitySalePrice
SaleItem
ItemIDDescriptionQuantityOnHandListPriceCategory
Merchandise
SaleIDAnimalIDSalePrice
SaleAnimal
CustomerIDPhoneFirstNameLastNameAddressZipCodeCityID
Customer
*
*
*
*
*
*
*
*
*
**
*
*
*
**
*
**
*
5
DDAATTAABBAASSEE
Organization
Single table Constraints Computations Groups/Subtotals Multiple Tables
6
DDAATTAABBAASSEE
Sample Questions List all animals with yellow in
their color. List all dogs with yellow in their
color born after 6/1/98. List all merchandise for cats
with a list price greater than $10.
List all dogs who are male and registered or who were born before 6/1/98 and have white in their color.
What is the average sale price of all animals?
What is the total cost we paid for all animals?
List the top 10 customers and total amount they spent.
How many cats are in the animal list?
Count the number of animals in each category.
List the CustomerID of everyone who bought something between 4/1/98 and 5/31/98.
List the first name and phone of every customer who bought something between 4/1/98 and 5/31/98.
List the last name and phone of anyone who bought a registered white cat between 6/1/98 and 12/31/98.
Which employee has sold the most items?
7
DDAATTAABBAASSEE
Harder Questions
How many cats are “in-stock” on 10/1/98?
Which cats sold for more than the average price?
Which animals sold for more than the average price of animals in their category?
Which animals have not been sold?
Which customers (who bought something at least once) did not buy anything between 11/1/98 and 12/31/98?
Which customers who bought Dogs also bought products for Cats (at any time)?
8
DDAATTAABBAASSEE
Query By Example & SQL
List all animals with yellow in their color.
SELECTAnimalID, Category, Breed, ColorFROM AnimalWHERE (Color LIKE “*yellow*”);
What tables?
What to see?
What conditions?
Query04_01
9
DDAATTAABBAASSEE
DISTINCTSELECT Category FROM Animal;
CategoryFishDogFishCatCatDogFishDogDogDogFishCatDog. . .
SELECT DISTINCT Category FROM Animal;
CategoryBirdCatDogFishMammalReptileSpider
10
DDAATTAABBAASSEE
ORDER BYSELECT columnsFROM tablesJOIN join columnsWHERE conditionsORDER BY columns (ASC DESC)
SELECT Name, Category, BreedFROM AnimalORDER BY Category, Breed;
Name Category BreedCathy Bird African Grey
Bird CanaryDebbie Bird Cockatiel
Bird CockatielTerry Bird Lovebird
Bird OtherCharles Bird ParakeetCurtis Bird ParakeetRuby Bird ParakeetSandy Bird ParrotHoyt Bird Parrot
Bird Parrot
11
DDAATTAABBAASSEE
Constraints: And
List all dogs with yellow in their color born after 6/1/98.
SELECTAnimalID, Category, DateBornFROM AnimalWHERE ((Category="Dog") AND (Color Like "*Yellow*") AND (DateBorn>#6/1/98#));
Query04_02
12
DDAATTAABBAASSEE
Conditions: AND, OR
List all dogs who are male and registered or who were born before 6/1/98 and have white in their color.
SELECT AnimalID, Category, Gender, Registered, DateBorn, ColorFROM AnimalWHERE (( Category="Dog") AND
( ( (Gender="Male") AND (Registered Is Not Null) ) OR ( (DateBorn<#6/1/98#) AND (Color Like "*White*") ) ) );
Query04_03
13
DDAATTAABBAASSEE
Useful Where Conditions
DDAATTAABBAASSEE
Boolean AlgebraAnd: Both must be true.Or: Either one is true.Not: Reverse the value.
a = 3
b = -1
c = 2
(a > 4) Or (b < 0)
F TF
(a > 4) And (b < 0)
F TT
NOT (b < 0)
TF
DDAATTAABBAASSEE
Boolean Algebra
F TF
T
( (a > 4) AND (b < 0) ) OR (c > 1)TT
F T
FF
(a > 4) AND ( (b < 0) OR (c > 1) )T
T
a = 3
b = -1
c = 2
The result is affected by the order of the operations.Parentheses indicate that anoperation should be performed first.With no parentheses, operations areperformed left-to-right.
Always use parentheses,so other people can readand understand your query.
16
DDAATTAABBAASSEE
DeMorgan’s Law ExampleCustomer: "I want to look at a cat, but I don’t want any cats that are
registered or that have red in their color."
SQL: SELECT . . . WHERE (Category=“cat”) ANDNOT ((Registered is NOT NULL) or (Color LIKE “*red*”)).
QBE:
17
DDAATTAABBAASSEE
DeMorgan’s Law Negation of clauses
Not (A And B) becomes Not A Or Not B
Not (A Or B) becomes Not A And Not B
T F
TF
NOT ((Registered is NOT NULL) OR (Color LIKE “*red*”))
Registered=ASCFColor=Black
(Registered is NULL) AND NOT (Color LIKE “*red*”)
FT
F
or
not
and
Fnot
18
DDAATTAABBAASSEE
Simple Computations
OrderItem(OrderID, ItemID, Price, Quantity)
Select OrderID, ItemID, Price, Quantity, Price*Quantity As ExtendedFrom OrderItem;
Basic computations (+ - * /) can be performed on numeric data.The new display column should be given a meaningful name.
OrderID ItemID Price Quantity Extended
151 9764 19.50 2 39.00
151 7653 8.35 3 25.05
151 8673 6.89 2 13.78
19
DDAATTAABBAASSEE
Computations: Example--Avg
What is the average sale price of all animals?
SELECT Avg(SalePrice) AS AvgOfSalePriceFROM SaleAnimal;
Sum Avg Min Max Count StDev Var
Query04_04
20
DDAATTAABBAASSEE
Computations (Math Operators)
What is the total value of the order for PONumber 22? Use any common math operators on numeric data. Operate on data in one row at a time.
OrderTotal 1798.28
SELECT Sum([Quantity]*[Cost]) AS OrderTotalFROM OrderItemWHERE (PONumber=22);
Query04_05
21
DDAATTAABBAASSEE
Subtotals (Where)
How many cats are in the Animal list?
SELECT Count(AnimalID) AS CountOfAnimalIDFROM AnimalWHERE (Category = “Cat”);
Query04_06
22
DDAATTAABBAASSEE
Groups and Subtotals
Count the number of animals in each category. You could type in each WHERE clause, but that is slow. And you would have to know all of the Category values.
SELECT Category, Count(AnimalID) AS CountOfAnimalIDFROM AnimalGROUP BY CategoryORDER BY Count(AnimalID) DESC;
Category CountOfAnimalID Dog 100 Cat 47 Bird 15 Fish 14 Reptile 6 Mammal 6 Spider 3
Query04_07
23
DDAATTAABBAASSEE
Conditions on Totals (Having)
Count number of Animals in each Category, but only list them if more than 10.
Category CountOfAnimal Dog 100 Cat 47 Bird 15 Fish 14
SELECT Category, Count(AnimalID) AS CountOfAnimalIDFROM AnimalGROUP BY CategoryHAVING Count(AnimalID) > 10ORDER BY Count(AnimalID) DESC;
Query04_08
24
DDAATTAABBAASSEE
Where (Detail) v Having (Group)
Count Animals born after 6/1/98 in each Category, but only list Category if more than 10.
CategoryCountOfAnimalID
Dog 30 Cat 18
SELECT Category, Count(AnimalID) AS CountOfAnimalIDFROM AnimalWHERE DateBorn > #6/1/98#GROUP BY CategoryHAVING Count(AnimalID) > 10ORDER BY Count(AnimalID) DESC;
Query04_09
25
DDAATTAABBAASSEE
Multiple Tables (Intro & Distinct)
List the CustomerID of everyone who bought something between 4/1/98 and 5/31/98.
CustomerID 6 8 14 19 22 24 28 36 37 38 39 42 50 57 58 63 74 80 90
SELECT DISTINCT CustomerIDFROM SaleWHERE (SaleDate Between #4/1/98# And #5/31/98#)ORDER BY CustomerID;
Avoid Duplicateswith DISTINCT
Query04_10
26
DDAATTAABBAASSEE
Joining Tables
List LastNames of Customers who bought between 4/1/98 and 5/31/98.
CustomerID LastName
22 Adkins 57 Carter 38 Franklin 42 Froedge 63 Grimes 74 Hinton 36 Holland 6 Hopkins 50 Lee 58 McCain 37 McPherson 90 Nichols 14 Patterson 8 Reid 28 Samuels 80 Vance 39 Williams 24 Young 19 Zhang
SELECT DISTINCT Sale.CustomerID, Customer.LastNameFROM CustomerINNER JOIN Sale ON Customer.CustomerID = Sale.CustomerIDWHERE (Sale.SaleDate Between #4/1/98# And #5/31/98#)ORDER BY Customer.LastName;
Query04_11
27
DDAATTAABBAASSEE
SQL JOINFROM table1
INNER JOIN table2
ON table1.column = table2.column
FROM table1, table2
JOIN table1.column = table2.column
SQL 92 syntax
Informal syntax
FROM table1, table2
WHERE table1.column = table2.column
SQL 89 syntax
28
DDAATTAABBAASSEE
Multiple Tables (Many)
List the Last Name and Phone of anyone who bought a registered White cat between 6/1/98 and 12/31/ 98.
SELECT DISTINCTROW Customer.LastName, Customer.PhoneFROM Customer INNER JOIN (Sale INNER JOIN (Animal INNER JOIN SaleAnimal ON Animal.AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID) ON Customer.CustomerID = Sale.CustomerIDWHERE ((Animal.Category="Cat") AND (Animal.Registered Is Not Null) AND (Color Like "*White*") AND (SaleDate Between #6/1/98# And #12/31/98#));
Query04_12
29
DDAATTAABBAASSEE
Building a Query List the Last Name and Phone of anyone who bought a registered
White cat between 6/1/98 and 12/31/ 98.
Identify the tables involved. Look at the columns you want to see.
LastName, Phone: Customer
Look at the columns used in the constraints. Registered, Color, Category: Animal Sale Date: Sale
Find connector tables. To connect Animal to Sale: SaleAnimal
Select the desired columns and test the query. Enter the constraints. Set Order By columns. Add Group By columns. Add summary computations to the SELECT statement.
30
DDAATTAABBAASSEE
Joining Tables (Hints)
Build Relationships First Drag and drop From one side to many side
Avoid multiple ties between tables
SQL FROM Table1 INNER JOIN Table2 ON Table1.ColA = Table2.ColB
Join columns are often keys, but they can be any columns--as long as the domains (types of data) match.
Multiple Tables FROM (Table1 INNER JOIN Table2 ON T1.ColA = T2.ColB ) INNER JOIN Table3 ON T3.ColC = T3.ColD
Shorter Notation FROM T1, T2, T3 JOIN T1.ColA = T2.ColB T1.ColC = T3.ColD
Shorter Notation is not correct syntax, but it is easier to write.
31
DDAATTAABBAASSEE
Tables with Multiple Joins Potential problem with three or more tables. Access uses predefined relationships to
automatically determine JOINs. JOINS might loop. Most queries will not work with loops.
A query with these four tables with four JOINS would only return rows where the Employee had the same ZipCode as the Supplier. If you only need the Supplier city, just delete the JOIN between Employee and ZipCode. If you want both cities, add the ZipCode table again as a fifth table.
AnimalOrder
OrderIDOrderDateReceiveDateSupplierIDShippingCostEmployeeID
Supplier
SupplierIDNameContactNamePhoneAddressZipCodeCityID
City
CityIDZipCodeCityStateAreaCodePopulation1990Population1980CountryLatitudeLongitude
Employee
EmployeeIDLastNameFirstNamePhoneAddressZipCodeCityIDTaxPayerIDDateHiredDateReleased
¥
¥
1 1
DDAATTAABBAASSEE
Table Alias
SID Supplier.CityID City.City EID LastName Employee.CityID City2.City4 7972 Middlesboro 5 James 7083 Orlando2 10896 Springfield 1 Reeves 9201 Lincoln4 7972 Middlesboro 3 Reasoner 8313 Springfield9 10740 Columbia 8 Carpenter 10592 Philadelphia5 10893 Smyrna 3 Reasoner 8313 Springfield
SELECT Supplier.SID, Supplier.CityID, City.City, Employee.EID, Employee.LastName, Employee.CityID, City2.CityFROM (City INNER JOIN Supplier ON City.CityID = Supplier.CityID) INNER JOIN ((City AS City2 INNER JOIN Employee ON City2.CityID = Employee.CityID) INNER JOIN AnimalOrder ON Employee.EmployeeID = AnimalOrder.EmployeeID) ON Supplier.SupplierID = AnimalOrder.SupplierID;
DDAATTAABBAASSEE
Saved Query: Create View
CREATE VIEW Kittens AS
SELECT *
FROM Animal
WHERE (Category = ‘cat’) AND (Today - DateBorn < 180);
SELECT Avg(ListPrice)
FROM Kittens
WHERE (Color LIKE “*Black*”);
Save a query Faster: only enter once Faster: only analyze once
Any SELECT statement Can use the View within
other SQL queries.
DDAATTAABBAASSEE
Updateable Views
OrderItem(OrderID, ItemID, Quantity) Item(ItemID, Description)
OrderLine(OrderID, ItemID, Description, Quantity)
To be updateable, a view must focus on one primary table. (OrderItem) Goal is to change data in only one table. (OrderItem) Data can be displayed from other tables. (Item) Never include or attempt to change primary keys from
more than one table. (Item.ItemID)
DDAATTAABBAASSEE
Non Updateable ViewOrderItem(OrderID, ItemID, Quantity) Item(ItemID, Description)
OrderLine(OrderID, Item.ItemID, Description, Quantity)
121 57 3121 82 2122 57 1
57 Cat food58 Dog food59 Bird food
121 57 Cat food 3121 82 Bird feeder 2122 57 Cat food 1
If you attempt to change the Item.ItemID in the OrderLineView:
You will simply change the primary key value in the Item table.
It will not add a new row to the OrderItem table.
32