Advanced Query Formulation with SQL - PowerPoint PPT Presentation

1 / 35
About This Presentation
Title:

Advanced Query Formulation with SQL

Description:

List the social security number, the name, and the major of students who have a ... List the social security number and name of faculty who teach at least one ... – PowerPoint PPT presentation

Number of Views:54
Avg rating:3.0/5.0
Slides: 36
Provided by: michae1242
Category:

less

Transcript and Presenter's Notes

Title: Advanced Query Formulation with SQL


1
Chapter 4
  • Advanced Query Formulation with SQL

2
Outline
  • Outer join problems
  • Type I nested queries
  • Type II nested queries and difference problems
  • Division problems
  • Null value effects

3
Outer Join Overview
  • Join excludes non matching rows
  • Preserving non matching rows is important in some
    problems
  • Outer join variations
  • Full outer join
  • One-sided outer join

4
Outer Join Operators
Full outer join
Right Outer Join
Left Outer Join
Join
Matched rows using the join condition
Unmatched rows of the left table
Unmatched rows of the right table
5
Full Outer Join Example
6
University Database
7
LEFT JOIN and RIGHT JOIN Keywords
  • Example 1 (Access)
  • SELECT OfferNo, CourseNo, Offering.FacSSN,
  • FacFirstName, FacLastName
  • FROM Offering LEFT JOIN Faculty
  • ON Offering.FacSSN Faculty.FacSSN
  • WHERE CourseNo LIKE 'IS'
  • Example 2 (Access)
  • SELECT OfferNo, CourseNo, Offering.FacSSN,
  • FacFirstName, FacLastName
  • FROM Faculty RIGHT JOIN Offering
  • ON Offering.FacSSN Faculty.FacSSN
  • WHERE CourseNo LIKE 'IS'

8
Oracle Notation for One-Sided Outer Joins
  • Example 3 (Oracle)
  • SELECT OfferNo, CourseNo, Offering.FacSSN,
  • FacFirstName, FacLastName
  • FROM Faculty, Offering
  • WHERE Offering.FacSSN Faculty.FacSSN ()
  • AND CourseNo LIKE 'IS'
  • Example 4 (Oracle)
  • SELECT OfferNo, CourseNo, Offering.FacSSN,
  • FacFirstName, FacLastName
  • FROM Faculty, Offering
  • WHERE Faculty.FacSSN () Offering.FacSSN
  • AND CourseNo LIKE 'IS'

