Presentation is loading. Please wait.

Presentation is loading. Please wait.

+ SQL – Once More With Feeling. + Review and Questions Topics from last lecture Terminology Questions?

Similar presentations


Presentation on theme: "+ SQL – Once More With Feeling. + Review and Questions Topics from last lecture Terminology Questions?"— Presentation transcript:

1 + SQL – Once More With Feeling

2 + Review and Questions Topics from last lecture Terminology Questions?

3 + Auto Increment Key Word for MS SQL – Identity Can specify at time of table creation – The easiest CREATE TABLE PlayerDetails( PlayerIDINTPrimary Key Identity, PlayerFirstNameChar(30)Not Null, … ); Or alter tables to include Identity

4 + Happy Valley Golf

5 + Altering Player ID to include -- PlayerID Alter Table PlayerHandicap drop constraint PLAYERID_FK; Alter Table Player_Rounds drop constraint PLAYERID2_FK; Alter Table PlayerDetails drop constraint PLAYERID_PK; Alter Table PlayerDetails Drop column PlayerId; Alter Table PlayerDetails Add PlayerID int identity; Alter Table PlayerDetails Add constraint pk_PlayerID primary key(PlayerId); Alter Table PlayerHandicap Add Constraint PLAYERID_FK Foreign Key (PlayerId) References PlayerDetails(PlayerId); Alter Table Player_Rounds Add Constraint PLAYERID2_FK Foreign Key (PlayerId) References PlayerDetails(PlayerId);

6 + Group By The GROUP BY statement is used in conjunction with the aggregate functions to group the result-set by one or more columns. How many rounds of Golf have been played? How many rounds of Golf have been played at each golf course? (Just need the id for the course)

7 + Group By How many rounds of Golf have been played? SELECT Count(RoundId) AS NumberofRounds FROM GolfRounds; How many rounds of Golf have been played at each golf course? (just need id for the course) SELECT CourseID, Count(RoundId) AS NumberofRounds FROM GolfRounds GROUP BY CourseID;

8 + Having Allows for the results to be displayed for only a selection of the results of the function (count, average, etc). How many multiple rounds of Golf have been played at each golf course (display results for only courses that have more than 1 round)? (just need id for the course)

9 + Having How many multiple rounds of Golf have been played at each golf course (display results for only courses that have more than 1 round)? (just need id for the course) SELECT CourseID, Count(RoundId) AS NumberofRounds FROM GolfRounds GROUP BY CourseID; HAVING COUNT(RoundId) > 1;

10 + One Step Farther How many rounds of Golf have been played at each golf course and what golf course have they been played at (name of the course)? SELECT CourseName, Count(RoundId) AS NumberofRounds FROM GolfRounds AS GR, GolfCourses AS GC WHERE GR.CourseID = GC.CourseID GROUP BY GR.CourseID, CourseName;

11 + Join Needed when the results displayed come from multiple tables. If the results to display come from one table you can use a subquery

12 + Inner Joins Returns the rows when there is at least one match in both tables. SELECT CourseName, Count(RoundId) FROM GolfRounds AS GR, GolfCourses AS GC WHERE GR.CourseID = GC.CourseID GROUP BY GR.CourseID, CourseName;

13 + Join … On Will give the same results as the join query on the previous slide SELECT CourseName, Count(RoundId) FROM GolfRounds AS GR JOIN GolfCourses AS GC ON GR.CourseID = GC.CourseID GROUP BY GR.CourseID, CourseName;

14 + Outer Join Returns all rows from both the participating tables which satisfy the join condition along with rows which do not satisfy the join condition. How many rounds of Golf have been played at each golf course and what golf course have they been played at (name of the course)? Display all golf courses even if there has been no rounds played. SELECT CourseName, Count(RoundID) FROM GolfRounds AS GR RIGHT JOIN GolfCourses AS GC ON GR.CourseID = GC.CourseID GROUP BY GR.CourseID, CourseName;

15 + Outer Join Can use left Join as well. SELECT CourseName, Count(RoundID) FROM GolfCourses AS GC LEFT JOIN GolfRounds AS GR ON GR.CourseID = GC.CourseID GROUP BY GR.CourseID, CourseName;

16 + Multiple Joins You can use multiple tables together, not just two. Show player’s names along with their average hole score and their handicap, for all players that have a handicap and have recorded round scores. SELECT PlayerFirstName, PlayerLastName, Avg(HoleScore) AS AvgHoleScore, Avg(HandicapScore) AS AvgHandicapScore FROM PlayerDetails AS PD, Player_Rounds AS PR, PlayerHandicap AS PH WHERE PD.PlayerID = PR.PlayerID AND PR.PlayerID = PH.PlayerID GROUP BY PlayerLastName, PlayerFirstName

17 + Multiple Joins.. Using JOIN…. ON Show all player’s names along with their average hole score and their handicap SELECT PlayerFirstName, PlayerLastName, Avg(HoleScore) AS AvgHoleScore, Avg(HandicapScore) AS AvgHandicapScore FROM (PlayerDetails AS PD JOIN Player_Rounds AS PR ON PD.PlayerID = PR.PlayerID) JOIN PlayerHandicap AS PH ON PR.PlayerID = PH.PlayerID GROUP BY PlayerLastName, PlayerFirstName

