Database Design, Application Development, and Administration, 5th Edition
Copyright © 2011 by Michael V. Mannino, All rights reserved.
Chapter 4
Query Formulation with SQL
Slide 2Chapter 4: Query Formulation with SQL
Outline Background Getting started Joining tables Summarizing tables Problem solving guidelines Advanced problems Data manipulation statements
Slide 3Chapter 4: Query Formulation with SQL
What is SQL? Structured Query Language Language for database definition,
manipulation, and control International standard Standalone and embedded usage Intergalactic database speak
Slide 4Chapter 4: Query Formulation with SQL
SQL StatementsStatement Chapter
CREATE TABLE 3, 14, 19
SELECT 4, 9, 10, 17, 18
INSERT, UPDATE 4, 10, 19
DELETE 4, 9, 10
CREATE VIEW 10, 17
CREATE TRIGGER 11
GRANT, REVOKE 14
COMMIT, ROLLBACK, SET TRANSACTION 15
CREATE TYPE 19
Slide 5Chapter 4: Query Formulation with SQL
SQL Standardization
Relatively simple standard: SQL-86 and revision (SQL-89)
Modestly complex standard: SQL-92 Complex standards: SQL:1999,
SQL:2003, and SQL:2008
Slide 6Chapter 4: Query Formulation with SQL
SQL Conformance No official conformance testing Vendor claims about conformance Reasonable conformance on Core SQL Large variance on conformance outside of
Core SQL Difficult to write portable SQL code outside
of Core SQL
Slide 7Chapter 4: Query Formulation with SQL
SELECT Statement Overview
SELECT <list of column expressions> FROM <list of tables and join operations> WHERE <list of logical expressions for rows> GROUP BY <list of grouping columns> HAVING <list of logical expressions for groups> ORDER BY <list of sorting specifications>
Expression: combination of columns, constants, operators, and functions
Slide 8Chapter 4: Query Formulation with SQL
University Database
Slide 9Chapter 4: Query Formulation with SQL
First SELECT Examples
Example 1 SELECT * FROM Faculty
Example 2 (Access) SELECT * FROM Faculty WHERE FacSSN = '543210987'
Example 3 SELECT FacFirstName, FacLastName, FacSalary FROM Faculty
Example 4 SELECT FacFirstName, FacLastName, FacSalary FROM Faculty WHERE FacSalary > 65000 AND FacRank = 'PROF'
Slide 10Chapter 4: Query Formulation with SQL
Using Expressions
Example 5 (Access) SELECT FacFirstName, FacLastName, FacCity, FacSalary*1.1 AS IncreasedSalary, FacHireDate FROM Faculty WHERE year(FacHireDate) > 1998
Example 5 (Oracle)SELECT FacFirstName, FacLastName, FacCity, FacSalary*1.1 AS IncreasedSalary, FacHireDate FROM Faculty WHERE to_number(to_char(FacHireDate, 'YYYY')) > 1998
Slide 11Chapter 4: Query Formulation with SQL
Inexact Matching
• Match against a pattern: LIKE operator
• Use meta characters to specify patterns– Wildcard (* or %)
– Any single character (? or _)
Example 6 (Access) SELECT * FROM Offering WHERE CourseNo LIKE 'IS*'
Example 6 (Oracle) SELECT * FROM Offering WHERE CourseNo LIKE 'IS%'
Slide 12Chapter 4: Query Formulation with SQL
Using Dates
• Dates are numbers
• Date constants and functions are not standard
Example 7 (Access)SELECT FacFirstName, FacLastName, FacHireDate FROM Faculty WHERE FacHireDate BETWEEN #1/1/2001# AND #12/31/2002#
Example 7 (Oracle)SELECT FacFirstName, FacLastName, FacHireDate FROM Faculty WHERE FacHireDate BETWEEN '1-Jan-2001' AND '31-Dec-2002'
Slide 13Chapter 4: Query Formulation with SQL
Other Single Table Examples
Example 8: Testing for null values SELECT OfferNo, CourseNo FROM Offering WHERE FacSSN IS NULL AND OffTerm = 'SUMMER' AND OffYear = 2010
Example 9: Mixing AND and OR SELECT OfferNo, CourseNo, FacSSN FROM Offering WHERE (OffTerm = 'FALL' AND OffYear = 2009) OR (OffTerm = 'WINTER' AND OffYear = 2010)
Slide 14Chapter 4: Query Formulation with SQL
Join Operator
Most databases have many tables Combine tables using the join operator Specify matching condition
Can be any comparison but usually = PK = FK most common join condition Relationship diagram useful when combining
tables
Slide 15Chapter 4: Query Formulation with SQL
Join Example
FacNo FacName 111-11-1111 joe 222-22-2222 sue 333-33-3333 sara
OfferNo FacNo
1111 111-11-1111 2222 222-22-2222 3333 111-11-1111
FacNo FacName OfferNo 111-11-1111 joe 1111
222-22-2222 sue 2222
111-11-1111 joe 3333
Faculty
Offering
Natural Join of Offering and Faculty
Slide 16Chapter 4: Query Formulation with SQL
Cross Product Style
• List tables in the FROM clause
• List join conditions in the WHERE clause
Example 10 (Access)SELECT OfferNo, CourseNo, FacFirstName, FacLastName FROM Offering, Faculty WHERE OffTerm = 'FALL' AND OffYear = 2009 AND FacRank = 'ASST' AND CourseNo LIKE 'IS*' AND Faculty.FacNo = Offering.FacNo
Slide 17Chapter 4: Query Formulation with SQL
Join Operator Style
• Use INNER JOIN and ON keywords
• FROM clause contains join operations
Example 11 (Access)SELECT OfferNo, CourseNo, FacFirstName, FacLastName FROM Offering INNER JOIN Faculty ON Faculty.FacNo = Offering.FacNo WHERE OffTerm = 'FALL' AND OffYear = 2009 AND FacRank = 'ASST' AND CourseNo LIKE 'IS*'
Slide 18Chapter 4: Query Formulation with SQL
Name Qualification
Ambiguous column reference More than one table in the query contains a column
referenced in the query Ambiguity determined by the query not the database
Use column name alone if query is not ambiguous
Qualify with table name if query is ambiguous Readability versus writability
Slide 19Chapter 4: Query Formulation with SQL
Summarizing Tables Row summaries important for decision-making
tasks Row summary
Result contains statistical (aggregate) functions Conditions involve statistical functions
SQL keywords Aggregate functions in the output list GROUP BY: summary columns HAVING: summary conditions
Slide 20Chapter 4: Query Formulation with SQL
GROUP BY Examples
Example 12: Grouping on a single column SELECT FacRank, AVG(FacSalary) AS AvgSalary FROM Faculty GROUP BY FacRank
Example 13: Row and group conditions SELECT StdMajor, AVG(StdGPA) AS AvgGpa FROM Student WHERE StdClass IN ('JR', 'SR') GROUP BY StdMajor HAVING AVG(StdGPA) > 3.1
Slide 21Chapter 4: Query Formulation with SQL
SQL Summarization Rules
Columns in SELECT and GROUP BY SELECT: non aggregate and aggregate
columns GROUP BY: list all non aggregate columns
WHERE versus HAVING Row conditions in WHERE Group conditions in HAVING
Slide 22Chapter 4: Query Formulation with SQL
Summarization and Joins
• Powerful combination
• List join conditions in the WHERE clause
Example 14: List the number of students enrolled in each 2008 offering. SELECT Offering.OfferNo, COUNT(*) AS NumStudents FROM Enrollment, Offering WHERE Offering.OfferNo = Enrollment.OfferNo AND OffYear = 2010 GROUP BY Offering.OfferNo
Slide 23Chapter 4: Query Formulation with SQL
Conceptual Evaluation Process
FROM Tables:Cross Product and
Join Operations
GROUPBY?
Restrictionon WHEREConditions
Sort onGROUP BY
Columns
ComputeAggregatesand ReduceEach Group
to 1 Row
ORDERBY?
SortColumns inORDER BY
1
2
3
4
6
7
Yes
No
Yes
No
Finish
Restrictionon HAVINGConditions
5
ProjectColumns in
SELECT
Slide 24Chapter 4: Query Formulation with SQL
Conceptual Evaluation Lessons
Row operations before group operations FROM and WHERE before GROUP BY and
HAVING Check row operations first
Grouping occurs only one time Use small sample tables
Slide 25Chapter 4: Query Formulation with SQL
Conceptual Evaluation Problem
Example 15: List the number of offerings taught in 2010 by faculty rank and department. Exclude combinations of faculty rank and department with less than two offerings taught. SELECT FacRank, FacDept, COUNT(*) AS NumOfferings FROM Faculty, Offering WHERE Offering.FacNo = Faculty.FacNo AND OffYear = 2010 GROUP BY FacRank, FacDept HAVING COUNT(*) > 1
Slide 26Chapter 4: Query Formulation with SQL
Query Formulation Process
Problem Statement
Problem Statement
Database Representation
Database Language Statement
Slide 27Chapter 4: Query Formulation with SQL
Critical Questions
What tables? Columns in output Conditions to test (including join conditions)
How to combine the tables? Usually join PK to FK More complex ways to combine
Individual rows or groups of rows? Aggregate functions in output Conditions with aggregate functions
Slide 28Chapter 4: Query Formulation with SQL
Efficiency Considerations
Little concern for efficiency Intelligent SQL compilers Correct and non redundant solution
No extra tables No unnecessary grouping Use HAVING for group conditions only
Chapter 8 provides additional tips for avoiding inefficient SELECT statements
Slide 29Chapter 4: Query Formulation with SQL
Advanced Problems
Joining multiple tables Self joins Grouping after joining multiple tables Traditional set operators
Slide 30Chapter 4: Query Formulation with SQL
Joining Three Tables
Example 16: List Leonard Vince’s teaching schedule in fall 2009. For each course, list the offering number, course number, number of units, days, location, and time.
SELECT OfferNo, Offering.CourseNo, OffDays, CrsUnits, OffLocation, OffTime FROM Faculty, Course, Offering WHERE Faculty.FacNo = Offering.FacNo AND Offering.CourseNo = Course.CourseNo AND OffYear = 2009 AND OffTerm = 'FALL' AND FacFirstName = 'Leonard' AND FacLastName = 'Vince'
Slide 31Chapter 4: Query Formulation with SQL
Joining Four Tables
Example 17: List Bob Norbert’s course schedule in spring 2010. For each course, list the offering number, course number, days, location, time, and faculty name.
SELECT Offering.OfferNo, Offering.CourseNo, OffDays, OffLocation, OffTime, FacFirstName, FacLastName FROM Faculty, Offering, Enrollment, Student WHERE Offering.OfferNo = Enrollment.OfferNo AND Student.StdNo = Enrollment.StdNo AND Faculty.FacNo = Offering.FacNo AND OffYear = 2010 AND OffTerm = 'SPRING' AND StdFirstName = 'BOB' AND StdLastName = 'NORBERT'
Slide 32Chapter 4: Query Formulation with SQL
Self-Join
Join a table to itself Usually involve a self-referencing
relationship Useful to find relationships among rows of
the same table Find subordinates within a preset number of
levels Find subordinates within any number of levels
requires embedded SQL
Slide 33Chapter 4: Query Formulation with SQL
Self-Join Example
Example 18: List faculty members who have a higher salary than their supervisor. List the social security number, name, and salary of the faculty and supervisor.
SELECT Subr.FacNo, Subr.FacLastName, Subr.FacSalary, Supr.FacSSN, Supr.FacLastName, Supr.FacSalary FROM Faculty Subr, Faculty Supr WHERE Subr.FacSupervisor = Supr.FacNo AND Subr.FacSalary > Supr.FacSalary
Slide 34Chapter 4: Query Formulation with SQL
Multiple Joins Between Tables
Example 19: List the names of faculty members and the course number for which the faculty member teaches the same course number as his or her supervisor in 2010.
SELECT FacFirstName, FacLastName, O1.CourseNo
FROM Faculty, Offering O1, Offering O2
WHERE Faculty.FacNo = O1.FacSSN
AND Faculty.FacSupervisor = O2.FacNo
AND O1.OffYear = 2010 AND O2.OffYear = 2010
AND O1.CourseNo = O2.CourseNo
Slide 35Chapter 4: Query Formulation with SQL
Multiple Column Grouping
Example 20: List the course number, the offering number, and the number of students enrolled. Only include courses offered in spring 2010.
SELECT CourseNo, Enrollment.OfferNo,
Count(*) AS NumStudents
FROM Offering, Enrollment
WHERE Offering.OfferNo = Enrollment.OfferNo
AND OffYear = 2010 AND OffTerm = 'SPRING'
GROUP BY Enrollment.OfferNo, CourseNo
Slide 36Chapter 4: Query Formulation with SQL
Traditional Set Operators
A UNION B
A INTERSECT B
A MINUS B
Slide 37Chapter 4: Query Formulation with SQL
Union Compatibility Requirement for the traditional set
operators Strong requirement
Same number of columns Each corresponding column is compatible Positional correspondence
Apply to similar tables by removing columns first
Slide 38Chapter 4: Query Formulation with SQL
SQL UNION Example
Example 21: Retrieve basic data about all university people
SELECT FacNo AS PerNo, FacFirstName AS FirstName, FacLastName AS LastName, FacCity AS City, FacState AS State FROM Faculty
UNION SELECT StdNo AS PerNo, StdFirstName AS FirstName, StdLastName AS LastName, StdCity AS City, StdState AS State FROM Student
Slide 39Chapter 4: Query Formulation with SQL
Oracle INTERSECT Example
Example 22: Show teaching assistants, faculty who are students. Only show the common columns in the result.
SELECT FacNo AS PerNo, FacFirstName AS FirstName, FacLastName AS LastName, FacCity AS City, FacState AS State FROM Faculty INTERSECTSELECT StdNo AS PerNo, StdFirstName AS FirstName, StdLastName AS LastName, StdCity AS City, StdState AS State FROM Student
Slide 40Chapter 4: Query Formulation with SQL
Oracle MINUS Example
Example 23: Show faculty who are not students (pure faculty). Only show the common columns in the result.
SELECT FacNo AS PerNo, FacFirstName AS FirstName, FacLastName AS LastName, FacCity AS City, FacState AS State FROM Faculty MINUSSELECT StdNo AS PerNo, StdFirstName AS FirstName, StdLastName AS LastName, StdCity AS City, StdState AS State FROM Student
Slide 41Chapter 4: Query Formulation with SQL
Data Manipulation Statements
INSERT: adds one or more rows UPDATE: modifies one or more rows DELETE: removes one or more rows Use SELECT statement to INSERT multiple
rows UPDATE and DELETE can use a WHERE
clause Not as widely used as SELECT statement
Slide 42Chapter 4: Query Formulation with SQL
INSERT ExampleExample 24: Insert a row into the Student table supplying values for all columns.
INSERT INTO Student
(StdNo, StdFirstName, StdLastName,
StdCity, StdState, StdZip, StdClass,
StdMajor, StdGPA)
VALUES ('999999999','JOE','STUDENT','SEATAC',
'WA','98042-1121','FR','IS', 0.0)
Slide 43Chapter 4: Query Formulation with SQL
UPDATE ExampleExample 25: Change the major and class of Homer Wells.
UPDATE Student
SET StdMajor = 'ACCT',
StdClass = 'SO'
WHERE StdFirstName = 'HOMER'
AND StdLastName = 'WELLS'
Slide 44Chapter 4: Query Formulation with SQL
DELETE ExampleExample 26: Delete all IS majors who are seniors.
DELETE FROM Student
WHERE StdMajor = 'IS'
AND StdClass = 'SR'
Slide 45Chapter 4: Query Formulation with SQL
Summary
SQL is a broad language SELECT statement is complex Use problem solving guidelines Lots of practice to master query
formulation and SQL
Top Related