9
Full Outer Join Example I
Example 5 (Access) SELECT FacSSN, FacFirstName,
FacLastName, FacSalary, StdSSN,
StdFirstName, StdLastName, StdGPA FROM
Faculty RIGHT JOIN Student ON
Student.StdSSN Faculty.FacSSN UNION SELECT
FacSSN, FacFirstName, FacLastName,
FacSalary, StdSSN, StdFirstName,
StdLastName, StdGPA FROM Faculty LEFT JOIN
Student ON Student.StdSSN Faculty.FacSSN
10
Full Outer Join Example II
Example 5 (Oracle) SELECT FacSSN, FacFirstName,
FacLastName, FacSalary, StdSSN,
StdFirstName, StdLastName, StdGPA FROM
Faculty, Student WHERE Student.StdSSN
Faculty.FacSSN () UNION SELECT FacSSN,
FacFirstName, FacLastName, FacSalary,
StdSSN, StdFirstName, StdLastName,
StdGPA FROM Faculty, Student WHERE
Student.StdSSN () Faculty.FacSSN
11
Mixing Inner and Outer Joins I
Example 6 (Access) SELECT OfferNo,
Offering.CourseNo, OffTerm, CrsDesc,
Faculty.FacSSN, FacLastName FROM ( Faculty
RIGHT JOIN Offering ON Offering.FacSSN
Faculty.FacSSN ) INNER JOIN Course ON
Course.CourseNo Offering.CourseNo WHERE
Course.CourseNo LIKE 'IS'
12
Mixing Inner and Outer Joins II
Example 6 (Oracle) SELECT OfferNo,
Offering.CourseNo, OffTerm, CrsDesc,
Faculty.FacSSN, FacLastName FROM ( Faculty,
Course, Offering WHERE Offering.FacSSN
Faculty.FacSSN () AND Course.CourseNo
Offering.CourseNo AND Course.CourseNo LIKE
'IS'
13
Type I Nested Queries
  • Query inside a query
  • Use in WHERE and HAVING conditions
  • Similar to a nested procedure
  • Executes one time
  • No reference to outer query
  • Also known as non-correlated or independent
    nested query

14
Type I Nested Query Examples
  • List the social security number, the name, and
    the major of students who have a high grade (gt
    3.5) in a course offering
  • SELECT StdSSN, StdFirstName, StdLastName,
    StdMajor
  • FROM student
  • WHERE Student.StdSSN in
  • (SELECT StdSSN FROM Enrollment
  • WHERE EnrGrade gt 3.5)

15
Type I Nested Query Examples
  • Retrieve the name, and the grade of students who
    have a high grade (gt 3.5) in a course offered in
    fall 1999
  • SELECT StdSSN, StdFirstName, StdLastName,
    StdMajor
  • FROM Student INNER JOIN Enrollment
  • on Student.StdSSN Enrollment.StdSSN
  • WHERE ErnGrade gt 3.5 and Enrollment.OfferNo in
  • (SELECT OfferNo FROM Offering
  • WHERE OffTerm FALL and OffYear1999)

16
Type I Nested Query Examples
Example 7 (Access) List finance faculty who
teach IS courses. SELECT FacSSN, FacLastName,
FacDept FROM Faculty WHERE FacDept 'FIN'
AND FacSSN IN ( SELECT FacSSN FROM Offering
WHERE CourseNo LIKE 'IS' ) Example 8
(Access) List finance faculty who teach 4 unit
IS courses. SELECT FacSSN, FacLastName, FacDept
FROM Faculty WHERE FacDept 'FIN' AND FacSSN
IN ( SELECT FacSSN FROM Offering WHERE
CourseNo LIKE 'IS' AND CourseNo IN (
SELECT CourseNo FROM Course WHERE
CrsUnits 4 ) )
17
Type I Nested Query Examples
  • Retrieve the social security number, the name,
    the department, and the salary of faculty who are
    not students.
  • SELECT FacSSN, FacFirstName, FacLastName,
    FacDept, FacSalary
  • FROM Faculty
  • WHERE FacSSN NOT in
  • (SELECT StdSSN FROM Student)

18
DELETE Example
  • Use Type I nested queries to test conditions on
    other tables
  • Use for UPDATE statements also
  • Example 9 Delete offerings taught by Leonard
    Vince.
  • DELETE FROM Offering
  • WHERE Offering.FacSSN IN
  • ( SELECT FacSSN FROM Faculty
  • WHERE FacFirstName 'Leonard'
  • AND FacLastName 'Vince' )

19
Type II Nested Queries
  • Similar to nested loops
  • Executes one time for each row of outer query
  • Reference to outer query
  • Also known as correlated or variably nested query
  • Use for difference problems not joins

20
Type II Nested Query Examples
  • List the social security number, the name, and
    the major of students who have a high grade (gt
    3.5) in a course offering
  • SELECT StdSSN, StdFirstName, StdLastName,
    StdMajor
  • FROM student
  • WHERE EXISTS
  • (SELECT StdSSN FROM Enrollment
  • WHERE Student.StdSSNEnrollment.StdSSN
    AND EnrGrade gt 3.5)

21
Type II Nested Query Example
Example 10 Retrieve MS faculty who are not
teaching in winter 2000. SELECT FacSSN,
FacLastName, FacDept FROM Faculty WHERE
FacDept 'MS' AND NOT EXISTS ( SELECT FROM
Offering WHERE OffTerm 'WINTER'
AND OffYear 2000 AND Faculty.FacSSN
Offering.FacSSN )
22
Alternative Difference Formulation
Example 11 Retrieve MS faculty who are not
teaching in winter 2000. SELECT FacSSN,
FacLastName, FacDept FROM Faculty WHERE
FacDept 'MS' AND FacSSN NOT IN ( SELECT
FacSSN FROM Offering WHERE OffTerm
'WINTER' AND OffYear 2000 )
23
Formulation of Difference
  • List students who took all there is offerings in
    winter 2000 from the same instructor
  • SELECT DISTINCT Enrollment.StdSSN, StdFirstName,
    StdLastName
  • FROM Student, Enrollment, Offering
  • WHERE Student.StdSSNEnrollment.StdSSN
  • AND Enrollment.OfferNoOffering.OfferNo
  • AND CourseNo LIKE 'IS'
  • AND OffTerm 'Winter'
  • AND OffYear 2000
  • AND NOT EXISTS
  • (SELECT FROM Enrollment E1, Offering O1
  • WHERE E1.OfferNo O1.OfferNo
  • AND O1.CourseNo LIKE 'IS'
  • AND O1.OffTerm 'Winter'
  • AND O1.OffYear 2000
  • AND O1.FacSSN ltgt Offering.FacSSN
  • AND E1.StdSSN Enrollment.StdSSN )

24
Divide Operator
  • Match on a subset of values
  • Suppliers who supply all parts
  • Faculty who teach every IS course
  • Specialized operator
  • Typically applied to associative tables
    representing M-N relationships

25
Division Example
26
COUNT Method for Division Problems
  • Compare the number of rows associated with a
    group to the total number in the subset of
    interest
  • Type I nested query in the HAVING clause
  • Example 12 List the students who belong to all
    clubs.
  • SELECT StdNo
  • FROM StdClub
  • GROUP BY StdNo
  • HAVING COUNT()
  • ( SELECT COUNT() FROM Club )

27
Typical Division Problems
  • Compare to an interesting subset rather than
    entire table
  • Use similar conditions in outer and nested query
  • Example 13 List the students who belong to all
    social clubs.
  • SELECT Student1.StdNo, SName
  • FROM StdClub, Club, Student1
  • WHERE StdClub.ClubNo Club.ClubNo
  • AND Student1.StdNo StdClub.StdNo
  • AND CPurpose 'SOCIAL'
  • GROUP BY Student1.StdNo, SName
  • HAVING COUNT()
  • ( SELECT COUNT() FROM Club
  • WHERE CPurpose 'SOCIAL' )

28
Advanced Division Problems
  • Count distinct values rather than rows
  • Faculty who teach at least one section of
    selected course offerings
  • Offering table has duplicate CourseNo values
  • Use COUNT(DISTINCT column)
  • Use stored query in Access

29
Advanced Division Example
  • List the social security number and name of
    faculty who teach at least one section of all the
    fall 1999 IS course
  • SELECT Faculty.FacSSN, FacFirstName, FacLastName
  • FROM Faculty, Offering
  • Where Faculty.FacSSN Offering.FacSSN
  • AND OffTermFall and CourseNo LIKE IS
    and
  • Offyear 1999
  • Group by Faculty.FacSSN, FacFirstName,
    FacLastName
  • HAVING COUNT(DISTICT CourseNo)
  • (SELECT COUNT(DISTINCT CourseNO) FROM
    Offering
  • WHERE Offterm FALL and Offyear
    1999
  • AND CourseNo Like IS)

30
Null Value Effects
  • Simple conditions
  • Compound conditions
  • Grouping and aggregate functions
  • SQL2 standard but implementation may vary

31
Simple Conditions
  • Simple condition is null if either left-hand or
    right-hand side is null.
  • Discard rows evaluating to false or null
  • Retain rows evaluating to true
  • Rows evaluating to null will not appear in the
    result of the simple condition or its negation

32
Compound Conditions
33
Aggregate Functions
  • Null values ignored
  • Effects can be subtle
  • COUNT() may differ from Count(Column)
  • SUM(Column1) SUM(Column2) may differ from
    SUM(Column1 Column2)
  • SELECT SUM(CBudget) as SumBudget,
  • SUM(CActual) AS SumActual,
  • SUM(CBudget) SUM(CActual) AS SumDiff,
  • SUM(CBUdget CActual) AS SumOfDiffs
  • FROM Club

34
Grouping Effects
  • Rows with null values are grouped together
  • Grouping column contains null values
  • Null group can be placed at beginning or end of
    the non-null groups

35
Summary
  • Advanced matching problems not common but
    important when necessary
  • Understand outer join, difference, and division
    operators
  • Nested queries important for advanced matching
    problems
  • Lots of practice to master query formulation and
    SQL
Write a Comment
User Comments (0)
About PowerShow.com