18 + Multiple Joins – Outer Join Show all player’s names along with their average hole score and their handicap SELECT PlayerFirstName, PlayerLastName, Avg(HoleScore) AS AvgHoleScore, Avg(HandicapScore) AS AvgHandicapScore FROM (PlayerDetails AS PD LEFT JOIN Player_Rounds AS PR ON PD.PlayerID = PR.PlayerID) LEFT JOIN PlayerHandicap AS PH ON PR.PlayerID = PH.PlayerID GROUP BY PlayerLastName, PlayerFirstName

19 + Practice 1.) Display each golf courses name, the average yards and par for holes at each course. 2.) Display each golf courses name, the average yards and par for holes at each course, and the number of holes played at the course. (Include all courses) 3.) Display each golf courses name, the average yards and par for holes at each course, and the number of rounds played at the course. (Include all courses)

20 + Question 1 Display each golf courses name, the average yards and par for holes at each course. SELECT CourseName, Avg(YardsForHole) AS AvgYardsForHole, Avg(ParForHole) AS ParForHole FROM GolfCourses AS GC LEFT JOIN CourseHoleDetails AS CHD ON GC.CourseID = CHD.CourseID GROUP BY GC.CourseID, CourseName

21 + Question 2 Display each golf courses name, the average yards and par for holes at each course, and the number of holes played at the course. (Include all courses) SELECT CourseName, Count(RoundId) AS NumberofHolesPlayer, Avg(YardsForHole) AS AvgYardsForHole, Avg(ParForHole) AS ParForHole FROM (GolfCourses AS GC LEFT JOIN GolfRounds AS GR ON GR.CourseID = GC.CourseID) RIGHT JOIN CourseHoleDetails AS CHD ON GC.CourseID = CHD.CourseID GROUP BY GR.CourseID, CourseName;

22 + Question 3 Display each golf courses name, the average yards and par for holes at each course, and the number of rounds played at the course. (Include all courses) SELECT CourseName, Count(DISTINCT RoundId) AS NumberofHolesPlayer, Avg(YardsForHole) AS AvgYardsForHole, Avg(ParForHole) AS ParForHole FROM (GolfCourses AS GC LEFT JOIN GolfRounds AS GR ON GR.CourseID = GC.CourseID) RIGHT JOIN CourseHoleDetails AS CHD ON GC.CourseID = CHD.CourseID GROUP BY GR.CourseID, CourseName;

23 + SQL Extra’s

24 + Example – Inner Join IDFName 1Jim 2Bob 3Sally 4Beth IDLName 1Smith 3Jones 5Adams 7Zhu TableATableB Select FName, Lname From TableA Join TableB on TableA.ID = TableB.ID Inner JoinResults FNameLName JimSmith SallyJones

25 + Example – Outer Join - Left IDFName 1Jim 2Bob 3Sally 4Beth IDLName 1Smith 3Jones 5Adams 7Zhu TableATableB Select FName, Lname From TableA Left Join TableB on TableA.ID = TableB.ID Outer Join LeftResults FNameLName JimSmith BobNull SallyJones BethNull

26 + Example – Outer Join - Right IDFName 1Jim 2Bob 3Sally 4Beth IDLName 1Smith 3Jones 5Adams 7Zhu TableATableB Select FName, Lname From TableA Right Join TableB on TableA.ID = TableB.ID Outer JoinResults FNameLName JimSmith SallyJones FNameLName JimSmith SallyJones NullAdams NullZhu

27 + Question How do we get results from both table?

28 + Union Combines the results of two or more queries into a single result set that includes all the rows that belong to all queries in the union The UNION operation is different from using joins that combine columns from two tables. The following are basic rules for combining the result sets of two queries by using UNION: The number and the order of the columns must be the same in all queries. The data types must be compatible Column names for the final result set are taken from the first query

29 + Union / Union All - keywords UNION allow you to join multiple datasets into one dataset and will remove any duplicates that exist. Basically it is performing a DISTINCT operation across all columns in the result set. UNION ALL allows you to join multiple datasets into one dataset, but it does not remove any duplicate rows. Because this does not remove duplicate rows this process is faster, but if you don't want duplicate records you will need to use the UNION operator instead.

30 + Example - Union IDFName 1Jim 2Bob 3Sally 4Beth IDLName 1Smith 3Jones 5Adams 7Zhu TableATableB Select FName, Lname From TableA Left Join TableB on TableA.ID = TableB.ID UNION Select FName, Lname From TableA Right Join TableB on TableA.ID = TableB.ID Union Results FNameLName JimSmith SallyJones FNameLName JimSmith BobNull SallyJones BethNull Adams NullZhu

31 + Example – Union All IDFName 1Jim 2Bob 3Sally 4Beth IDLName 1Smith 3Jones 5Adams 7Zhu TableATableB Select FName, Lname From TableA Left Join TableB on TableA.ID = TableB.ID UNION ALL Select FName, Lname From TableA Right Join TableB on TableA.ID = TableB.ID Union Results FNameLName JimSmith SallyJones FNameLName JimSmith BobNull SallyJones BethNull JimSmith SallyJones NullAdams NullZhu


Download ppt "+ SQL – Once More With Feeling. + Review and Questions Topics from last lecture Terminology Questions?"

Similar presentations


Ads by Google