Download presentation
Presentation is loading. Please wait.
Published byAron Allison Modified over 9 years ago
1
Jerry Post Copyright © 1998 1 Database Management Systems Chapter 4 Queries
2
DATABASE 2 Why do we Need Queries Natural languages (English) are too vague With 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
DATABASE 3 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
DATABASE 4 Tables
5
DATABASE 5 Organization Single table Constraints Computations Groups/Subtotals Multiple Tables
6
DATABASE 6 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
DATABASE 7 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
DATABASE 8 Query By Example & SQL List all animals with yellow in their color. SELECTAnimalID, Category, Breed, Color FROMAnimal WHERE(Color LIKE “*yellow*”); What tables? What to see? What conditions? Query04_01
9
DATABASE 9 DISTINCT SELECT Category FROM Animal; Category Fish Dog Fish Cat Dog Fish Dog Fish Cat Dog... SELECT DISTINCT Category FROM Animal; Category Bird Cat Dog Fish Mammal Reptile Spider
10
DATABASE 10 ORDER BY SELECTcolumns FROMtables JOINjoin columns WHEREconditions ORDER BYcolumns (ASC DESC) SELECT Name, Category, Breed FROM Animal ORDER BY Category, Breed; NameCategoryBreed CathyBirdAfrican Grey BirdCanary DebbieBirdCockatiel BirdCockatiel TerryBirdLovebird BirdOther CharlesBirdParakeet CurtisBirdParakeet RubyBirdParakeet SandyBirdParrot HoytBirdParrot BirdParrot
11
DATABASE 11 Constraints: And List all dogs with yellow in their color born after 6/1/98. SELECTAnimalID, Category, DateBorn FROMAnimal WHERE((Category="Dog") AND (Color Like "*Yellow*") AND (DateBorn>#6/1/98#)); Query04_02
12
DATABASE 12 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, Color FROM Animal WHERE (( Category="Dog") AND ( ( (Gender="Male") AND (Registered Is Not Null) ) OR ( (DateBorn<#6/1/98#) AND (Color Like "*White*") ) ) ); Query04_03
13
DATABASE 13 Useful Where Conditions
14
DATABASE Boolean Algebra And:Both must be true. Or:Either one is true. Not:Reverse the value. a = 3 b = -1 c = 2 (a > 4) Or (b < 0) FT F (a > 4) And (b < 0) FT T NOT (b < 0) T F
15
DATABASE Boolean Algebra FT F T ( (a > 4) AND (b 1) T T FT F F (a > 4) AND ( (b 1) ) T T a = 3 b = -1 c = 2 The result is affected by the order of the operations. Parentheses indicate that an operation should be performed first. With no parentheses, operations are performed left-to-right. Always use parentheses, so other people can read and understand your query.
16
DATABASE 16 DeMorgan’s Law Example Customer:"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”) AND NOT ((Registered is NOT NULL) or (Color LIKE “*red*”)). QBE:
17
DATABASE 17 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 TF T F NOT ((Registered is NOT NULL) OR (Color LIKE “*red*”)) Registered=ASCF Color=Black (Registered is NULL) AND NOT (Color LIKE “*red*”) F T F or not and F not
18
DATABASE 18 Simple Computations OrderItem(OrderID, ItemID, Price, Quantity) Select OrderID, ItemID, Price, Quantity, Price*Quantity As Extended From OrderItem; Basic computations (+ - * /) can be performed on numeric data. The new display column should be given a meaningful name. OrderIDItemIDPriceQuantityExtended 151976419.50239.00 1517653 8.35325.05 1518673 6.89213.78
19
DATABASE 19 Computations: Example--Avg What is the average sale price of all animals? SELECT Avg(SalePrice) AS AvgOfSalePrice FROM SaleAnimal; Sum Avg Min Max Count StDev Var Query04_04
20
DATABASE 20 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 OrderTotal FROM OrderItem WHERE (PONumber=22); Query04_05
21
DATABASE 21 Subtotals (Where) How many cats are in the Animal list? SELECTCount(AnimalID) AS CountOfAnimalID FROMAnimal WHERE(Category = “Cat”); Query04_06
22
DATABASE 22 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. SELECTCategory, Count(AnimalID) AS CountOfAnimalID FROMAnimal GROUP BYCategory ORDER BYCount(AnimalID) DESC; CategoryCountOfAnimalID Dog100 Cat47 Bird15 Fish14 Reptile6 Mammal6 Spider3 Query04_07
23
DATABASE 23 Conditions on Totals (Having) Count number of Animals in each Category, but only list them if more than 10. CategoryCountOfAnimal Dog100 Cat47 Bird15 Fish14 SELECTCategory, Count(AnimalID) AS CountOfAnimalID FROMAnimal GROUP BYCategory HAVINGCount(AnimalID) > 10 ORDER BYCount(AnimalID) DESC; Query04_08
24
DATABASE 24 Where (Detail) v Having (Group) Count Animals born after 6/1/98 in each Category, but only list Category if more than 10. CategoryCountOfAnimalID Dog30 Cat18 SELECTCategory, Count(AnimalID) AS CountOfAnimalID FROMAnimal WHEREDateBorn > #6/1/98# GROUP BYCategory HAVINGCount(AnimalID) > 10 ORDER BYCount(AnimalID) DESC; Query04_09
25
DATABASE 25 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 CustomerID FROM Sale WHERE (SaleDate Between #4/1/98# And #5/31/98#) ORDER BY CustomerID; Avoid Duplicates with DISTINCT Query04_10
26
DATABASE 26 Joining Tables List LastNames of Customers who bought between 4/1/98 and 5/31/98. CustomerIDLastName 22Adkins 57Carter 38Franklin 42Froedge 63Grimes 74Hinton 36Holland 6Hopkins 50Lee 58McCain 37McPherson 90Nichols 14Patterson 8Reid 28Samuels 80Vance 39Williams 24Young 19Zhang SELECT DISTINCT Sale.CustomerID, Customer.LastName FROM Customer INNER JOIN Sale ON Customer.CustomerID = Sale.CustomerID WHERE (Sale.SaleDate Between #4/1/98# And #5/31/98#) ORDER BY Customer.LastName; Query04_11
27
DATABASE 27 SQL JOIN FROM 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
DATABASE 28 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.Phone FROM Customer INNER JOIN (Sale INNER JOIN (Animal INNER JOIN SaleAnimal ON Animal.AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID) ON Customer.CustomerID = Sale.CustomerID WHERE ((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
DATABASE 29 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
DATABASE 30 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
DATABASE 31 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.
32
DATABASE Table Alias SIDSupplier.CityIDCity.CityEIDLastNameEmployee.CityIDCity2.City 47972Middlesboro5James7083Orlando 210896Springfield1Reeves9201Lincoln 47972Middlesboro3Reasoner8313Springfield 910740Columbia8Carpenter10592Philadelphia 510893Smyrna3Reasoner8313Springfield SELECT Supplier.SID, Supplier.CityID, City.City, Employee.EID, Employee.LastName, Employee.CityID, City2.City FROM (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;
33
DATABASE 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.
34
DATABASE 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)
35
DATABASE Non Updateable View OrderItem(OrderID, ItemID, Quantity)Item(ItemID, Description) OrderLine(OrderID, Item.ItemID, Description, Quantity) 121573 121822 122571 57Cat food 58Dog food 59Bird food 12157Cat food3 12182Bird feeder2 12257Cat food1 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.