CpSc 3220 The Language of SQL Chapters 10-12. Summarizing Data Most SQL functions apply to scalar...

Preview:

Citation preview

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

Recommended