CpSc 3220The Language of SQL
Chapters 10-12
Summarizing Data
• Most SQL functions apply to scalar arguments• SUMMARY or AGGREGATE functions apply to
rows of data
Some Aggregate Functions
• DISTINCT• SUM• AVG• MIN• MAX• COUNT
SQL Commands Used in Aggregations
• GROUP BY• HAVING
Syntax of the SELECT statementSELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
Eliminating Duplicates with DISTINCT
• Some SQL statements will generate result tables that contain duplicate rows
• Adding the DISTINCT keyword immediately after the SELECT command eliminates duplicates
• Example:SELECT DISTINCT artist from
SongTitles;
Aggregate Functions
• Most aggregate functions apply only to numeric column data– SUM– AVG– MIN– MAX– COUNT– GROUP_CONCAT
The COUNT Function
• Three different usagesSelect count(*) from Grades;
Select count(Grade) from Grades where gradeType=‘homework’;
Select count(DISTINCT FeeType) from Fees;
Grouping Data
• SQL allows the grouping of rows by column values
• For example, we might want to group student records by Major code and apply summary functions to each group of rows with the same Major code value
• The GROUP BY clause handles this
GROUP BY Example
SELECT GradeType ,AVG(Grade) FROM GradesGROUP BY GradeTypeORDER BY GradeType;
Multiple Columns and Sorting
• Groups can be based on more than one column
• Example:SELECT GradeType,Student,AVG(Grade)FROM GradesGROUP BY GradeType,StudentORDER BY GradeType,Student
Group Conditions
• Conditions can be used for Groups but not with a WHERE clause; a HAVING clause is used instead
• Example:SELECT GradeType,Student,AVG(Grade)FROM GradesGROUP BY GradeType,StudentHAVING AVG(Grade) >= 70ORDER BY GradeType,Student
Selection Criteria on Aggregates
SELECT colList1FROM tableListWHERE conditionForIncludionInTableGROUP BY colList2HAVING conditionForInclusionInGroupORDER BY colList3
The Full Select Command
SELECT exp_list1FROM table_listWHERE condition_expGROUP BY exp_list2HAVING condition_expORDER BY exp_list3
Combining Tables
• The previous slides have used the term tableList in the WHERE clause but we have only generated queries for a single table
• Tables can and will be combined in most meaningful queries
• The simplest way of combining tables is by Cartesian Product; attach every row from Table1 to every row from Table2
Combining Tables with INNER JOIN
• ExampleSELECT colList
FROM table1 INNER JOIN table2 ON joinCondition[INNER JOIN table2 ON joinCondition]. . .WHERE colListSelectionCondition
Alternate Notation
SELECT colListFROM table1 [, table2 ] . . .WHERE joinAndColListSelectionCondition
Combining Tales with OUTER JOIN
• OUTER JOINs allow the creation of a entry in the combined table even when a matching row is not found in one of the tables to be joined. The column entries for the missing data are all set to NULL
LEFT OUTER JOIN
SELECT colListFROM table1 LEFT [OUTER] JOIN table2 ON joinCondition[LEFT [OUTER] JOIN table3 ON joinCondition] . . .
RIGHT JOIN
SELECT colListFROM table1 RIGHT [OUTER] JOIN table2 ON joinCondition[RIGHT [OUTER] JOIN table3 ON joinCondition]. . .
Table Order in OUTER JOINs
• LEFT and RIGHT and INNER JOINs can be combined in a single statement
• Be careful to make sure multiple JOINs are done in the desired sequence
• A LEFT and a RIGHT combination is a FULL JOIN
Full Joins
• Not allowed in MySQL