Solution Manual for Database Processing Fundamentals, Design, and Implementation, 15th Edition
Preview Extract
INSTRUCTORโS MANUAL
TO ACCOMPANY
David M. Kroenke | David J. Auer | Scott L. Vandenberg | Robert C. Yoder
40th Anniversary Edition
DATABASE PROCESSING
Fundamentals, Design, and Implementation
15th Edition
Chapter 2
Introduction to Structured Query Language
Prepared By
Scott L. Vandenberg
Siena College
Instructor’s Manual to accompany:
Database Processing: Fundamental, Design, and Implementation (15 th Edition)
David M. Kroenke | David J. Auer | Scott L. Vandenberg | Robert C. Yoder
Copyright ยฉ 2019 Pearson Education, Inc.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted,
in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior
written permission of the publisher. Printed in the United States of America.
Chapter Two โ Introduction to Structured Query Language
๏ถ
๏ถ
CHAPTER OBJECTIVES
๏ท
To understand the use of extracted data sets in business intelligence (BI) systems
๏ท
To understand the use of ad-hoc queries in business intelligence (BI) systems
๏ท
To understand the history and significance of Structured Query Language (SQL)
๏ท
To understand the SQL SELECT/FROM/WHERE framework as the basis for
database queries
๏ท
To create SQL queries to retrieve data from a single table
๏ท
To create SQL queries that use the SQL SELECT, FROM, WHERE, ORDER BY,
GROUP BY, and HAVING clauses
๏ท
To create SQL queries that use the SQL DISTINCT, TOP, and TOP PERCENT
keywords
๏ท
To create SQL queries that use the SQL comparison operators, including
BETWEEN, LIKE, IN, and IS NULL
๏ท
To create SQL queries that use the SQL logical operators, including AND, OR, and
NOT
๏ท
To create SQL queries that use the SQL built-in aggregate functions of SUM,
COUNT, MIN, MAX, and AVG with and without the SQL GROUP BY clause
๏ท
To create SQL queries that retrieve data from a single table while restricting the data
based upon data in another table (subquery)
๏ท
To create SQL queries that retrieve data from multiple tables using the SQL join and
JOIN ON operations
๏ท
To create SQL queries on recursive relationships
๏ท
To create SQL queries that retrieve data from multiple tables using the SQL OUTER
JOIN operation
๏ท
To create SQL queries that retrieve data from multiple tables using SQL set
operators UNION, INTERSECT, and EXCEPT
IMPORTANT TEACHING NOTES โ READ THIS FIRST!
Chapter 2 โ Introduction to Structured Query Language is intended to be taught in
conjunction with the version of online Chapter 10# available at
http://www.pearsonhighered.com/kroenke/ that corresponds to the DBMS that you are
using in your class.
1. If you are using Microsoft SQL Server 2017 as your DBMS, you should use
Online Chapter 10A โ Managing Databases with Microsoft SQL Server 2017,
and cover pages 10A-1 through 10A-58 to help your students get set up for the
SQL work in Chapter 2.
Page 2-3
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2. If you are using Oracle Database 12c Release 2 or Oracle Database XE as
your DBMS, you should use Online Chapter 10B โ Managing Databases with
Oracle Database, and cover pages 10B-1 through 10B-55 to help your
students get set up for the SQL work in Chapter 2.
3. If you are using MySQL 5.7 as your DBMS, you should use Online Chapter 10C
โ Managing Databases with MySQL 5.7, and cover pages 10C-1 through
10C-35 to help your students get set up for the SQL work in Chapter 2.
4. These pages cover how to build a database from existing *.sql scripts, and the
*.sql scripts for the Cape Codd database used in Chapter 2 are included in the
student data files available at http://www.pearsonhighered.com/kroenke/.
๏ถ
ERRATA
There are no known errors at this time. Any errors that are discovered in the future will
be reported and corrected in the Online DBP e15 Errata document, which will be
available at http://www.pearsonhighered.com/kroenke.
๏ถ
TEACHING SUGGESTIONS
๏ท
Database files to illustrate the examples in the chapter and solution database
files for your use are available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
๏ท
The best way for students to understand SQL is by using it. Have your students
work through the Review Questions, Exercises, the Marciaโs Dry Cleaning Case
Questions, and the Queen Anne Curiosity Shop or Morgan Importing Project
Questions in an actual database. Students can create databases in Microsoft
Access with basic tables, relationships, and data from the material in the book.
SQL scripts for Microsoft SQL Server, Oracle Database, and MySQL versions of
Cape Codd, MDC, QACS, and MI are available in the Instructorโs Resource
Center on the textโs Web site (www.pearsonhighered.com/kroenke). An Access
version of WPC is also available there.
๏ท
Microsoft Access database files for Cape Codd, together with SQL scripts for
Microsoft SQL Server, Oracle Database, and MySQL versions of Cape Codd,
MDC, QACS, and MI are available for student use in the Student Resources on
the textโs Web site (www.pearsonhighered.com/kroenke).
๏ท
The SQL processors in the various DBMSs are very fussy about character sets
used for SQL statements. They want to see plain ASCII text, not fancy fonts.
This is particularly true of the single quotation ( ‘ ) used to designate character
strings, but weโve also had problems with the minus sign. If your students are
having problems getting a โproperly structured SQL statementโ to run, look
closely for this type of problem. It occurs most frequently when copying/pasting a
query from a word processor into a query window.
๏ท
There is a useful teaching technique which will allow you to demonstrate the SQL
queries in the text using Microsoft SQL Server if you have it available.
Page 2-4
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
๏ท
๏ท
Open the Microsoft SQL Server Management Studio, and create a new
SQL Server database named Cape-Codd.
๏ท
In the Microsoft SQL Server Management Studio, use the SQL
statements in the *.sql text file DBP-e15-MSSQL-Cape-Codd-CreateTables.sql to create the RETAIL_ORDER, ORDER_ITEM, and
SKU_DATA tables [other tables are also created].
๏ท
In the Microsoft SQL Server Management Studio, use the SQL
statements in the *.sql text file DBP-e15-MSSQL-Cape-Codd-InsertData.sql to populate the RETAIL_ORDER, ORDER_ITEM, and
SKU_DATA tables [other tables are also populated].
๏ท
In the Microsoft SQL Server Management Studio, open the *.sql text file
DBP-e15-MSSQL-Cape-Codd-Query-Set-CH02.sql. This file contains all
the queries shown in the Chapter 2 text.
๏ท
Highlight the query you want to run and click the Execute Query button to
display the results of the query. An example of this is shown in the
following screenshot.
๏ท
All of the *.sql text files needed to do this are available in the Instructorโs
Resource Center on the textโs Web site
(www.pearsonhighered.com/kroenke).
Microsoft Access 2016 does not support all SQL-92 (and newer) constructs.
While this chapter still considers Microsoft Access as the DBMS most likely to be
used by students at this point in the course, there are some Review Questions
and Project Questions that use the ORDER BY clause with aliased computed
columns that will not run in Access (see Review Questions 2.36 โ 2.38). The
correct solutions for these questions were obtained using Microsoft SQL Server
Page 2-5
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2017. The Microsoft Access results achieving the ORDER BY without using the
alias are also shown, so you can assign these problems with or without the
โORDER BY aliasโ part of the questions.
๏ท
Microsoft Access 2016 does not support SQL wildcard characters (see Review
Questions 2.31 โ 2.33), although it does have equivalent wildcard characters as
described in the chapter. The correct solutions for these questions were
obtained using Microsoft SQL Server 2017, and solutions are shown for Access
as well.
๏ท
For those students who are used to procedural languages, they may have some
initial difficulty with a language that does set processing like SQL. These
students are accustomed to processing rows (records) rather than sets. It is time
well spent to make sure they understand that SQL processes tables at a time,
not rows at a time.
๏ท
Students may have some trouble understanding the GROUP BY clause. If you
can explain it in terms of traditional control break logic (sort rows on a key then
process the rows until the value of the key changes), they will have less trouble.
This also explains why the GROUP BY clause will likely present the rows sorted
even though you do not use an ORDER BY clause.
๏ท
At this point, students familiar with Microsoft Access will wonder why they are
learning SQL. They have made queries in Microsoft Access using Microsoft
Access’s version of Query-By-Example (QBE), and therefore never had to
understand the SQL. In many cases, they will not know that Microsoft Access
generates SQL code when you create a query in design view. It is worth letting
them know this is done and even showing them the SQL created for and
underlying a Microsoft Access query.
๏ท
It is also important for students to understand that, in many cases, the Query-ByExample forms such as Microsoft Accessโs design view can be very inefficient.
Also, the QBE forms are not available from within an application program such as
Java or C++ or PHP, and so SQL must be written.
๏ท
It has been our experience that a review of a Cartesian Product from an algebra
class is time well spent. Show students what will happen if a WHERE statement
is left off of a join. The following example will work. Assume you create four
tables with five columns each and 100 rows each. How many columns and rows
will be displayed by the statement:
SELECT * FROM TABLE1, TABLE2, TABLE3, TABLE4;
The result is 20 columns (not bad) but 100,000,000 rows (100 * 100 = 10,000,
10,000 * 100 = 1,000,000, 1,000,000 * 100 = 100,000,000). This happens
because the JOIN is not qualified. If they understand Cartesian products then
they will understand how to fix a JOIN where the results are much too large.
๏ท
Note that in the Marcia’s Dry Cleaning project, where in some previous editions
we have used tables named ORDER and ORDER_ITEM, we have changed
these table names to INVOICE and INVOICE_ITEM. We did this because
ORDER is an SQL reserved word (part of ORDER BY). Therefore, when the
table name ORDER is used as part of a query, it may need to be (“must be” in
Access 2016) enclosed in delimiters as [ORDER] if the query is going to run
Page 2-6
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
correctly. The topic of reserved words and delimiters is discussed in more detail
in Chapters 7 and 8. However, now is a good time to introduce it to your
students.
๏ถ
2.1
๏ท
Note that Microsoft Access SQL requires the INNER JOIN syntax instead of the
standard SQL syntax JOIN used by Microsoft SQL Server, Oracle Database, and
MySQL. Also note that Oracle prohibits the โASโ keyword when aliasing table
names using the JOIN syntax. See solutions to Review Question 2.51.
๏ท
Students will frequently try to UNION or INTERSECT tables that are not
compatible (have different schemas). It is useful to illustrate a few examples of
how/why this doesnโt work (e.g. try UNIONing RETAIL_ORDER and
ORDER_ITEM to answer the English query โGive me all orders and their itemsโ
to distinguish this from a join).
๏ท
String comparisons using LIKE (and other operators) may or may not be casesensitive, depending on the DBMS used and on the default settings set up by the
DBA; see solutions to Case Question MDC-F for more details and suggestions.
๏ท
Screen shot solutions to all the queries in this chapter come from Microsoft
Access. Note that most of them are from Access 2016 but some are from older
versions of Access: the differences for the purposes of this chapter are entirely
cosmetic (font and other colors).
ANSWERS TO REVIEW QUESTIONS
What is an online transaction processing (OLTP) system? What is a business
intelligence (BI) system? What is a data warehouse?
An OLTP system is typically one in which a database is used to store information about daily
operational aspects of a business or other enterprise, such as sales, deposits, orders, customers,
etc. A business intelligence (BI) system is a system used to support management decisions by
producing information for assessment, analysis, planning and control. BI systems typically use
data from a data warehouse, which is a database typically combining information from
operational databases, other relevant internal data, and separately-purchased external data.
2.2
What is an ad-hoc query?
An ad-hoc query is a query created by the user as needed, rather than a query programmed into an
application.
2.3
What does SQL stand for, and what is SQL?
SQL stands for Structured Query Language. SQL is the universal query language for relational
DBMS products.
2.4
What does SKU stand for? What is an SKU?
SKU stands for stock keeping unit. An SKU is a an identifier used to label and distinguish each
item sold by a business.
Page 2-7
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.5
Summarize how data were altered and filtered in creating the Cape Codd data
extraction.
Data from the Cape Codd operational retail sales database were used to create a retail sales
extraction database with three tables: RETAIL_ORDER, ORDER_ITEM, and SKU_DATA.
The RETAIL_ORDER table uses only a few of the columns in the operational database. The
structure of the table is:
RETAIL_ORDER (OrderNumber, StoreNumber, StoreZip, OrderMonth, OrderYear,
OrderTotal)
For this table, the original column OrderDate (in the data format MM/DD/YYYY [04/26/2018])
was converted into the columns OrderMonth (in a Character(12) format so that each month is
spelled out [April]) and OrderYear (in an Integer format with each year appearing as a four-digit
year [2018]).
We also note that the OrderTotal column includes tax, shipping, and other charges that do not
appear in the data extract. Thus, it does not equal the sum of the related ExtendedPrice column in
the ORDER_ITEM table discussed below.
The ORDER_ITEM table uses an extract of the items purchased for each order. The structure of
the table is:
ORDER_ITEM (OrderNumber, SKU, Quantity, Price, ExtendedPrice)
For this table, there is one row for each SKU associated with a given OrderNumber, representing
one row for each type of item purchased in a specific order.
The SKU_DATA table uses an extract of the item identifying and describing data in the complete
operational table. The structure of the table is:
SKU_DATA (SKU, SKU_Description, Department, Buyer)
For this table, there is one row to describe each SKU, representing one particular item that is sold
by Cape Codd.
2.6
Explain in general terms the relationships of the RETAIL_ORDER, ORDER_ITEM,
SKU_DATA, and BUYER tables. What is the relationship of these tables to the
CATALOG_SKU_2017 and CATALOG_SKU_2018 tables?
In general, each sale in RETAIL_ORDER relates to one or more rows in ORDER_ITEM that
detail the items sold in the specific order. Each row in ORDER_ITEM is associated with a
specific SKU in the SKU_DATA table. Thus one SKU may be associated once with each
specific order number, but may also be associated with many different order numbers (as long as
it appears only once in each order). Each SKU has a buyer who purchased the item for Cape
Codd. The two CATALOG tables are not formally related to any of the other tables.
Using the Microsoft Access Relationship window, the relationships are shown in Figure 2-4 and
look like this:
Page 2-8
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-4 โ The Cape Codd Database
In traditional database terms (which will be discussed in Chapter 3) OrderNumber and SKU in
ORDER_ITEM are foreign keys that provide the links to the RETAIL_ORDER and SKU_DATA
tables respectively. Buyer in SKU_DATA is a foreign key linking to BuyerName in BUYER.
Supervisor in BUYER is a foreign key linked to BuyerName in BUYER. Using an underline to
show primary keys and italics to show foreign keys, the tables and their relationships are shown
as:
RETAIL_ORDER (OrderNumber, StoreNumber, StoreZip, OrderMonth, OrderYear,
OrderTotal)
ORDER_ITEM (OrderNumber, SKU, Quantity, Price, ExtendedPrice)
SKU_DATA (SKU, SKU_Description, Department, Buyer)
BUYER (BuyerName, Department, Position, Supervisor)
2.7
Summarize the background of SQL.
SQL was developed by IBM in the late 1970s, and in 1992 it was endorsed as a national standard
by the American National Standards Institute (ANSI). That version is called SQL-92. There is a
later version called SQL3 that has some object-oriented concepts, but SQL3 has not received
much commercial attention, although Oracle implements much of that functionality. Alterations
since SQL3 have mainly related to incorporating advanced data models (XML, JSON) and
temporal data; the primary functionality for our purposes has been fixed for some time. The latest
standard is SQL 2016, which added JSON support.
2.8
What is SQL-92? How does it relate to the SQL statements in this chapter?
Page 2-9
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SQL-92 is the version of SQL endorsed as a national standard by the American National
Standards Institute (ANSI) in 1992. It is the version of SQL supported by most commonly used
relational database management systems. The SQL statements in this chapter are based on SQL92 and the SQL standards that followed and modified it.
2.9
What features have been added to SQL in versions subsequent to SQL-92?
Versions of SQL subsequent to SQL-92 have extended features or added new features to SQL,
the most important of which, for our purposes, is support for Extensible Markup Language
(XML). Also see the solution to Review Question 2.7.
2.10
Why is SQL described as a data sublanguage?
A data sublanguage consists only of language statements for defining and processing a database.
To obtain a full programming language, SQL statements must be embedded in scripting
languages such as VBScript or in programming languages such as Java or C#.
2.11
What does DML stand for? What are DML statements?
DML stands for data manipulation language. DML statements are used for querying and
modifying data.
2.12
What does DDL stand for? What are DDL statements?
DDL stands for data definition language. DDL statements are used for creating tables,
relationships.
2.13
What is the SQL SELECT/FROM/WHERE framework?
The SQL SELECT/FROM/WHERE framework is the basis for queries in SQL. In this
framework:
2.14
๏ท
The SQL SELECT clause specifies which columns are to be listed in the query results.
๏ท
The SQL FROM clause specifies which tables are to be used in the query.
๏ท
The SQL WHERE clause specifies which rows are to be listed in the query results.
Explain how Microsoft Access uses SQL.
Microsoft Access uses SQL, but generally hides the SQL from the user. For example, Microsoft
Access automatically generates SQL and sends it to Microsoft Accessโs internal Access Database
Engine (ADE, which is a variant of the Microsoft Jet engine) every time you run a query, process
a form, or create a report. To go beyond elementary database processing, you need to know how
to use SQL in Microsoft Access. Queries in Access are by default created using the GUI QBE
interface, then translated into SQL for processing. One can also create SQL queries directly in
Access, bypassing QBE if desired.
2.15
Explain how enterprise-class DBMS products use SQL.
Page 2-10
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Enterprise-class DBMS products, which include Microsoft SQL Server, Oracle Corporationโs
Oracle Database and MySQL, and IBMโs DB2, require you to know and use SQL. All data
manipulation is expressed in SQL in these products.
The Cape Codd Outdoor Sports sale extraction database has been modified to include three
additional tables: the INVENTORY table, the WAREHOUSE table, and the
CATALOG_SKU_2016 table. The table schemas for these tables, RETAIL_ORDER,
ORDER_ITEM, SKU_DATA, BUYER, CATALOG_SKU_2017, and CATALOG_SKU_2018
tables, are as follows:
RETAIL_ORDER (OrderNumber, StoreNumber, StoreZip, OrderMonth, OrderYear,
OrderTotal)
ORDER_ITEM (OrderNumber, SKU, Quantity, Price, ExtendedPrice)
SKU_DATA (SKU, SKU_Description, Department, Buyer)
BUYER (BuyerName, Department, Position, Supervisor)
WAREHOUSE (WarehouseID, WarehouseCity, WarehouseState, Manager,
SquareFeet)
INVENTORY (WarehouseID, SKU, SKU_Description, QuantityOnHand,
QuantityOnOrder)
CATALOG_SKU_2016 (CatalogID, SKU, SKU_Description, CatalogPage,
DateOnWebSite)
CATALOG_SKU_2017 (CatalogID, SKU, SKU_Description, CatalogPage,
DateOnWebSite)
CATALOG_SKU_2018 (CatalogID, SKU, SKU_Description, CatalogPage,
DateOnWebSite)
The nine tables in the revised Cape Codd database schema are shown in Figure 2-35. The
column characteristics for the WAREHOUSE table are shown in Figure 2-36, the column
characteristics for the INVENTORY table are shown in Figure 2-37, and the column
characteristics for the CATALOG_SKU_2016 table are shown in Figure 2-38. The data for the
WAREHOUSE table are shown in Figure 2-39, the data for the INVENTORY table are shown in
Figure 2-40, and the data for the CATALOG_SKU_2016 table are shown in Figure 2-41.
Page 2-11
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-35 โ The Cape Codd Database with the WAREHOUSE, INVENTORY, and
CATALOG_SKU_2016 tables
Figure 2-36 – Column Characteristics for the Cape Codd Database WAREHOUSE Table
Page 2-12
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-37 – Column Characteristics for the Cape Codd Database INVENTORY Table
Figure 2-38 – Column Characteristics for the Cape Codd Database CATALOG_SKU_2016
Table
Page 2-13
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-39 – Cape Codd Database WAREHOUSE Table Data
Page 2-14
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-40 – Cape Codd Database INVENTORY Table Data
Page 2-15
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-41 – Cape Codd Database CATALOG_SKU_2016 Table Data
You will need to create and set up a database named Cape_Codd for use with the
Cape Codd review questions. You may have already created this database as suggested in this
chapter and used it to run the SQL queries discussed in the chapter. If you havenโt, you
need to do so now.
A Microsoft Access database named Cape_Codd.accdb is available on our Web site (www
.pearsonhighered.com/kroenke) that contains all the tables and data for the Cape Codd Outdoor
Sports sales data extract database. Also available on our Web site are SQL scripts for creating
and populating the tables for the Cape_Codd database in Microsoft SQL Server, Oracle
Database, and MySQL.
If you are using the Microsoft Access 2016 Cape_Codd.accdb database, simply copy it to
an appropriate location in your Documents folder. Otherwise, you will need to use the
discussion and instructions necessary for setting up the Cape_Codd database in the DBMS
product you are using:
โ For Microsoft SQL Server 2017, see online Chapter 10A.
โ For Oracle Database 12c Release 2 or Oracle Database XE, see online
Chapter 10B.
โ For MySQL 5.7 Community Server, see online Chapter 10C.
Once you have setup your Cape_Codd database, create an SQL script named Cape-CoddCH02-RQ.sql, and use it to record and store SQL statements that answer each of the following
questions (if the question requires a written answer, use an SQL comment to record your
answer):
NOTE: All answers below show the correct SQL statement, as well as SQL statements modified
for Microsoft Access 2016 when needed. Whenever possible, all results were obtained by
running the SQL statements in Microsoft Access 2016, and the corresponding screen shots of the
results are shown below. As explained in the text, some queries cannot be run in Microsoft
Access 2016, and for those queries the correct result was obtained using Microsoft SQL Server
2017. The SQL statements shown should run with little, if any, modification needed for Oracle
Page 2-16
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Database 12c Release 2, Oracle Database Express Edition 11g R2, and MySQL 5.7. A few of the
queries illustrate some minor syntactic differences between the systems. In those cases, we have
shown the minor changes necessary for Oracle Database and MySQL in this manual. In addition,
the solution files for each system of course have working queries for that system.
Solutions to Review Questions 2.17 โ 2.60 are contained in the Microsoft Access database DBPe15-IM-CH02-Cape-Codd-RQ.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke). Solutions in SQL Server, Oracle, and MySQL are also
available at the same site.
If your students are using a DBMS other than Microsoft Access, the SQL code to create and
populate the Cape Codd database is available in the *.sql script files for SQL Server 2017, Oracle
Database 12c Release 2/Express Edition 11gR2, and MySQL 5.7 in the Instructorโs Resource
Center on the textโs Web site (www.pearsonhighered.com/kroenke).
2.16
There is an intentional flaw in the design of the INVENTORY table used in these
exercises. This flaw was purposely included in the INVENTORY tables so that you can
answer some of the following questions using only that table. Compare the SKU and
INVENTORY tables, and determine what design flaw is included in INVENTORY.
Specifically, why did we include it?
The flaw is the inclusion of the SKU_Description attribute in the INVENTORY table. This
attribute duplicates the SKU_Description attribute and data in the SKU_DATA table, where the
attribute rightfully belongs. By duplicating SKU_Description in the INVENTORY table, we can
ask you to list the SKU and its associated description in a single table query against the
INVENTORY table. Otherwise, a two table query would be required. If these tables were in a
production database, we would eliminate the INVENTORY.SKU_Description column.
Use only the INVENTORY table to answer Review Questions 2.17 through 2.39:
2.17
Write an SQL statement to display SKU and SKU_Description.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
SKU, SKU_Description
INVENTORY;
Page 2-17
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
The question does not ask for unique SKU and SKU_Description data, but this could be obtained by
using:
SELECT
FROM
DISTINCT SKU, SKU_Description
INVENTORY;
Page 2-18
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.18
Write an SQL statement to display SKU_Description and SKU.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
SKU_Description, SKU
INVENTORY;
Page 2-19
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
The question does not ask for unique SKU and SKU_Description data, but this could be obtained by
using:
SELECT
FROM
DISTINCT SKU_Description, SKU
INVENTORY;
Page 2-20
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.19
Write an SQL statement to display WarehouseID.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
2.20
WarehouseID
INVENTORY;
Write an SQL statement to display unique WarehouseIDs.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Page 2-21
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
2.21
DISTINCT WarehouseID
INVENTORY;
Write an SQL statement to display all of the columns without using the SQL asterisk (*)
wildcard character.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WarehouseID, SKU, SKU_Description,
QuantityOnHand, QuantityOnOrder
INVENTORY;
Page 2-22
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.22
Write an SQL statement to display all of the columns using the SQL asterisk (*) wildcard
character.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
*
INVENTORY;
Page 2-23
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.23
Write an SQL statement to display all data on products having a QuantityOnHand
greater than 0.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
*
INVENTORY
QuantityOnHand >0;
Page 2-24
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.24
Write an SQL statement to display the SKU and SKU_Description for products having
QuantityOnHand equal to 0.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
SKU, SKU_Description
INVENTORY
QuantityOnHand = 0;
Page 2-25
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.25
Write an SQL statement to display the SKU, SKU_Description, and WarehouseID for
products having QuantityOnHand equal to 0. Sort the results in ascending order by
WarehouseID.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
SKU, SKU_Description, WarehouseID
FROM
INVENTORY
WHERE
QuantityOnHand =0
ORDER BY WarehouseID;
2.26
Write an SQL statement to display the SKU, SKU_Description, and WarehouseID for
products having QuantityOnHand greater than 0. Sort the results in descending order by
WarehouseID and ascending order by SKU.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-26
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SELECT
FROM
WHERE
ORDER BY
2.27
SKU, SKU_Description, WarehouseID
INVENTORY
QuantityOnHand > 0
WarehouseID DESC, SKU;
Write an SQL statement to display SKU, SKU_Description, and WarehouseID for all
products that have a QuantityOnHand equal to 0 and a QuantityOnOrder greater than 0.
Sort the results in descending order by WarehouseID and in ascending order by SKU.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-27
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SELECT
FROM
WHERE
AND
ORDER BY
2.28
SKU, SKU_Description, WarehouseID
INVENTORY
QuantityOnHand = 0
QuantityOnOrder > 0
WarehouseID DESC, SKU;
Write an SQL statement to display SKU, SKU_Description, and WarehouseID for all
products that have a QuantityOnHand equal to 0 or a QuantityOnOrder equal to 0. Sort
the results in descending order by WarehouseID and in ascending order by SKU.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
OR
ORDER BY
SKU, SKU_Description, WarehouseID
INVENTORY
QuantityOnHand = 0
QuantityOnOrder = 0
WarehouseID DESC, SKU;
Page 2-28
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.29
Write an SQL statement to display the SKU, SKU_Description, WarehouseID, and
QuantityOnHand for all products having a QuantityOnHand greater than 1 and less than
10. Do not use the BETWEEN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
AND
SKU, SKU_Description, WarehouseID, QuantityOnHand
INVENTORY
QuantityOnHand > 1
QuantityOnhand < 10;
Page 2-29
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.30
Write an SQL statement to display the SKU, SKU_Description, WarehouseID, and
QuantityOnHand for all products having a QuantityOnHand greater than 1 and less than
10. Use the BETWEEN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
2.31
SKU, SKU_Description, WarehouseID, QuantityOnHand
INVENTORY
QuantityOnHand BETWEEN 2 AND 9;
Write an SQL statement to show a unique SKU and SKU_Description for all products
having an SKU description starting with โHalf-domeโ.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that, as discussed in Chapter 2, Microsoft Access 2016 uses wildcard characters that differ
from the SQL standard.
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
WHERE
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE 'Half-dome%';
For Microsoft Access:
SELECT
FROM
WHERE
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE 'Half-dome*';
Page 2-30
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.32
Write an SQL statement to show a unique SKU and SKU_Description for all products
having a description that includes the word 'Climb'.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that, as discussed in Chapter 2, Microsoft Access 2016 uses wildcard characters that differ
from the SQL standard.
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
WHERE
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE '%Climb%';
For Microsoft Access:
SELECT
FROM
WHERE
2.33
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE '*Climb*';
Write an SQL statement to show a unique SKU and SKU_Description for all products
with a โdโ in the third position from the left in SKU_Description.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that, as discussed in Chapter 2, Microsoft Access 2016 uses wildcard characters that differ
from the SQL standard.
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
WHERE
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE '__d%';
For Microsoft Access:
SELECT
FROM
WHERE
DISTINCT SKU, SKU_Description
INVENTORY
SKU_Description LIKE '??d*';
Page 2-31
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.34
Write an SQL statement that uses all of the SQL built-in functions on the QuantityOnHand column. Include meaningful column names in the result.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
2.35
COUNT(QuantityOnHand) AS NumberOfRows,
SUM(QuantityOnHand) AS TotalQuantityOnHand,
AVG(QuantityOnHand) AS AverageQuantityOnHand,
MAX(QuantityOnHand) AS MaximumQuantityOnHand,
MIN(QuantityOnHand) AS MinimumQuantityOnHand
INVENTORY;
Explain the difference between the SQL built-in functions COUNT and SUM.
COUNT counts the number of rows or records in a table, while SUM adds up the data values in
the specified column.
2.36
Write an SQL statement to display the WarehouseID and the sum of QuantityOnHand
grouped by WarehouseID. Name the sum TotalItemsOnHand and display the results in
descending order of TotalItemsOnHand.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
GROUP BY
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHand
INVENTORY
WarehouseID
TotalItemsOnHand DESC;
Page 2-32
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
For Microsoft Access:
Unfortunately, Microsoft Access cannot process the ORDER BY clause because it contains an
aliased computed result. To correct this, we use an SQL statement with the un-aliased
computation:
SELECT
FROM
GROUP BY
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHand
INVENTORY
WarehouseID
SUM(QuantityOnHand) DESC;
The results, presented below in Access, are identical in all 4 DBMSs:
2.37
Write an SQL statement to display the WarehouseID and the sum of QuantityOnHand
grouped by WarehouseID. Omit all SKU items that have three or more items on hand
from the sum, name the sum TotalItemsOnHandLT3, and display the results in
descending order of TotalItemsOnHandLT3.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
WHERE
GROUP BY
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHandLT3
INVENTORY
QuantityOnHand < 3
WarehouseID
TotalItemsOnHandLT3 DESC;
For Microsoft Access:
Unfortunately, Microsoft Access cannot process the ORDER BY clause because it contains an
aliased computed result. To correct this, we use an SQL statement with the un-aliased
computation:
Page 2-33
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SELECT
FROM
WHERE
GROUP BY
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHandLT3
INVENTORY
QuantityOnHand < 3
WarehouseID
SUM(QuantityOnHand) DESC;
The results, presented below in Access, are identical in all 4 DBMSs:
2.38
Write an SQL statement to display the WarehouseID and the sum of QuantityOnHand
grouped by WarehouseID. Omit all SKU items that have three or more items on hand
from the sum, and name the sum TotalItemsOnHandLT3. Show Warehouse ID only for
warehouses having fewer than two SKUs in their TotalItemsOnHandLT3. Display the
results in descending order of TotalItemsOnHandLT3.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
For Microsoft SQL Server, Oracle Database and MySQL:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHandLT3
INVENTORY
QuantityOnHand < 3
WarehouseID
COUNT(*) < 2
TotalItemsOnHandLT3 DESC;
For Microsoft Access:
Unfortunately, Microsoft Access cannot process the ORDER BY clause because it contains an
aliased computed result. To correct this, we use an SQL statement with the un-aliased
computation:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
WarehouseID, SUM(QuantityOnHand) AS TotalItemsOnHandLT3
INVENTORY
QuantityOnHand < 3
WarehouseID
COUNT(*) < 2
SUM(QuantityOnHand) DESC;
Page 2-34
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
The results, presented below in Access, are identical in all 4 DBMSs:
2.39
In your answer to Review Question 2.38, was the WHERE clause or the HAVING clause
applied first? Why?
The WHERE clause is always applied before the HAVING clause. Otherwise there would be
ambiguity in the SQL statement and the results would differ according to which clause was
applied first.
Use both the INVENTORY and WAREHOUSE tables to answer Review Questions 2.40
through 2.52:
2.40
Write an SQL statement to display the SKU, SKU_Description, WarehouseID,
WarehouseCity, and WarehouseState for all items stored in the Atlanta, Bangor, or
Chicago warehouse. Do not use the IN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
AND
SKU, SKU_Description,
WAREHOUSE.WarehouseID, WarehouseCity, WarehouseState
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
(WarehouseCity = 'Atlanta'
OR
WarehouseCity = 'Bangor'
OR
WarehouseCity = 'Chicago');
Page 2-35
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.41
Write an SQL statement to display the SKU, SKU_Description, WarehouseID,
WarehouseCity, and WarehouseState for all items stored in the Atlanta, Bangor, or
Chicago warehouse. Use the IN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
AND
SKU, SKU_Description,
WAREHOUSE.WarehouseID, WarehouseCity, WarehouseState
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
WarehouseCity IN ('Atlanta', 'Bangor' ,'Chicago');
Page 2-36
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.42
Write an SQL statement to display the SKU, SKU_Description, WarehouseID,
WarehouseCity, and WarehouseState of all items not stored in the Atlanta, Bangor, or
Chicago warehouse. Do not use the NOT IN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
NOTE: The symbol for โnot equal toโ is . Since we want the query output for warehouses
that are not Atlanta or Bangor or Chicago as a set, we must ask for warehouses that are not in the
group (Atlanta and Bangor and Chicago). This means we use AND in the WHERE clause โ if
we used OR in the WHERE clause, we would end up with ALL warehouses being in the query
output. This happens because each OR eliminates only one warehouse, but that warehouse still
qualifies for inclusion in the other OR statements. To demonstrate this, substitute OR for each
AND in the SQL statement below.
SELECT
FROM
SKU, SKU_Description,
WAREHOUSE.WarehouseID, WarehouseCity, WarehouseState
INVENTORY, WAREHOUSE
Page 2-37
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
WHERE
AND
AND
AND
2.43
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
WarehouseCity ‘Atlanta’
WarehouseCity ‘Bangor’
WarehouseCity ‘Chicago’;
Write an SQL statement to display the SKU, SKU_Description, WarehouseID,
WarehouseCity, and WarehouseState of all items not stored in the Atlanta, Bangor, or
Chicago warehouse. Use the NOT IN keyword.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
AND
SKU, SKU_Description,
WAREHOUSE.WarehouseID, WarehouseCity, WarehouseState
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
WarehouseCity NOT IN (‘Atlanta’, ‘Bangor’ ,’Chicago’);
Page 2-38
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.44
Write an SQL statement to produce a single column called ItemLocation that combines
the SKU_Description, the phrase โis located inโ, and WarehouseCity. Do not be
concerned with removing leading or trailing blanks.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that the SQL syntax for string concatenation will vary depending upon the DBMSโsee the
discussion in Chapter 2.
SELECT
FROM
WHERE
SKU_Description+’ is located in ‘
+WarehouseCity AS ITEM_Location
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID;
Page 2-39
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.45
Write an SQL statement to show the SKU, SKU_Description, and WarehouseID for all
items stored in a warehouse managed by โLucille Smithโ. Use a subquery.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-40
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SELECT
FROM
WHERE
2.46
SKU, SKU_Description, WarehouseID
INVENTORY
WarehouseID IN
(SELECT
WarehouseID
FROM
WAREHOUSE
WHERE
Manager = ‘Lucille Smith’);
Write an SQL statement to show the SKU, SKU_Description, and WarehouseID for all
items stored in a warehouse managed by โLucille Smithโ. Use a join, but do not use JOIN
ON syntax.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
SKU, SKU_Description, WAREHOUSE.WarehouseID
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
AND
Manager = ‘Lucille Smith’;
Page 2-41
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.47
Write an SQL statement to show the SKU, SKU_Description, and WarehouseID for all
items stored in a warehouse managed by โLucille Smithโ. Use a join using JOIN ON
syntax.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
ON
WHERE
SKU, SKU_Description, WAREHOUSE.WarehouseID
INVENTORY JOIN WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
Manager = ‘Lucille Smith’;
For Microsoft Access:
Microsoft Access requires the SQL JOIN ON syntax INNER JOIN instead of just JOIN:
SELECT
FROM
ON
WHERE
2.48
SKU, SKU_Description, WAREHOUSE.WarehouseID
INVENTORY INNER JOIN WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
Manager = ‘Lucille Smith’;
Write an SQL statement to show the WarehouseID and average QuantityOnHand of all
items stored in a warehouse managed by โLucille Smithโ. Use a subquery.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-42
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Note that the โGROUP BYโ clause is necessary here since warehouse manager names are not
necessarily unique: since the question asks for warehouse ID, there should be one result for each
warehouse managed by a โLucille Smithโ.
SELECT
FROM
WHERE
GROUP BY
2.49
WarehouseID,
AVG(QuantityOnHand) AS AverageQuantityOnHand
INVENTORY
WarehouseID IN
(SELECT
WarehouseID
FROM
WAREHOUSE
WHERE
Manager = ‘Lucille Smith’)
WarehouseID;
Write an SQL statement to show the WarehouseID and average QuantityOnHand of all
items stored in a warehouse managed by โLucille Smithโ. Use a join, but do not use
JOIN ON syntax.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that the โGROUP BYโ clause is necessary here since warehouse manager names are not
necessarily unique: since the question asks for warehouse ID, there should be one result for each
warehouse managed by a โLucille Smithโ.
SELECT
FROM
WHERE
AND
GROUP BY
INVENTORY.WarehouseID,
AVG(QuantityOnHand) AS AverageQuantityOnHand
INVENTORY, WAREHOUSE
INVENTORY.WarehouseID = WAREHOUSE.WarehouseID
Manager = ‘Lucille Smith’
INVENTORY.Warehouse.ID;
Note the use of the complete references to INVENTORY.WarehouseIDโthe query will NOT
work without them.
Page 2-43
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.50
Write an SQL statement to show the WarehouseID and average QuantityOnHand of all
items stored in a warehouse managed by โLucille Smithโ. Use a join using JOIN ON
syntax.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that the โGROUP BYโ clause is necessary here since warehouse manager names are not
necessarily unique: since the question asks for warehouse ID, there should be one result for each
warehouse managed by a โLucille Smithโ.
For Microsoft SQL Server, Oracle Database, and MySQL:
SELECT
FROM
ON
WHERE
GROUP BY
INVENTORY.WarehouseID,
AVG(QuantityOnHand) AS AverageQuantityOnHand
INVENTORY JOIN WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
Manager = ‘Lucille Smith’
INVENTORY.WarehouseID;
For Microsoft Access:
Microsoft Access requires the SQL JOIN ON syntax INNER JOIN instead of just JOIN:
SELECT
FROM
ON
WHERE
GROUP BY
2.51
INVENTORY.WarehouseID,
AVG(QuantityOnHand) AS AverageQuantityOnHand
INVENTORY INNER JOIN WAREHOUSE
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
Manager = ‘Lucille Smith’
INVENTORY.WarehouseID;
Write an SQL statement to show the WarehouseID, WarehouseCity, WarehouseState,
Manager, SKU, SKU_Description, and QuantityOnHand of all items stored in a
warehouse managed by โLucille Smithโ. Use a join using JOIN ON syntax.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-44
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
SELECT
WAREHOUSE.WarehouseID, WarehouseCity,
WarehouseState, Manager,
SKU, SKU_Description, QuantityOnHand
FROM
INVENTORY INNER JOIN WAREHOUSE
ON
INVENTORY.WarehouseID=WAREHOUSE.WarehouseID
WHERE Manager = ‘Lucille Smith’;
Note the use of the complete references to INVENTORY.WarehouseID and
WAREHOUSE.WarehouseIDโthe query will NOT work without them.
The above version of the query works in Access, SQL Server, Oracle Database, and MySQL.
The โINNERโ keyword is required in Access, but is optional in SQL Server, Oracle, and MySQL.
In addition, this query could benefit from aliasing (range variables) for readability, but that syntax
is slightly different in Oracle than in the other three systems (the โASโ keyword is not allowed in
Oracle). Thus the most typical, preferred solutions for each system are as follows:
For Microsoft Access:
SELECT
W.WarehouseID, WarehouseCity,
WarehouseState, Manager,
SKU, SKU_Description, QuantityOnHand
FROM
INVENTORY AS I INNER JOIN WAREHOUSE AS W
ON
I.WarehouseID=W.WarehouseID
WHERE
Manager = ‘Lucille Smith’;
For Oracle Database:
SELECT
W.WarehouseID, WarehouseCity,
WarehouseState, Manager,
SKU, SKU_Description, QuantityOnHand
FROM
INVENTORY I INNER JOIN WAREHOUSE W
ON
I.WarehouseID=W.WarehouseID
WHERE Manager = ‘Lucille Smith’;
For SQL Server and MySQL:
SELECT
W.WarehouseID, WarehouseCity,
WarehouseState, Manager,
SKU, SKU_Description, QuantityOnHand
FROM
INVENTORY AS I JOIN WAREHOUSE AS W
ON
I.WarehouseID=W.WarehouseID
WHERE Manager = ‘Lucille Smith’;
Page 2-45
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.52
Write an SQL statement to display the WarehouseID, the sum of QuantityOnOrder, and
sum of QuantityOnHand, grouped by WarehouseID and QuantityOnOrder. Name the
sum of QuantityOnOrder as TotalItemsOnOrder and the sum of QuantityOnHand as
TotalItemsOnHand. Use only the INVENTORY table in your SQL statement.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
GROUP BY
2.53
WarehouseID,
SUM(QuantityOnOrder) AS TotalItemsOnOrder,
SUM(QuantityOnHand) AS TotalItemsOnHand
INVENTORY
WarehouseID, QuantityOnOrder;
Explain why you cannot use a subquery in your answer to Review Question 2.52.
In a query that contains a subquery, only data from fields in the table used in the top-level query
can be included in the SELECT statement. If data from fields from other tables are also needed, a
Page 2-46
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
join must be used. In question 2.52 we needed to display WAREHOUSE.Manager but
INVENTORY would have been the table in the top-level query. Therefore, we had to use a join.
2.54
Explain how subqueries and joins differ.
(1) In a query that contains a subquery, only data from fields in the table used in the top-level
query can be included in the SELECT statement. If data from fields from other tables are also
needed, a join must be used. See the answer to question 2.53.
(2) The subqueries in this chapter are non-correlated subqueries, which have an equivalent join
structure. In Chapter 8, correlated subqueries will be discussed, and correlated subqueries do
not have an equivalent join structureโyou must use subqueries.
2.55
Write an SQL statement to join WAREHOUSE and INVENTORY and include all rows of
WAREHOUSE in your answer, regardless of whether they have any INVENTORY.
Include all columns of both tables, but do not repeat the join columns.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
W.*, I.SKU, I.SKU_Description, I.QuantityOnHand,
I.QuantityOnOrder
FROM
WAREHOUSE AS W LEFT JOIN INVENTORY AS I
ON W.WarehouseID = I.WarehouseID;
In Oracle, the โASโ keyword is not permitted in the โJOINโ clause, so the Oracle Database
solution is:
SELECT
W.*, I.SKU, I.SKU_Description, I.QuantityOnHand,
I.QuantityOnOrder
FROM
WAREHOUSE W LEFT JOIN INVENTORY I
ON W.WarehouseID = I.WarehouseID;
Page 2-47
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Use both the CATALOG_SKU_2016 and CATALOG_SKU_2017 tables to answer Review
Questions 2.56 through 2.60 (for Microsoft Access 2016 and MySQL 5.7, 2.56 and 2.57 only):
2.56
Write an SQL statement to display the SKU, SKU_Description, and Department of all
SKUs that appear in either the Cape Codd 2016 Catalog (either in the printed catalog or
on the Web site) or the Cape Codd 2017 catalog (either in the printed catalog or on the
Web site) or both.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
UNION
SELECT
FROM
SKU, SKU_Description, Department
CATALOG_SKU_2016
SKU, SKU_Description, Department
CATALOG_SKU_2017;
Page 2-48
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.57
Write an SQL statement to display the SKU, SKU_Description, and Department of all
SKUs that appear in either the Cape Codd 2016 Catalog (only in the printed catalog
itself) or the Cape Codd 2017 catalog (only in the printed catalog itself) or both.
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
SELECT
FROM
WHERE
UNION
SELECT
FROM
WHERE
SKU, SKU_Description, Department
CATALOG_SKU_2016
CatalogPage IS NOT NULL
SKU, SKU_Description, Department
CATALOG_SKU_2017
CatalogPage IS NOT NULL;
Page 2-49
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.58
Write an SQL statement to display the SKU, SKU_Description, and Department of all
SKUs that appear in both the Cape Codd 2016 Catalog (either in the printed catalog or
on the Web site) and the Cape Codd 2017 catalog (either in the printed catalog or on the
Web site).
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that Oracle Database and SQL Server support INTERSECT directly. In MySQL and
Access INTERSECT is not supported but can be simulated using a join.
For Oracle and SQL Server:
SELECT
FROM
INTERSECT
SELECT
FROM
SKU, SKU_Description, Department
CATALOG_SKU_2016
SKU, SKU_Description, Department
CATALOG_SKU_2017;
For MySQL and Access:
SELECT
FROM
ON
2.59
DISTINCT CS16.SKU, CS16.SKU_Description, CS16.Department
CATALOG_SKU_2016 AS CS16
INNER JOIN CATALOG_SKU_2017 AS CS17
CS16.SKU = CS17.SKU;
Write an SQL statement to display the SKU, SKU_Description, and Department of all
SKUs that appear in both the Cape Codd 2016 Catalog (only in the printed catalog itself)
and the Cape Codd 2017 catalog (only in the printed catalog itself).
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-50
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Note that Oracle Database and SQL Server support INTERSECT directly. In MySQL and
Access INTERSECT is not supported but can be simulated using a join.
For Oracle and SQL Server:
SELECT
FROM
WHERE
INTERSECT
SELECT
FROM
WHERE
SKU, SKU_Description, Department
CATALOG_SKU_2016
CatalogPage IS NOT NULL
SKU, SKU_Description, Department
CATALOG_SKU_2017
CatalogPage IS NOT NULL;
For MySQL and Access:
SELECT
FROM
DISTINCT CS16.SKU, CS16.SKU_Description, CS16.Department
CATALOG_SKU_2016 AS CS16
INNER JOIN CATALOG_SKU_2017 AS CS17
ON
CS16.SKU = CS17.SKU
WHERE CS16.CatalogPage IS NOT NULL AND CS17.CatalogPage IS NOT NULL;
2.60
Write an SQL statement to display the SKU, SKU_Description, and Department of all
SKUs that appear in only the Cape Codd 2016 Catalog (either in the printed catalog or
on the Web site) and not in the Cape Codd 2017 catalog (either in the printed catalog or
on the Web site).
SQL Solutions to Project Questions 2.17 โ 2.60 are contained in the Microsoft Access database
DBP-e15-IM-CH02-Cape-Codd-RQ.accdb and in the corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Note that Oracle Database and SQL Server support set subtraction directly. In MySQL and
Access this operation is not supported but can be simulated using an outer join.
Page 2-51
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
For SQL Server:
SELECT
FROM
EXCEPT
SELECT
FROM
SKU, SKU_Description, Department
CATALOG_SKU_2016
SKU, SKU_Description, Department
CATALOG_SKU_2017;
For Oracle:
SELECT
FROM
MINUS
SELECT
FROM
SKU, SKU_Description, Department
CATALOG_SKU_2016
SKU, SKU_Description, Department
CATALOG_SKU_2017;
For MySQL and Access:
SELECT
FROM
DISTINCT CS16.SKU, CS16.SKU_Description, CS16.Department
CATALOG_SKU_2016 AS CS16
LEFT OUTER JOIN
CATALOG_SKU_2017 AS CS17
ON
CS16.SKU = CS17.SKU
WHERE
CS17.SKU IS NULL;
๏ถ
ANSWERS TO EXERCISES
For this set of project questions, we will extend the Microsoft Access 2016 database for
Wedgewood Pacific (WP) that we created in Chapter 1. Founded in 1987 in Seattle,
Washington, this company manufactures and sells consumer drone aircraft. This is an
innovative and rapidly expanding market. In January 2016, the FAA said that 181,000 drones
(out of the approximately 700,000 drones that may have been sold during the 2015 Christmas
season) had been registered under the new FAA drone registration rules.
WP currently produces three drone models: the Alpha III, the Bravo III, and the Delta IV. These
products are created by WPโs Research and Development group and produced at WPโs
production facilities. WP manufactures some of the parts used in the drones, but also purchases
some parts from other suppliers.
The company is located in two buildings. One building houses the Administration, Lega.,
Finance, Accounting, Human Resources, and Sales and Marketing departments, and the
second houses the Information Systems, Research and Development, and Production
departments. The company database contains data about employees; departments; projects;
assets, such as finished goods inventory, parts inventory, and computer equipment; and other
Page 2-52
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
aspects of company operations. In the following project questions, we have already created the
WP.accdb database with the following two tables (see Chapter 1 Project Questions):
DEPARTMENT (DepartmentName, BudgetCode, OfficeNumber, DepartmentPhone)
EMPLOYEE (EmployeeNumber, FirstName, LastName, Department, Position,
Supervisor, OfficePhone, EmailAddress)
Now we will add in the following two tables:
PROJECT (ProjectID, Name, Department, MaxHours, StartDate, EndDate)
ASSIGNMENT (ProjectID, EmployeeNumber, HoursWorked)
Where
Department in EMPLOYEE must exist in DepartmentName in DEPARTMENT
Supervisor in EMPLOYEE must exist in EmployeeNumber in EMPLOYEE
Department in PROJECT must exist in DepartmentName in DEPARTMENT
EmployeeNumber in ASSIGNMENT must exist in EmployeeNumber in EMPLOYEE
ProjectID in ASSIGNMENT must exist in ProjectID in PROJECT
The four tables in the revised WP database schema are shown in Figure 2-42 without the
recursive relationship in the EMPLOYEE table (which we will add in the following exercise
questions). The column characteristics for the PROJECT table are shown in Figure 2-43, and
the column characteristics for the ASSIGNMENT table are shown in Figure 2-45. Data for the
PROJECT table are shown in Figure 2-44, and the data for the ASSIGNMENT table are shown
in Figure 2-46.
Figure 2-42 โ The WP Database with the PROJECT and ASSIGNMENT Tables
Page 2-53
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.61
Figure 2-43 shows the column characteristics for the WP PROJECT table. Using the
column characteristics, create the PROJECT table in the WP.accdb database.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Figure 2-43 – Column Characteristics for the PROJECT Table
Page 2-54
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.62
Create the relationship and referential integrity constraint between PROJECT and
DEPARTMENT. In the Edit Relationship dialog box, enable enforcing of referential
integrity and cascading of data updates, but do not enable cascading of data from
deleted records. We will define cascading actions in Chapter 6.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-55
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.63
Figure 2-44 shows the data for the WP PROJECT table. Using the Datasheet view, enter
the data shown in Figure 2-44 into your PROJECT table.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Figure 2-44 – Sample Data for the PROJECT Table
2.64
Figure 2-45 shows the column characteristics for the WP ASSIGNMENT table. Using the
column characteristics, create the ASSIGNMENT table in the WP.accdb database.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-56
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-45 – Column Characteristics for the ASSIGNMENT Table
2.65
Create the relationship and referential integrity constraint between ASSIGNMENT and
EMPLOYEE. In the Edit Relationship dialog box, enable enforcing of referential integrity,
but do not enable either cascading updates or the cascading of data from deleted
records.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-57
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.66
Create the relationship and referential integrity constraint between ASSIGNMENT and
PROJECT. In the Edit Relationship dialog box, enable enforcing of referential integrity
and cascading of deletes, but do not enable cascading updates.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-58
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.67
Figure 2-46 shows the data for the WP ASSIGNMENT table. Using the Datasheet view,
enter the data shown in Figure 2-46 into your ASSIGNMENT table.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
Page 2-59
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-46 – Sample Data for the WP Database ASSIGNMENT Table
Page 2-60
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
2.68
In Exercise 2.63, the table data was entered after referential integrity constraints were
created in Exercise 2.62. In Exercise 2.67, the table data was entered after referential
integrity constraints were created in Exercises 2.65 and 2.66. Why was the data entered
after the referential integrity constraints were created instead of before the constraints
were created?
Page 2-61
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Both the PROJECT and ASSIGNMENT tables have foreign keys. PROJECT.Department is the
foreign key in PROJECT, and both ASSIGNMENT.ProjectID and
ASSIGNMENT.EmployeeNumber are foreign keys in ASSIGNMENT. If data was entered into
these columns before the referential integrity constraints were established, it would be possible to
enter foreign key data that had no corresponding primary key data. Thus, we establish the
referential integrity constraints so that the DBMS will not allow inconsistent data to be entered
into the foreign key columns.
2.69
Using Figure 2-31 for reference, create the recursive relationship and referential integrity
constraint between Supervisor and BuyerName in BUYER. In the Edit Relationship
dialog box, enable enforcing of referential integrity and cascading up data updates, but
do not enable cascading of data from deleted records. HINT: to create a recursive
relationship, add another copy of the BUYER table to the relationships window by rightclicking in that window and selecting Show Table.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
2.70
Using Microsoft Access SQL, create and run queries to answer the following questions.
Save each query using the query name format SQL-Query-02-##, where the ## sign is
Page 2-62
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
replaced by the letter designator of the question. For example, the first query will be
saved as SQL-Query-02-A.
Solutions to Project Questions 2.61 โ 2.70 are contained in the Microsoft Access database DBPe15-IM-CH02-WP.accdb which is available on the textโs Web site
(www.pearsonhighered.com/kroenke).
A. What projects are in the PROJECT table? Show all information for each project.
/*****
Question A – SQL-Query-02-A
************************/
SELECT * FROM PROJECT;
B. What are the ProjectID, ProjectName, StartDate, and EndDate values of projects in
the PROJECT table?
/*****
Question B – SQL-Query-02-B
************************/
SELECT
FROM
ProjectID, ProjectName, StartDate, EndDate
PROJECT;
C. What projects in the PROJECT table started before August 1, 2018? Show all the
information for each project.
Page 2-63
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/*****
Question C – SQL-Query-02-C
SELECT
FROM
WHERE
*
PROJECT
StartDate 100
CUSTOMER.CustomerID = INVOICE.CustomerID;
Page 2-88
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
E. List the LastName, FirstName, and Phone of all customers whose first name starts
with ‘B’.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
The correct SQL-92 statement for Oracle Database, SQL Server, and MySQL, which uses the
wildcard %, is:
/* *** SQL-Query-MDC-E *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
FirstName LIKE ‘B%’;
/* *** SQL-Query-MDC-E-Access *** */
However, Microsoft Access uses the wildcard *, which gives the following SQL statement:
/* *** SQL-Query-MDC-E-Access *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
FirstName LIKE ‘B*’;
F. List the LastName, FirstName, and Phone of all customers whose last name includes
the characters ‘cat’.
Page 2-89
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note that LIKE comparisons will not always work the way you expect: You need to
understand when the comparisons are case-sensitive and when they are not. Before running
any query involving LIKE, run a small test query to determine whether your DBMS as
configured by your DBA is comparing with case sensitivity or not. If you are using Oracle
Database, MySQL, or SQL Server, there are ways to force a LIKE comparison to be casesensitive or case-insensitive; those details are beyond the scope of this text. Microsoft
Access, by default, is case-insensitive. To do a case-sensitive LIKE comparison in Microsoft
Access, use the โinstrโ function instead of โLIKEโ (see DBP-e15-IM-CH02-MDC.accdb for
the solution).
The previous paragraph explains why, in general, you may get different results than those
presented below for Access (the Access results are for a default, case-insensitive query). If
you are using a DBMS in which the comparisons are case-sensitive, then only the first row in
the results below will appear.
The correct SQL-92 statement, for Oracle Database, MySQL, and SQL Server, which uses
the wildcard %, is:
/* *** SQL-Query-MDC-F *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
LastName LIKE ‘%cat%’;
However, Microsoft Access uses the wildcard *, which gives the following SQL statement:
/* *** SQL-Query-MDC-F-Access *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
LastName LIKE ‘*cat*’;
G. List the LastName, FirstName, and Phone for all customers whose second and third
digits (from the left) of their phone number are 23. For example, any phone number
with an area code of โ723โ would meet the criteria.
Page 2-90
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note that since the phone numbers in this database include the area code, we are really
finding phone numbers with โ23โ as the second and third numbers in the area code. We
could, of course, write statements to find โ23โ in the prefix or in the 4-digit sequence portion
of the phone number.
The correct SQL-92 statement, which uses the wildcards % and _, is:
/* *** SQL-Query-MDC-G *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
Phone LIKE ‘_23%’;
However, Microsoft Access uses the wildcards * and ?, which give the following SQL
statement:
/* *** SQL-Query-MDC-G-Access *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
Phone LIKE ‘?23*’;
H. Determine the maximum and minimum TotalAmount.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-H *** */
SELECT
MAX (TotalAmt) AS MaxTotalAmount,
Page 2-91
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
FROM
I.
MIN (TotalAmt) AS MinTotalAmount
INVOICE;
Determine the average TotalAmount.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-I *** */
SELECT
FROM
AVG (TotalAmt) AS AvgTotalAmount
INVOICE;
J. Count the number of customers.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-J *** */
SELECT
FROM
Count (*)AS NumberOfCustomers
CUSTOMER;
K. Group customers by LastName and then by FirstName.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Page 2-92
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-K *** */
SELECT
LastName, FirstName
FROM
CUSTOMER
GROUP BY LastName, FirstName;
L. Count the number of customers having each combination of LastName and
FirstName.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-L *** */
SELECT
LastName, FirstName,
COUNT (*) AS Last_First_Combination_Count
FROM
CUSTOMER
GROUP BY LastName, FirstName;
M. Show the LastName, FirstName, and Phone of all customers who have had an order
with TotalAmount greater than $100.00. Use a subquery. Present the results sorted
by LastName in ascending order and then FirstName in descending order.
Page 2-93
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-M *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
CustomerID IN
(SELECT CustomerID
FROM INVOICE
WHERE TotalAmount > 100)
ORDER BY LastName, FirstName DESC;
N. Show the LastName, FirstName and Phone of all customers who have had an order
with TotalAmount greater than $100.00. Use a join, but do not use JOIN ON syntax.
Present results sorted by LastName in ascending order and then FirstName in
descending order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-N *** */
SELECT
LastName, FirstName, Phone
FROM
CUSTOMER, INVOICE
WHERE
CUSTOMER.CustomerID = INVOICE.CustomerID
AND
TotalAmount > 100
ORDER BY LastName, FirstName DESC;
Page 2-94
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
O. Show the LastName, FirstName and Phone of all customers who have had an order
with TotalAmount greater than $100.00. Use a join using JOIN ON syntax. Present
results sorted by LastName in ascending order and then FirstName in descending
order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-O *** */
SELECT
CUSTOMER.LastName, CUSTOMER.FirstName, CUSTOMER.Phone
FROM
CUSTOMER JOIN INVOICE
ON
CUSTOMER.CustomerID = INVOICE.CustomerID
WHERE
INVOICE.TotalAmount>100
ORDER BY LastName, FirstName DESC;
Note that for Microsoft Access, we must use the INNER JOIN syntax:
/* *** SQL-Query-MDC-O *** */
SELECT
CUSTOMER.LastName, CUSTOMER.FirstName, CUSTOMER.Phone
FROM
CUSTOMER INNER JOIN INVOICE
ON
CUSTOMER.CustomerID = INVOICE.CustomerID
WHERE
INVOICE.TotalAmount>100
ORDER BY LastName, FirstName DESC;
P. Show the LastName, FirstName and Phone of all customers who have had an order
with an Item named โDress Shirtโ. Use a subquery. Present results sorted by
LastName in ascending order and then FirstName in descending order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note the solution below uses 2 subqueries; other correct solutions are possible that use one
subquery and a join (the question does not specify that two subqueries must be used).
Page 2-95
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-MDC-P *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
CustomerID IN
(SELECT CustomerID
FROM
INVOICE
WHERE
InvoiceNumber IN
(SELECT InvoiceNumber
FROM INVOICE_ITEM
WHERE Item = ‘Dress Shirt’))
ORDER BY LastName, FirstName DESC;
Q. Show the LastName, FirstName and Phone of all customers who have had an order
with an Item named โDress Shirtโ. Use a join, but do not use JOIN ON syntax.
Present results sorted by LastName in ascending order and then FirstName in
descending order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e14-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MDC-Q-Access *** */
SELECT
LastName, FirstName, Phone
FROM
CUSTOMER, INVOICE, INVOICE_ITEM
WHERE
CUSTOMER.CustomerID = INVOICE.CustomerID
AND
INVOICE.InvoiceNumber = INVOICE_ITEM.InvoiceNumber
AND
INVOICE_ITEM.Item = ‘Dress Shirt’
ORDER BY LastName, FirstName DESC;
Page 2-96
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
R. Show the LastName, FirstName and Phone of all customers who have had an order
with an Item named โDress Shirtโ. Use a join using JOIN ON syntax. Present
results sorted by LastName in ascending order and then FirstName in descending
order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For Oracle Database, SQL Server, and MySQL:
/* *** SQL-Query-MDC-R *** */
SELECT
CUSTOMER.LastName, CUSTOMER.FirstName,
CUSTOMER.Phone
FROM
(CUSTOMER JOIN INVOICE
ON CUSTOMER.CustomerID = INVOICE.CustomerID)
JOIN INVOICE_ITEM
ON INVOICE.InvoiceNumber = INVOICE_ITEM.InvoiceNumber
WHERE
INVOICE_ITEM.Item=’Dress Shirt’
ORDER BY LastName, FirstName DESC;
Note that for Microsoft Access, we must use the INNER JOIN syntax:
/* *** SQL-Query-MDC-R-Access *** */
SELECT
CUSTOMER.LastName, CUSTOMER.FirstName,
CUSTOMER.Phone
FROM
(CUSTOMER INNER JOIN INVOICE
ON CUSTOMER.CustomerID = INVOICE.CustomerID)
INNER JOIN INVOICE_ITEM
ON INVOICE.InvoiceNumber = INVOICE_ITEM.InvoiceNumber
WHERE
INVOICE_ITEM.Item =’Dress Shirt’
ORDER BY LastName, FirstName DESC;
Page 2-97
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
S. Who referred each customer to Marciaโs Dry Cleaning? Show columns named
CustomerLastName, CustomerFirstName, ReferredByLastName, and
ReferredByFirstName. Include the names of customers who were not referred by any
other customer in the results of the query.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
SELECT CUST.LastName AS CustomerLastName, CUST.FirstName AS
CustomerFirstName, REFER.LastName AS ReferredByLastName,
REFER.FirstName AS ReferredByFirstName
FROM CUSTOMER CUST LEFT JOIN CUSTOMER REFER
ON CUST.ReferredBy = REFER.CustomerID;
T. Show the LastName, FirstName, and Phone of all customers who have had an order
with an Item named โDress Shirtโ. Use a combination of a join using JOIN ON
syntax with a subquery. Present results sorted by LastName in ascending order and
then FirstName in descending order.
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Page 2-98
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note that multiple correct solutions are possible here; this solution joins CUSTOMER with
INVOICE and uses INVOICE_ITEM by itself in the subquery. Another solution would use
CUSTOMER by itself in the main query then a subquery that contains a join of INVOICE
and INVOICE_ITEM. Both versions are presented in the solution files.
For SQL Server, MySQL, and Oracle Database:
/* *** SQL-Query-MDC *** */
SELECT
LastName, FirstName, Phone
FROM
CUSTOMER JOIN INVOICE
ON
CUSTOMER.CustomerID = INVOICE.CustomerID
WHERE INVOICE.InvoiceNumber IN
(SELECT InvoiceNumber
FROM INVOICE_ITEM
WHERE Item = ‘Dress Shirt’)
ORDER BY LastName, FirstName DESC;
The Access version requires the โINNER JOINโ syntax:
/* *** SQL-Query-MDC-Access *** */
SELECT
LastName, FirstName, Phone
FROM
CUSTOMER INNER JOIN INVOICE
ON
CUSTOMER.CustomerID = INVOICE.CustomerID
WHERE INVOICE.InvoiceNumber IN
(SELECT InvoiceNumber
FROM INVOICE_ITEM
WHERE Item = ‘Dress Shirt’)
ORDER BY LastName, FirstName DESC;
U. Show the LastName, FirstName, Phone, and TotalAmount of all customer orders that
included an Item named โDress Shirtโ. Also show the LastName, FirstName, and
Phone of all other customers. Present results sorted by TotalAmount in ascending
order, then LastName in ascending order, and then FirstName in descending order.
Page 2-99
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
HINT: In Microsoft Access 2016, you will either need to use a UNION statement or a
sequence of two queries to solve this because Microsoft Access disallows nesting an
INNER join inside a LEFT OUTER or RIGHT OUTER join. The other DBMS products
can complete this question with one query (not a UNION statement).
Solutions to Marciaโs Dry Cleaning questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MDC.accdb and in the corresponding files for Oracle Database, SQL
Server, and MySQL, which are all available at the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note that this is a very challenging question! The best solution involves adding the โDress
Shirtโ restriction to the inner JOIN before performing the LEFT JOIN, otherwise (if we put
the โDress Shirtโ restriction in the WHERE clause) every customer will have an invoice so the
LEFT JOIN will not produce any NULLs, and we will get an incorrect result from the query.
Examples of this are not covered in the text, but at the same time, the text does not say you
canโt do it either.
The LEFT JOIN solution for Oracle Database, MySQL, and SQL Server:
/* *** SQL-Query-MDC-U *** */
SELECT LastName, FirstName, Phone, TotalAmount
FROM CUSTOMER C LEFT JOIN (INVOICE I JOIN INVOICE_ITEM II
ON I.InvoiceNumber = II.InvoiceNumber AND II.Item = ‘Dress
Shirt’)
ON C.CustomerID = I.CustomerID
ORDER BY TotalAmount, LastName, FirstName DESC;
Note that Microsoft Access does not allow nesting an INNER JOIN inside a LEFT or RIGHT
JOIN. It also disallows adding the non-join condition to the โONโ clause. So in order to
create a solution in Access, we must either (1) use a more complicated version of the query
with a UNION but without an OUTER JOIN or (2) create and save an intermediate query
(view) to be used in the final query. Note that these two approaches will also work with
Oracle, SQL Server, or MySQL.
/* *** SQL-Query-MDC-U-UNION *** */
SELECT LastName, FirstName, Phone, TotalAmount
FROM CUSTOMER C, INVOICE I, INVOICE_ITEM II
WHERE C.CustomerID = I.CustomerID AND I.InvoiceNumber =
II.InvoiceNumber AND II.Item = ‘Dress Shirt’
UNION SELECT LastName, FirstName, Phone, NULL
FROM CUSTOMER
WHERE CustomerID NOT IN
(SELECT CustomerID
FROM INVOICE I, INVOICE_ITEM II
WHERE I.InvoiceNumber = II.InvoiceNumber AND II.Item = ‘Dress
Shirt’)
ORDER BY TotalAmount, LastName, FirstName DESC;
The other approach using Access involves writing and saving an intermediate query (also
called a โviewโ; see Chapter 7). We first write and save a query that produces the
CustomerID and TotalAmount for all invoices involving a โDress Shirtโ:
Page 2-100
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-MDC-U-Temp *** */
SELECT CustomerID, TotalAmount
FROM INVOICE I, INVOICE_ITEM II
WHERE I.InvoiceNumber = II.InvoiceNumber AND II.Item = โDress
Shirtโ;
Now we can use that temporary query as if it were just another table to produce the final
result:
/* *** SQL-Query-MDC-U-Final *** */
SELECT LastName, FirstName, Phone, TotalAmount
FROM CUSTOMER AS C LEFT OUTER JOIN [SQL-Query-MDC-U-Temp] AS T
ON C.CustomerID = T.CustomerID
ORDER BY TotalAmount, LastName, FirstName DESC;
The results below are the same for all correct versions of this query, with the possible
exception of where the NULL TotalAmounts are presented: In Access, NULL comes before
all values; in Oracle, it comes last, etc.
Page 2-101
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
๏ถ
ANSWERS TO THE QUEEN ANNE CURIOSITY SHOP PROJECT QUESTIONS
The Queen Anne Curiosity Shop is an upscale home furnishings store in a well-to-do urban
neighborhood. It sells both antiques and current-production household items that complement or
are useful with the antiques. For example, the store sells antique dining room tables and new
tablecloths. The antiques are purchased from both individuals and wholesalers, and the new
items are purchased from distributors. The storeโs customers include individuals, owners of bedand-breakfast operations, and local interior designers who work with both individuals and small
businesses. The antiques are unique, though some multiple items, such as dining room chairs,
may be available as a set (sets are never broken). The new items are not unique, and an item
may be reordered if it is out of stock. New items are also available in various sizes and colors
(for example, a particular style of tablecloth may be available in several sizes and in a variety of
colors).
Assume that The Queen Anne Curiosity Shop designs a database with the following tables:
CUSTOMER (CustomerID, LastName, FirstName, EmailAddress, EncryptedPassword,
Address, City, State, ZIP, Phone, ReferredBy)
ITEM (ItemID, ItemDescription, CompanyName, PurchaseDate, ItemCost,
ItemPrice)
SALE (SaleID, CustomerID, SaleDate, SubTotal, Tax, Total)
SALE_ITEM (SaleID, SaleItemID, ItemID, ItemPrice)
The referential integrity constraints are:
ReferredBy in CUSTOMER must exist in CustomerID in CUSTOMER
CustomerID in SALE must exist in CustomerID in CUSTOMER
SaleID in SALE_ITEM must exist in SaleID in SALE
ItemID in SALE_ITEM must exist in ItemID in ITEM
Assume that CustomerID of CUSTOMER, ItemID of ITEM, SaleID of SALE, and SaleItemID of
SALE_ITEM are all surrogate keys with values as follows:
CustomerID Start at 1 Increment by 1
ItemID Start at 1 Increment by 1
SaleID Start at 1 Increment by 1
The database that The Queen Anne Curiosity Shop has created is named QACS, and the four
tables in the QACS database schema are shown in Figure 2-54. Note that CUTOMER contains
a recursive relationship between ReferredBy and CustomerID, where ReferredBy contains the
CustomerID value of the existing customer who referred the new customer to the Queen Anne
Curiosity Shop.
Page 2-102
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-54 โ The QACS Database
The column characteristics for the tables are shown in Figures 2-55, 2-56, 2-57, and 2-58. The
relationships CUSTOMER-to-SALE and ITEM-to-SALE_ITEM should enforce referential
integrity, but not cascade updates or deletions, whereas the relationship between SALE and
SALE_ITEM should enforce referential integrity and cascade both updates and deletions. The
data for these tables are shown in Figures 2-59, 2-60, 2-61, and 2-62.
Figure 2-55 – Column Characteristics for the QACS Database CUSTOMER Table
Page 2-103
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-56 – Column Characteristics for the QACS Database SALE Table
Figure 2-57 – Column Characteristics for the QACS Database SALE_ITEM Table
Figure 2-58 – Column Characteristics for the QACS Database ITEM Table
Page 2-104
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-59 โ Sample Data for the QACS Database CUSTOMER Table
Page 2-105
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-60 – Sample Data for the QACS Database SALE Table
Page 2-106
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-61 – Sample Data for the QACS Database SALE_ITEM Table
Page 2-107
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-62 – Sample Data for the QACS Database ITEM Table
You will need to create and set up a database named QACS_CH02 for use with The
Queen Anne Curiosity Shop project questions. A Microsoft Access 2016 database named
QACS_CH02.accdb, and SQL scripts for creating the QACS_CH02 database in Microsoft
SQL Server, Oracle Database, and MySQL are available on our Web site at
www.pearsonhighered.com/kroenke.
Page 2-108
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
If you are using the Microsoft Access 2016 QACS_CH02.accdb database, simply copy
it to an appropriate location in your Documents folder. Otherwise, you will need to use the
discussion and instructions necessary for setting up the QACS_CH02 database in the DBMS
product you are using:
โ For Microsoft SQL Server 2017, see online Chapter 10A.
โ For Oracle Database 12c Release 2 or Oracle Express Edition 11g Release 2, see
Online Chapter 10B.
โ For MySQL 5.7 Community Server, see online Chapter 10C.
Once you have set up your QACS_CH02 database, create an SQL script named QACSCH02PQ.sql, and use it to record and store SQL statements that answer each of the following
questions (if the question requires a written answer, use an SQL comment to record your
answer):
A.
Show all data in each of the tables.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-A-CUSTOMER *** */
SELECT
FROM
*
CUSTOMER;
Page 2-109
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-A-SALE *** */
SELECT
FROM
*
SALE;
Page 2-110
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-A-SALE-ITEM *** */
SELECT
FROM
*
SALE_ITEM;
Page 2-111
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-A-ITEM *** */
SELECT
FROM
B.
*
ITEM;
List the LastName, FirstName, and Phone of all customers.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-B *** */
SELECT
FROM
LastName, FirstName, Phone
CUSTOMER;
Page 2-112
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
C.
List the LastName, FirstName, and Phone for all customers with a FirstName of ‘John’.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-C *** */
SELECT
FROM
WHERE
D.
LastName, FirstName, Phone
CUSTOMER
FirstName = ‘John’;
List the LastName, FirstName, Phone, SaleDate, and Total of all sales in excess of
$100.00.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-D *** */
SELECT LastName, FirstName, Phone, SaleDate, Total
FROM CUSTOMER, SALE
WHERE CUSTOMER.CustomerID = SALE.CustomerID AND Total > 100;
Page 2-113
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
E.
List the LastName, FirstName, and Phone of all customers whose first name starts
with ‘D’.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For SQL Server, Oracle Database, and MySQL:
/* *** SQL-Query-QACS-E *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
FirstName LIKE ‘D%’;
For Microsoft Access:
/* *** SQL-Query-QACS-E *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
FirstName LIKE ‘D*’;
Page 2-114
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
F.
List the LastName, FirstName, and Phone of all customers whose last name includes
the characters ‘ne’.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For SQL Server, Oracle Database, and MySQL:
/* *** SQL-Query-QACS-F *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
LastName LIKE ‘%ne%’;
For Microsoft Access:
/* *** SQL-Query-QACS-F *** */
SELECT
FROM
WHERE
G.
LastName, FirstName, Phone
CUSTOMER
LastName LIKE ‘*ne*’;
List the LastName, FirstName, and Phone for all customers whose eighth and ninth
digits (starting from the left) of their phone number are 56. For example, a phone
number ending in โ567โ would meet the criteria.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For SQL Server, Oracle Database, and MySQL:
/* *** SQL-Query-QACS-G *** */
SELECT
FROM
WHERE
LastName, FirstName, Phone
CUSTOMER
Phone LIKE ‘%56_’;
For Microsoft Access:
Page 2-115
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-G *** */
SELECT
FROM
WHERE
H.
LastName, FirstName, Phone
CUSTOMER
Phone LIKE ‘*56?’;
Determine the maximum and minimum sales Total.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-H *** */
SELECT
FROM
I.
MAX (Total) as MaximumTotalSales,
MIN (Total) as MinimumTotalSales
SALE;
Determine the average sales Total.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-I *** */
SELECT
FROM
AVG (Total) as AverageTotalSales
SALE;
Page 2-116
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
J.
Count the number of customers.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-J *** */
SELECT
FROM
K.
COUNT (*) AS NumberOfCustomers
CUSTOMER;
Group customers by LastName and then by FirstName.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-K *** */
SELECT
FROM
GROUP BY
LastName, FirstName
CUSTOMER
LastName, FirstName;
Page 2-117
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
L.
Count the number of customers having each combination of LastName and FirstName.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-L *** */
SELECT
FROM
GROUP BY
M.
LastName, FirstName, COUNT (*) AS NumberOfCustomers
CUSTOMER
LastName, FirstName;
Show the LastName, FirstName, and Phone of all customers who have had an order
with Total greater than $100.00. Use a subquery. Present the results sorted by
LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-M *** */
SELECT
FROM
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER
CustomerID IN
(SELECT CustomerID
FROM SALE
WHERE Total > 100)
LastName, FirstName DESC;
Page 2-118
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
N.
Show the LastName, FirstName, and Phone of all customers who have had an order
with Total greater than $100.00. Use a join, but do not use JOIN ON syntax. Present
results sorted by LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-N *** */
SELECT
LastName, FirstName, Phone
FROM
CUSTOMER, SALE
WHERE
CUSTOMER.CustomerID = SALE.CustomerID
AND
Total > 100
ORDER BY LastName, FirstName DESC;
/*
For each CUSTOMER only once:
SELECT
DISTINCT LastName, FirstName, Phone
FROM
CUSTOMER, SALE
WHERE
CUSTOMER.CustomerID = SALE.CustomerID
AND
Total > 100
ORDER BY LastName, FirstName DESC;
Page 2-119
Copyright ยฉ 2019 Pearson Education, Inc.
*/
Chapter Two โ Introduction to Structured Query Language
O.
Show the LastName, FirstName, and Phone of all customers who have had an order
with Total greater than $100.00. Use a join using JOIN ON syntax. Present results
sorted by LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-O *** */
SELECT
FROM
ON
WHERE
ORDER BY
/*
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER JOIN SALE
CUSTOMER.CustomerID = SALE.CustomerID
Total > 100
LastName, FirstName DESC;
For each CUSTOMER only once:
*/
DISTINCT LastName, FirstName, Phone
CUSTOMER JOIN SALE
CUSTOMER.CustomerID = SALE.CustomerID
Total > 100
LastName, FirstName DESC;
Note that for Microsoft Access, we must use the INNER JOIN syntax:
SELECT
FROM
ON
WHERE
ORDER BY
P.
DISTINCT LastName, FirstName, Phone
CUSTOMER INNER JOIN SALE
CUSTOMER.CustomerID = SALE.CustomerID
Total > 100
LastName, FirstName DESC;
Show the LastName, FirstName, and Phone of all customers who who have bought an
Item named ‘Desk Lamp’. Use a subquery. Present results sorted by LastName in
ascending order and then FirstName in descending order.
Page 2-120
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-QACS-P *** */
SELECT
FROM
WHERE
ORDER BY
Q.
LastName, FirstName, Phone
CUSTOMER
CustomerID IN
(SELECT
CustomerID
FROM
SALE
WHERE
SaleID IN
(SELECT
SaleID
FROM
SALE_ITEM
WHERE
ItemID IN
(SELECT
ItemID
FROM
ITEM
WHERE
ItemDescription = ‘Desk Lamp’)))
LastName, FirstName DESC;
Show the LastName, FirstName, and Phone of all customers who have bought an Item
named ‘Desk Lamp’. Use a join, but do not use JOIN ON syntax. Present results sorted
by LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For SQL Server, MySQL, and Microsoft Access:
/* *** SQL-Query-QACS-Q *** */
SELECT
FROM
WHERE
AND
AND
AND
ORDER BY
LastName, FirstName, Phone
CUSTOMER AS C,
SALE AS S,
SALE_ITEM AS SI,
ITEM AS I
C.CustomerID = S.CustomerID
S.SaleID = SI.SaleID
SI.ItemID = I.ItemID
ItemDescription = ‘Desk Lamp’
LastName, FirstName DESC;
Page 2-121
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
For Oracle Database, which doesnโt allow โASโ in alias (range variable) declarations:
/* *** SQL-Query-QACS-Q-Oracle *** */
SELECT
FROM
WHERE
AND
AND
AND
ORDER BY
R.
LastName, FirstName, Phone
CUSTOMER C,
SALE S,
SALE_ITEM SI,
ITEM I
C.CustomerID = S.CustomerID
S.SaleID = SI.SaleID
SI.ItemID = I.ItemID
ItemDescription = ‘Desk Lamp’
LastName, FirstName DESC;
Show the LastName, FirstName, and Phone of all customers who have bought an Item
named ‘Desk Lamp’. Use a join using JOIN ON syntax. Present results sorted by
LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For MySQL and SQL Server:
/* *** SQL-Query-QACS-R *** */
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER AS C JOIN SALE AS S
C.CustomerID = S.CustomerID
JOIN
SALE_ITEM AS SI
ON S.SaleID = SI.SaleID
JOIN
ITEM AS I
ON SI.ItemID = I.ItemID
ItemDescription = ‘Desk Lamp’
LastName, FirstName DESC;
For Oracle, which does not allow โASโ in alias declarations:
Page 2-122
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-R *** */
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER C JOIN SALE S
C.CustomerID = S.CustomerID
JOIN
SALE_ITEM SI
ON S.SaleID = SI.SaleID
JOIN
ITEM I
ON SI.ItemID = I.ItemID
ItemDescription = ‘Desk Lamp’
LastName, FirstName DESC;
Note that for Microsoft Access, we must use the INNER JOIN syntax with grouping of the
INNER JOINS:
SELECT
FROM
ON
WHERE
ORDER BY
S.
LastName, FirstName, Phone
((CUSTOMER AS C INNER JOIN SALE AS S
C.CustomerID = S.CustomerID)
INNER JOIN
SALE_ITEM AS SI
ON
S.SaleID = SI.SaleID)
INNER JOIN
ITEM AS I
ON
SI.ItemID = I.ItemID
ItemDescription = ‘Desk Lamp’
LastName, FirstName DESC;
Show the LastName, FirstName, and Phone of all customers who have bought an Item
named ‘Desk Lamp’. Use a combination of a join in JOIN ON syntax and a subquery.
Present results sorted by LastName in ascending order and then FirstName in
descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For SQL Server and MySQL:
Page 2-123
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-S *** */
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER AS C JOIN SALE AS S
C.CustomerID = S.CustomerID
SaleID IN
(SELECT
SaleID
FROM
SALE_ITEM
WHERE
ItemID IN
(SELECT
ItemID
FROM
ITEM
WHERE
ItemDescription = ‘Desk Lamp’))
LastName, FirstName DESC;
For Oracle Database, which disallows โASโ in alias declarations:
/* *** SQL-Query-QACS-S *** */
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER C JOIN SALE S
C.CustomerID = S.CustomerID
SaleID IN
(SELECT
SaleID
FROM
SALE_ITEM
WHERE
ItemID IN
(SELECT
ItemID
FROM
ITEM
WHERE
ItemDescription = ‘Desk Lamp’))
LastName, FirstName DESC;
For Microsoft Access, which requires โINNERโ in the join syntax:
/* *** SQL-Query-QACS-S *** */
SELECT
FROM
ON
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER AS C INNER JOIN SALE AS S
C.CustomerID = S.CustomerID
SaleID IN
(SELECT
SaleID
FROM
SALE_ITEM
WHERE
ItemID IN
(SELECT
ItemID
FROM
ITEM
WHERE
ItemDescription = ‘Desk Lamp’))
LastName, FirstName DESC;
Page 2-124
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
T.
Show the LastName, FirstName, and Phone of all customers who have bought an Item
named ‘Desk Lamp’. Use a combination of a join in JOIN ON syntax and a subquery that
is different from the combination used for question S. Present results sorted by
LastName in ascending order and then FirstName in descending order.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
For MySQL and SQL Server:
/* *** SQL-Query-QACS-T *** */
SELECT
FROM
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER AS C JOIN SALE AS S ON C.CustomerID = S.CustomerID
JOIN SALE_ITEM AS SI ON S.SaleID = SI.SaleID
ItemID IN
(SELECT
ItemID
FROM
ITEM AS I
WHERE
ItemDescription = ‘Desk Lamp’)
LastName, FirstName DESC;
For Oracle Database, which does not allow โASโ in alias declarations:
/* *** SQL-Query-QACS-T *** */
SELECT
FROM
WHERE
ORDER BY
LastName, FirstName, Phone
CUSTOMER C JOIN SALE S ON C.CustomerID = S.CustomerID
JOIN SALE_ITEM SI ON S.SaleID = SI.SaleID
ItemID IN
(SELECT
ItemID
FROM
ITEM I
WHERE
ItemDescription = ‘Desk Lamp’)
LastName, FirstName DESC;
For Microsoft Access, which requires โINNERโ in join syntax and parenthesization of multiple
joins performed using JOIN syntax:
/* *** SQL-Query-QACS-T *** */
SELECT
FROM
WHERE
ORDER BY
LastName, FirstName, Phone
(CUSTOMER AS C INNER JOIN SALE AS S ON C.CustomerID = S.CustomerID)
INNER JOIN SALE_ITEM AS SI ON S.SaleID = SI.SaleID
ItemID IN
(SELECT
ItemID
FROM
ITEM AS I
WHERE
ItemDescription = ‘Desk Lamp’)
LastName, FirstName DESC;
Page 2-125
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
U.
Show the LastName, FirstName, Phone, and ItemDescription for customers who have
bought an Item named ‘Desk Lamp’. Also show the LastName, FirstName, and Phone of
all the other customers. Present results sorted by Item in ascending order, then
LastName in ascending order, and then FirstName in descending order. HINT: In
Microsoft Access 2016 you will either need to use a UNION statement or a sequence of
two queries to solve this, because Microsoft Access disallows nesting an INNER join
inside a LEFT or RIGHT join. The other DBMS products can do it with one query (not a
UNION statement).
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
Note that this is a very challenging question! The best solution involves adding the โDesk Lampโ
restriction to the inner JOINs before performing the LEFT JOIN, otherwise (if we put the โDesk
Lampโ restriction in the WHERE clause) every customer will have a sale so the LEFT JOIN will
not produce any NULLs, and we will get an incorrect result from the query. Examples of this are
not covered in the text, but at the same time, the text does not say you canโt do it either.
The LEFT JOIN solution for Oracle Database, MySQL, and SQL Server:
SELECT
FROM
LastName, FirstName, Phone, ItemDescription
CUSTOMER LEFT JOIN (SALE
JOIN
SALE_ITEM
ON SALE.SaleID = SALE_ITEM.SaleID
JOIN
ITEM
ON SALE_ITEM.ItemID = ITEM.ItemID
AND
ITEM.ItemDescription = ‘Desk Lamp’)
ON
CUSTOMER.CustomerID = SALE.CustomerID
ORDER BY ItemDescription, LastName, FirstName DESC;
Note that Microsoft Access does not allow nesting an INNER JOIN inside a LEFT or RIGHT
JOIN. It also disallows adding the non-join condition to the โONโ clause. So in order to create a
solution in Access, we must either (1) use a more complicated version of the query with a
UNION but without an OUTER JOIN or (2) create and save an intermediate query (view) to be
used in the final query. Note that these two approaches will also work with Oracle, SQL Server,
or MySQL.
Page 2-126
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
/* *** SQL-Query-QACS-U-UNION *** */
SELECT LastName, FirstName, Phone, ItemDescription
FROM CUSTOMER C, SALE S, SALE_ITEM SI, ITEM I
WHERE C.CustomerID = S.CustomerID
AND
S.SaleID = SI.SaleID
AND
SI.ItemID = I.ItemID
AND
ItemDescription = ‘Desk Lamp’
UNION
SELECT LastName, FirstName, Phone, NULL
FROM CUSTOMER
WHERE CustomerID NOT IN
(SELECT CustomerID FROM SALE
WHERE SaleID IN
(SELECT SaleID FROM SALE_ITEM
WHERE ItemID IN
(SELECT ItemID FROM ITEM
WHERE ItemDescription = ‘Desk Lamp’)))
ORDER BY ItemDescription, LastName, FirstName DESC;
The other approach using Access involves writing and saving an intermediate query (also
called a โviewโ; see Chapter 7). We first write and save a query that produces the
CustomerNumber and ItemDescription for all sales involving a โDesk Lampโ:
/* *** SQL-Query-QACS-U-Temp *** */
SELECT CustomerID, ItemDescription
FROM SALE AS S, SALE_ITEM AS SI, ITEM AS I
WHERE S.SaleID = SI.SaleID
AND
SI.ItemID = I.ItemID
AND
ItemDescription = ‘Desk Lamp’;
Now we can use that temporary query as if it were just another table to produce the final
result:
/* *** SQL-Query-QACS-U-Final *** */
SELECT LastName, FirstName, Phone, ItemDescription
FROM CUSTOMER C LEFT OUTER JOIN [SQL-Query-QACS-U-TEMP] T
ON C.CustomerID = T.CustomerID
ORDER BY ItemDescription, LastName, FirstName DESC;
The results below are the same for all correct versions of this query, with the possible
exception of where the NULL ItemDescriptions are presented: In Access, NULL comes
before all values; in Oracle, it comes last, etc.
Page 2-127
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
V.
Who referred each customer to the Queen Anne Curiosity Shop? Show columns named
CustomerLastName, CustomerFirstName, ReferredByLastName, and
ReferredByFirstName. Include the names of all customers who were not referred by any
other customer in the results of the query.
Solutions to The Queen Anne Curiosity Shop questions are contained in the Microsoft Access
database DBP-e15-IM-CH02-QACS.accdb and in corresponding files for SQL Server, Oracle
Database, and MySQL, which are all available in the Instructorโs Resource Center on the textโs
Web site (www.pearsonhighered.com/kroenke).
SELECT CUST.LastName AS CustomerLastName, CUST.FirstName AS
CustomerFirstName, REFER.LastName AS ReferredByLastName,
REFER.FirstName AS ReferredByFirstName
FROM CUSTOMER CUST LEFT JOIN CUSTOMER REFER
ON CUST.ReferredBy = REFER.CustomerID;
Page 2-128
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
๏ถ
ANSWERS TO MORGAN IMPORTING PROJECT QUESTIONS
James Morgan owns and operates Morgan Importing, which purchases antiques and home
furnishings in Asia, ships those items to a warehouse facility in Los Angeles, and then sells
these items in the United States. James tracks the Asian purchases and subsequent shipments
of these items to Los Angeles by using a database to keep a list of items purchased, shipments
of the purchased items, and the items in each shipment. His database includes the following
tables:
ITEM (ItemID, Description, PurchaseDate, Store, City, Quantity, LocalCurrencyAmount,
ExchangeRate)
SHIPMENT (ShipmentID, ShipperName, ShipperInvoiceNumber, DepartureDate, ArrivalDate,
InsuredValue)
SHIPMENT_ITEM (ShipmentID, ShipmentItemID, ItemID, Value)
In the database schema, the primary keys are underlined and the foreign keys are shown in
italics. The database that James has created is named MI, and the three tables in the MI
database schema are shown in Figure 2-63.
Figure 2-63 โ The MI Database
The column characteristics for the tables are shown in Figures 2-64, 2-65, and 2-66. The data
for the tables are shown in Figures 2-67, 2-68, and 2-69. The relationship between ITEM and
SHIPMENT_ITEM should enforce referential integrity, and although it should cascade updates,
it should not cascade deletions. The relationship between SHIPMENT and SHIPMENT_ITEM
should enforce referential integrity and cascade both updates and deletions.
You will need to create and set up a database named MI_CH02 for use with the Morgan
Importing case questions. A Microsoft Access 2016 database named MI_CH02.accdb and
SQL scripts for creating the MI_CH02 database in Microsoft SQL Server, Oracle Database,
and MySQL are available on our Web site at www.pearsonhighered.com/kroenke.
If you are using the Microsoft Access 2016 MI_CH02.accdb database, simply
copy it to an appropriate location in your Documents folder. Otherwise, you will need to use the
discussion and instructions necessary for setting up the MI_CH02 database in the DBMS
Page 2-129
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
product you are using:
โ For Microsoft SQL Server 2017, see online Chapter 10A.
โ For Oracle Database 12c Release 2 or Oracle Express Edition 11g Release 2, see
online Chapter 10B.
โ For MySQL 5.7 Community Server, see online Chapter 10C.
Once you have set up your MI_CH02 database, create an SQL script named MI-CH02PQ.sql, and use it to record and store SQL statements that answer each of the following
questions (if the question requires a written answer, use an SQL comment to record your
answer):
Figure 2-64 – Column Characteristics for the MI Database ITEM Table
Page 2-130
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-65 – Column Characteristics for the MI Database SHIPMENT Table
Figure 2-66 – Column Characteristics for the MI Database SHIPMENT_ITEM Table
Figure 2-67 – Sample Data for the MI Database ITEM Table
Figure 2-68 – Sample Data for the MI Database SHIPMENT Table
Page 2-131
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Figure 2-69 – Sample Data for the MI Database SHIPMENT_ITEM Table
A. Show all data in each of the tables.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-A-ITEM *** */
SELECT
FROM
*
ITEM;
/* *** SQL-Query-MI-A-SHIPMENT *** */
SELECT
FROM
*
SHIPMENT;
/* *** SQL-Query-MI-A-SHIPMENT-ITEM *** */
SELECT
FROM
*
SHIPMENT_ITEM;
Page 2-132
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
B. List the ShipmentID, ShipperName, and ShipperInvoiceNumber of all shipments.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-B *** */
SELECT
FROM
ShipmentID, ShipperName, ShipperInvoiceNumber
SHIPMENT;
C. List the ShipmentID, ShipperName, and ShipperInvoiceNumber for all shipments that
have an insured value greater than $10,000.00.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-C *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber
SHIPMENT
InsuredValue > 10000;
Page 2-133
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
D. List the ShipmentID, ShipperName, and ShipperInvoiceNumber of all shippers
whose name starts with โABโ.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
The correct SQL-92 statement, which uses the wildcard %, is:
/* *** SQL-Query-MI-D *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber
SHIPMENT
ShipperName LIKE ‘AB%’;
However, Microsoft Access uses the wildcard *, which gives the following SQL statement:
/* *** SQL-Query-MI-D-Access *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber
SHIPMENT
ShipperName LIKE ‘AB*’;
Page 2-134
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
E. List the ShipmentID, ShipperName, ShipperInvoiceNumber, and ArrivalDate of all
shipments that departed in December. HINT: For the DBMS you are using, research
how to extract a month or day from a date value so it can be compared to a number.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
Microsoft Access stores dates as strings so we can use the wildcard *, which gives the
following SQL statement:
/* *** SQL-Query-MI-E-Access *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
DepartureDate LIKE ’12*’;
Oracle does not store date data type values as strings, so the following Oracle-specific form
of the query must be used to extract the month:
/* *** SQL-Query-MI-E-Oracle *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
EXTRACT (MONTH FROM DepartureDate) = 12;
MySQL and SQL Server also do not store date data type values as strings, so the following
form of the query must be used to extract the month. This version of the query also works
with Access:
/* *** SQL-Query-MI-E *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
MONTH (DepartureDate) = 12;
F. List the ShipmentID, ShipperName, ShipperInvoiceNumber, and ArrivalDate of all
shipments that departed on the tenth day of any month. HINT: For the DBMS you are
using, research how to extract a month or day from a date value so it can be
compared to a number.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
Page 2-135
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
Microsoft Access stores dates as strings so we can use the wildcards * and ?, which give the
following SQL statement:
/* *** SQL-Query-MI-F-Access-A *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
DepartureDate LIKE ‘???10*’;
Further, Microsoft Access does NOT show the leading zero in MM, so we must add a
compound WHERE clause to get months without the leading zeros:
/* *** SQL-Query-MI-F-Access-B *** */
SELECT
FROM
WHERE
OR
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
DepartureDate LIKE ‘???10*’
DepartureDate LIKE ‘??10*’;
Oracle does not store date data type values as strings, so the following Oracle-specific form
of the query must be used to extract the day of the month:
/* *** SQL-Query-MI-F-Oracle *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
EXTRACT (DAY FROM DepartureDate) = 10;
MySQL and SQL Server also do not store date data type values as strings, so the following
form of the query must be used to extract the day of the month. This query also works in
Access:
/* *** SQL-Query-MI-F *** */
SELECT
FROM
WHERE
ShipmentID, ShipperName, ShipperInvoiceNumber, ArrivalDate
SHIPMENT
DAY (DepartureDate) = 10;
Page 2-136
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
G. Determine the maximum and minimum InsuredValue.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-G *** */
SELECT
FROM
MAX (InsuredValue) AS MaxInsuredValue,
MIN (InsuredValue) AS MinInsuredValue,
SHIPMENT;
H. Determine the average InsuredValue.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-H *** */
SELECT
FROM
I.
AVG (InsuredValue) AS AvgInsuredValue
SHIPMENT;
Count the number of shipments.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-I *** */
SELECT
FROM
COUNT (*) AS NumberOfShipments
SHIPMENT;
Page 2-137
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
J. Show ItemID, Description, Store, and a calculated column named
USCurrencyAmount that is equal to LocalCurrencyAmount multiplied by the
ExchangeRate for all rows of ITEM.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-J *** */
SELECT
FROM
ItemID, Description, Store,
LocalCurrencyAmount * ExchangeRate AS USCurrencyAmount
ITEM;
K. Group item purchases by City and Store.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-K *** */
SELECT
FROM
GROUP BY
City, Store
ITEM
City, Store;
Page 2-138
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
L. Count the number of purchases having each combination of City and Store.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-L *** */
SELECT
FROM
GROUP BY
City, Store,
COUNT (*) AS City_Store_Combination_Count
ITEM
City, Store;
M. Show the ShipperName, ShipmentID and DepartureDate of all shipments that have
an item with a value of $1,000.00 or more. Use a subquery. Present results sorted
by ShipperName in ascending order and then DepartureDate in descending order.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-M *** */
SELECT
FROM
WHERE
ShipperName, ShipmentID, DepartureDate
SHIPMENT
ShipmentID IN
(SELECT ShipmentID
FROM
SHIPMENT_ITEM
WHERE
Value >= 1000)
ORDER BY ShipperName, DepartureDate DESC;
N. Show the ShipperName, ShipmentID, and DepartureDate of all shipments that have
an item with a value of $1000.00 or more. Use a join. Present results sorted by
ShipperName in ascending order and then DepartureDate in descending order.
Page 2-139
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
This question is a little more complicated than it appears since when doing the join (instead
of the subquery) we may have duplicates in the result if a shipment has more than one item
valued at at least $1000. Note how the following query determines that there are actually
only two shipments that meet the criteria.
/* *** SQL-Query-MI-N-A *** */
SELECT
FROM
WHERE
AND
ORDER BY
ShipperName, SHIPMENT.ShipmentID, DepartureDate
SHIPMENT, SHIPMENT_ITEM
SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID
(Value = 1000 OR Value > 1000)
ShipperName, DepartureDate DESC;
Note that the three lines for International are actually only one shipment, so we can use
DISTINCT to remove the duplication (shipment 4 has three items valued over $1000). Note
also that we can use the greater than or equal to operator >= to simplify the WHERE clause.
The final query is:
/* *** SQL-Query-MI-N-B *** */
SELECT
DISTINCT ShipperName, SHIPMENT.ShipmentID, DepartureDate
FROM
SHIPMENT, SHIPMENT_ITEM
WHERE
SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID
AND
Value >= 1000
ORDER BY ShipperName, DepartureDate DESC;
O. Show the ShipperName, ShipmentID, and DepartureDate of the shipments for items
that were purchased in Singapore. Use a subquery. Present results sorted by
ShipperName in ascending order and then DepartureDate in descending order.
Page 2-140
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-O *** */
SELECT
FROM
WHERE
ShipperName, ShipmentID, DepartureDate
SHIPMENT
ShipmentID IN
(SELECT ShipmentID
FROM
SHIPMENT_ITEM
WHERE
ItemID IN
(SELECT ItemID
FROM
ITEM
WHERE
City = ‘Singapore’))
ORDER BY ShipperName, DepartureDate DESC;
P. Show the ShipperName, ShipmentID, and DepartureDate of all shipments that have
an item that was purchased in Singapore. Use a join, but do not use JOIN ON
syntax. Present results sorted by ShipperName in ascending order and then
DepartureDate in descending order.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
As in question N, we will have to use a DISTINCT keyword to guarantee the appropriate
answer.
/* *** SQL-Query-MI-P *** */
SELECT
DISTINCT ShipperName, SHIPMENT.ShipmentID, DepartureDate
FROM
SHIPMENT, SHIPMENT_ITEM, ITEM
WHERE
SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID
AND
SHIPMENT_ITEM.ItemID = ITEM.ItemID
AND
City = ‘Singapore’
ORDER BY ShipperName, DepartureDate DESC;
Page 2-141
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Q. Show the ShipperName, ShipmentID, and DepartureDate of all shipments that have
an item that was purchased in Singapore. Use a join using JOIN ON syntax.
Present results sorted by ShipperName in ascending order and then DepartureDate
in descending order.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
For Oracle Database, MySQL, and SQL Server:
/* *** SQL-Query-MI-Q *** */
SELECT DISTINCT SHIPMENT.ShipperName, SHIPMENT_ITEM.ShipmentID,
SHIPMENT.DepartureDate
FROM ITEM JOIN (SHIPMENT JOIN SHIPMENT_ITEM ON SHIPMENT.ShipmentID =
SHIPMENT_ITEM.ShipmentID) ON ITEM.ItemID = SHIPMENT_ITEM.ItemID
WHERE ITEM.City=’Singapore’
ORDER BY ShipperName, DepartureDate DESC;
Note that for Microsoft Access, we must use the INNER JOIN syntax:
/* *** SQL-Query-MI-Q *** */
SELECT DISTINCT SHIPMENT.ShipperName, SHIPMENT_ITEM.ShipmentID,
SHIPMENT.DepartureDate
FROM ITEM INNER JOIN (SHIPMENT INNER JOIN SHIPMENT_ITEM ON
SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID) ON ITEM.ItemID =
SHIPMENT_ITEM.ItemID
WHERE ITEM.City=’Singapore’
ORDER BY ShipperName, DepartureDate DESC;
R. Show the ShipperName, ShipmentID, the DepartureDate of the shipment, and Value
for items that were purchased in Singapore. Use a combination of a join and a
subquery. Present results sorted by ShipperName in ascending order and then
DepartureDate in descending order.
Page 2-142
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
/* *** SQL-Query-MI-R *** */
SELECT
FROM
WHERE
AND
ShipperName, SHIPMENT.ShipmentID, DepartureDate, Value
SHIPMENT, SHIPMENT_ITEM
SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID
ItemID IN
(SELECT ItemID
FROM
ITEM
WHERE
City = ‘Singapore’)
ORDER BY ShipperName, DepartureDate DESC;
S. Show the ShipperName, ShipmentID, the DepartureDate of the shipment, and Value
for items that were purchased in Singapore. Also show the ShipperName,
ShipmentID, and DepartureDate for all other shipments. Present results sorted by
Value in ascending order, then ShipperName in ascending order, and then
DepartureDate in descending order.
Solutions to Morgan Importing questions are contained in the Microsoft Access database
DBP-e15-IM-CH02-MI.accdb and in the corresponding files for Oracle Database, MySQL,
and SQL Server, which are all available in the Instructorโs Resource Center on the textโs Web
site (www.pearsonhighered.com/kroenke).
Note that this is a very challenging question! The best solution involves adding the
โSingaporeโ restriction to the inner JOIN before performing the LEFT JOIN, otherwise (if we
put the โSingaporeโ restriction in the WHERE clause) every shipment will have an item so the
LEFT JOIN will not produce any NULLs, and we will get an incorrect result from the query.
Examples of this are not covered in the text, but at the same time, the text does not say you
canโt do it either.
The LEFT JOIN solution for Oracle Database, MySQL, and SQL Server:
/* *** SQL-Query-MI-S *** */
SELECT ShipperName, SHIPMENT.ShipmentID, DepartureDate, Value
FROM SHIPMENT LEFT JOIN (ITEM JOIN SHIPMENT_ITEM
ON ITEM.ItemID = SHIPMENT_ITEM.ItemID AND
ITEM.City = โSingaporeโ)
ON SHIPMENT.ShipmentID = SHIPMENT_ITEM.ShipmentID
Page 2-143
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
ORDER BY Value, ShipperName, DepartureDate DESC;
Note that Microsoft Access does not allow nesting an INNER JOIN inside a LEFT or RIGHT
JOIN. It also disallows adding the non-join condition to the โONโ clause. So in order to
create a solution in Access, we must either (1) use a more complicated version of the query
with a UNION but without an OUTER JOIN or (2) create and save an intermediate query
(view) to be used in the final query. Note that these two approaches will also work with
Oracle, SQL Server, or MySQL.
/* *** SQL-Query-MI-S-UNION *** */
SELECT ShipperName, S.ShipmentID, DepartureDate, Value
FROM SHIPMENT S, ITEM I, SHIPMENT_ITEM SI
WHERE S.ShipmentID = SI.ShipmentID AND I.ItemID = SI.ItemID
AND I.City = ‘Singapore’
UNION SELECT ShipperName, ShipmentID, DepartureDate, NULL
FROM SHIPMENT
WHERE ShipmentID NOT IN
(SELECT ShipmentID
FROM ITEM I, SHIPMENT_ITEM SI
WHERE I.ItemID = SI.ItemID AND I.City = ‘Singapore’)
ORDER BY Value, ShipperName, DepartureDate DESC;
The other approach using Access involves writing and saving an intermediate query (also
called a โviewโ; see Chapter 7). We first write and save a query that produces the
ShipmentID and Value for all shipments involving an item from Singapore:
/* *** SQL-Query-MI-S-Temp *** */
SELECT ShipmentID, Value
FROM ITEM I, SHIPMENT_ITEM SI
WHERE I.ItemID = SI.ItemID AND I.City = โSingaporeโ;
Now we can use that temporary query as if it were just another table to produce the final
result:
/* *** SQL-Query-MI-S-Final *** */
SELECT ShipperName, S.ShipmentID, DepartureDate, Value
FROM SHIPMENT AS S LEFT OUTER JOIN [SQL-Query-MI-S-TEMP] AS T
ON S.ShipmentID = T.ShipmentID
ORDER BY Value, ShipperName, DepartureDate DESC;
The results below are the same for all correct versions of this query, with the possible
exception of where the NULL Values are presented: In Access, NULL comes before all
values; in Oracle, it comes last, etc.
Page 2-144
Copyright ยฉ 2019 Pearson Education, Inc.
Chapter Two โ Introduction to Structured Query Language
Page 2-145
Copyright ยฉ 2019 Pearson Education, Inc.
Document Preview (145 of 246 Pages)
User generated content is uploaded by users for the purposes of learning and should be used following SchloarOn's honor code & terms of service.
You are viewing preview pages of the document. Purchase to get full access instantly.
-37%
Solution Manual for Database Processing Fundamentals, Design, and Implementation, 15th Edition
$18.99 $29.99Save:$11.00(37%)
24/7 Live Chat
Instant Download
100% Confidential
Store
James Lee
0 (0 Reviews)
Best Selling
The World Of Customer Service, 3rd Edition Test Bank
$18.99 $29.99Save:$11.00(37%)
Chemistry: Principles And Reactions, 7th Edition Test Bank
$18.99 $29.99Save:$11.00(37%)
Test Bank for Hospitality Facilities Management and Design, 4th Edition
$18.99 $29.99Save:$11.00(37%)
Solution Manual for Designing the User Interface: Strategies for Effective Human-Computer Interaction, 6th Edition
$18.99 $29.99Save:$11.00(37%)
2023-2024 ATI Pediatrics Proctored Exam with Answers (139 Solved Questions)
$18.99 $29.99Save:$11.00(37%)
Test Bank for Strategies For Reading Assessment And Instruction: Helping Every Child Succeed, 6th Edition
$18.99 $29.99Save:$11.00(37%)