tailieunhanh - Joe Celko s SQL for Smarties - Advanced SQL Programming P45

Joe Celko s SQL for Smarties - Advanced SQL Programming P45. In the SQL database community, Joe Celko is a well-known columnist and purveyor of valuable insights. In Joe Celko's SQL for Smarties: Advanced SQL Programming, he picks up where basic SQL training and experience leaves many database professionals and offers tips, techniques, and explanations that help readers extend their capabilities to top-tier SQL programming. Although Celko denies that the book is about database theory, he nevertheless alludes to theory often to buttress his practical points. This title is not for novices, as the author points out. Instead, its intended audience. | 412 CHAPTER 19 PARTITIONING DATA IN QUERIES WHERE different suppliers AND same parts GROUP BY HAVING COUNT SELECT COUNT -- same count of parts FROM SupParts AS S3 WHERE AND COUNT SELECT COUNT FROM SupParts AS S4 WHERE This can be modified into Todd s division easily by adding the restriction that the parts must also belong to a common job. Steve Kass came up with a specialized version that depends on using a numeric code. Assume we have a table that tells us which players are on which teams. CREATE TABLE TeamAssignments player_id INTEGER NOT NULL REFERENCES Players player_id ON DELETE CASCADE ON UPDATE CASCADE team_id CHAR 5 NOT NULL REFERENCES Teams team_id ON DELETE CASCADE ON UPDATE CASCADE PRIMARY KEY player_id team_id To get pairs of players on the same team SELECT FROM Players AS Pl Players AS P2 WHERE GROUP BY HAVING ALL SELECT SUM FROM TeamAssignments AS P3 WHERE IN GROUP BY Relational Division 413 Division with JOINs Standard SQL has several join operators that can be used to perform a relational division. To find the pilots who can fly the same planes as Higgins use this query SELECT FROM SELECT plane FROM Hangar AS H1 INNER JOIN SELECT pilot plane FROM PilotSkills AS SP1 ON INNER JOIN SELECT FROM PilotSkills WHERE pilot Higgins AS H2 ON GROUP BY Pilot HAVING COUNT SELECT COUNT FROM PilotSkills WHERE pilot Higgins The first join finds all of the planes in the hangar for which we have a pilot. The next JOIN takes that set and finds which of those match up with SELECT FROM PilotSkills WHERE pilot Higgins skills. The group by clause will then see that the intersection we have formed with the joins has at least as many elements as Higgins has planes. The group by .