Download presentation
Presentation is loading. Please wait.
1
Prentice Hall © 20041 COS 346 Day 13
2
7-2 Agenda Questions?Questions? Assignment 5 not CorrectedAssignment 5 not Corrected –2 MIA’s Assignment 6 PostedAssignment 6 Posted –Due March 23 Assignment 7 PostedAssignment 7 Posted –Due March 30 New Time line (New Time line ( More on SQL & SQL ServerMore on SQL & SQL Server –Chap 4&5
3
New time line MarchMarch –19 - SQL 4 & 5 –23 - SQL 6 & 7 Assignment 6 dueAssignment 6 due –26 - SQL 8 & 9 –30 - SQL 10 Assignment 7 dueAssignment 7 due Progress reportProgress report AprilApril –2 Database Redesign –6 - Database redesign Quiz 2Quiz 2 Assignment 8 dueAssignment 8 due –9 - Managing Multiuser databases –13 - Managing Multiuser databases Assignment 9 due –16 Managing Multiuser databases –20 Database access standards Progress report –23 - Database access standards Assignment 10 due –27 Quiz 3 Capstones Presentations Due
4
Pretice Hall © 20044 Chapter 4: Adding Power to Queries SQL for SQL Server Bijoy Bordoloi and Douglas Bock
5
Pretice Hall © 20045 OBJECTIVES Use logical operators (AND, OR, NOT) to write complex query conditions.Use logical operators (AND, OR, NOT) to write complex query conditions. Use the IN and BETWEEN operators.Use the IN and BETWEEN operators. Use the LIKE operator for character matching.Use the LIKE operator for character matching. Use the IS NULL operator when querying for unknown values.Use the IS NULL operator when querying for unknown values. Use expressions in WHERE clauses.Use expressions in WHERE clauses.
6
Pretice Hall © 20046 LOGICAL OPERATORS (AND, OR, AND NOT) AND: Joins two or more conditions, and returns results only when all of the conditions are true.AND: Joins two or more conditions, and returns results only when all of the conditions are true. OR: Joins two or more conditions, and returns results when any of the conditions are true.OR: Joins two or more conditions, and returns results when any of the conditions are true. NOT: Negates the expression that follows it.NOT: Negates the expression that follows it.
7
Pretice Hall © 20047 AND OPERATOR SELECT emp_last_name, emp_first_name, emp_gender "Gender" FROM employee WHERE emp_gender = ‘F’ AND emp_last_name >= 'E' ORDER BY emp_last_name; emp_last_name emp_first_name Gender ------------- -------------- ------ Joyner Suzanne F Markis Marcia F Prescott Sherri F
8
Pretice Hall © 20048 AND OPERATOR SELECT CAST(emp_last_name AS Char (12)) "Last Name", CAST(emp_first_name AS CHAR(2)) "First Name", CAST(emp_first_name AS CHAR(2)) "First Name", CAST(emp_date_of_birth AS CHAR(12))"Birth Day", CAST(emp_date_of_birth AS CHAR(12))"Birth Day", emp_gender "Gender", ‘$’ + emp_gender "Gender", ‘$’ + CONVERT (CHAR (10), emp_salary, 1) "Salary" CONVERT (CHAR (10), emp_salary, 1) "Salary" FROM employee WHERE emp_last_name > ‘E’AND emp_date_of_birth > ‘20-Jun-71’AND emp_date_of_birth > ‘20-Jun-71’AND emp_gender = ‘M’ AND emp_gender = ‘M’ AND emp_salary > 20000 emp_salary > 20000 ORDER BY emp_last_name; Last Name First Name Birth Day Gender Salary ------------ ---------- ------------ -------- ----------- Joshi Di Sep 15 1972 M $ 38,000.00 Zhu Wa Dec 8 1975 M $ 43,000.00
9
Pretice Hall © 20049 OR OPERATOR SELECT emp_last_name, emp_first_name, emp_gender FROM employee WHERE emp_gender = 'F' OR emp_last_name >= 'M' ORDER BY emp_last_name; emp_last_name emp_first_name emp_gender ------------- -------------- ---------- Joyner Suzanne F Markis Marcia F Prescott Sherri F Zhu Waiman M
10
Pretice Hall © 200410 NOT OPERATOR SELECT emp_last_name, emp_first_name, emp_dpt_number FROM employee WHERE NOT emp_dpt_number = 7 ORDER BY emp_last_name; ORDER BY emp_last_name; emp_last_name emp_first_name emp_dpt_number ------------- -------------- -------------- Amin Hyder 3 Bordoloi Bijoy 1 Joyner Suzanne 3 Markis Marcia 3
11
Pretice Hall © 200411 Combining OR and AND Operators When the AND operator is combined with OR, the SQL Server will evaluate the condition connected by the AND first before any conditions connected with OR.When the AND operator is combined with OR, the SQL Server will evaluate the condition connected by the AND first before any conditions connected with OR. Parentheses must be used to force an order of operation.Parentheses must be used to force an order of operation.
12
Pretice Hall © 200412 Combining OR and AND Operators Contd. Q? Display a list of employees with a last name that begins with or is greater than the letter ‘E’, and who are either female or works in department number #1.
13
Pretice Hall © 200413 Combining OR and AND Operators Contd. SELECT CAST(emp_last_name AS CHAR(12)) "Last Name", CAST(emp_first_name AS CHAR(12)) "First Name", CAST(emp_first_name AS CHAR(12)) "First Name", emp_gender, emp_dpt_number emp_gender, emp_dpt_number FROM employee WHERE emp_last_name >= ‘E’ AND emp_gender = ‘F’ OR emp_dpt_number = 1 ORDER BY emp_last_name; Last Name First Name emp_gender emp_dpt_number ------------ ------------ ---------- -------------- Bordoloi Bijoy M 1 Joyner Suzanne F 3 Markis Marcia F 3 Prescott Sherri F 7 Is this answer correct?
14
Pretice Hall © 200414 Combining OR and AND Operators SELECT CAST(emp_last_name AS CHAR(12)) "Last Name", CAST(emp_first_name AS CHAR(12)) "First Name", CAST(emp_first_name AS CHAR(12)) "First Name", emp_gender, emp_dpt_number emp_gender, emp_dpt_number FROM employee WHERE emp_last_name >= ‘E’ AND (emp_gender = ‘F’ OR emp_dpt_number = 1) (emp_gender = ‘F’ OR emp_dpt_number = 1) ORDER BY emp_last_name; Last Name First Name emp_gender emp_dpt_number ------------ ------------ ---------- -------------- Joyner Suzanne F 3 Markis Marcia F 3 Prescott Sherri F 7
15
Pretice Hall © 200415 LISTS (IN AND NOT IN) There are two operators that are designed for testing to determine if data stored in a table column is either in or not in a list or set of values.There are two operators that are designed for testing to determine if data stored in a table column is either in or not in a list or set of values. These are the IN and NOT IN operators.These are the IN and NOT IN operators. These operators greatly simplify the task of writing queries that might otherwise require a large number of either OR logical operators or an unwieldy use of the NOT logical operator.These operators greatly simplify the task of writing queries that might otherwise require a large number of either OR logical operators or an unwieldy use of the NOT logical operator.
16
Pretice Hall © 200416 Using IN Operator SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_salary AS DECIMAL(10, 2)) "Salary" CAST(emp_salary AS DECIMAL(10, 2)) "Salary" FROM employee WHERE emp_salary = 43000 OR emp_salary = 30000 OR emp_salary = 25000 ORDER BY emp_salary; Last Name First Name Salary --------------- --------------- ------------ Amin Hyder 25000.00 Markis Marcia 25000.00 Prescott Sherri 25000.00 Bock Douglas 30000.00 Zhu Waiman 43000.00 Joyner Suzanne 43000.00
17
Pretice Hall © 200417 Using IN Operator Contd. SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_salary AS DECIMAL(10, 2)) "Salary" CAST(emp_salary AS DECIMAL(10, 2)) "Salary" FROM employee WHERE emp_salary IN (43000, 30000, 25000) ORDER BY emp_salary; Last Name First Name Salary --------------- --------------- ------------ Amin Hyder 25000.00 Markis Marcia 25000.00 Prescott Sherri 25000.00 Bock Douglas 30000.00 Zhu Waiman 43000.00 Joyner Suzanne 43000.00
18
Pretice Hall © 200418 Using IN Operator Contd. SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", emp_city "City" emp_city "City" FROM employee WHERE emp_city IN (‘Marina’, ‘Edwardsville’, ‘St. Louis’) ORDER BY emp_city; Last Name First Name City --------------- --------------- ------------------------- Bordoloi Bijoy Edwardsville Prescott Sherri Edwardsville Amin Hyder Marina Joyner Suzanne Marina Bock Douglas St. Louis Zhu Waiman St. Louis
19
Pretice Hall © 200419 Using the NOT IN Operator NOT can precede IN to form negative.NOT can precede IN to form negative. To get the list of employees who did not earn the three salary figures listed earlierTo get the list of employees who did not earn the three salary figures listed earlier SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_salary AS DECIMAL(10, 2)) "Salary" CAST(emp_salary AS DECIMAL(10, 2)) "Salary" FROM employee WHERE emp_salary NOT IN (43000, 30000, 25000) ORDER BY emp_salary; Last Name First Name Salary --------------- --------------- ------------ Joshi Dinesh 38000.00 Bordoloi Bijoy 55000.00
20
Pretice Hall © 200420 RANGES (BETWEEN AND NOT BETWEEN) SQL provides two operators, BETWEEN and NOT BETWEEN that can simplify the range of values in a query.SQL provides two operators, BETWEEN and NOT BETWEEN that can simplify the range of values in a query. This eliminates the need to use a more complex WHERE clause involving the use of the AND logical operator.This eliminates the need to use a more complex WHERE clause involving the use of the AND logical operator.
21
Pretice Hall © 200421 Using the BETWEEN Operator The following query uses the AND logical operator.The following query uses the AND logical operator. SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name’’ CAST(emp_first_name AS CHAR(15)) "First Name’’ ‘$’ + Convert(char(10),emp_salary, 1) "Salary" ‘$’ + Convert(char(10),emp_salary, 1) "Salary" FROM employee WHERE emp_salary >= 25000 AND emp_salary = 25000 AND emp_salary <= 40000 ORDER BY emp_salary; Last Name First Name Salary --------------- --------------- ----------- Amin Hyder $ 25,000.00 Markis Marcia $ 25,000.00 Prescott Sherri $ 25,000.00 Bock Douglas $ 30,000.00 Joshi Dinesh $ 38,000.00
22
Pretice Hall © 200422 Using the BETWEEN Operator Contd. The query can be rewritten using the BETWEEN operator.The query can be rewritten using the BETWEEN operator. SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", ‘$’+ Convert(char(10),emp_salary, 1) "Salary" ‘$’+ Convert(char(10),emp_salary, 1) "Salary" FROM employee WHERE emp_salary BETWEEN 25000 AND 40000 ORDER BY emp_salary; Last Name First Name Salary --------------- --------------- ----------- Amin Hyder $ 25,000.00 Markis Marcia $ 25,000.00 Prescott Sherri $ 25,000.00 Bock Douglas $ 30,000.00 Joshi Dinesh $ 38,000.00
23
Pretice Hall © 200423 Specifying More Than One Salary Range SELECT CAST(emp_last_name AS Char (15)) "Last Name", ‘$’ + Convert(char(10),emp_salary, 1) "Salary" ‘$’ + Convert(char(10),emp_salary, 1) "Salary" FROM employee WHERE emp_salary BETWEEN 25000 AND 30000 OR emp_salary BETWEEN 40000 AND 43000 OR emp_salary BETWEEN 40000 AND 43000 ORDER BY emp_salary; Last Name Salary --------------- ----------- Amin $ 25,000.00 Markis $ 25,000.00 Prescott $ 25,000.00 Bock $ 30,000.00 Zhu $ 43,000.00 Joyner $ 43,000.00
24
Pretice Hall © 200424 Using the NOT BETWEEN Operator SELECT CAST(emp_last_name AS Char (15)) "Last Name", ‘$’ + Convert(char(10),emp_salary, 1) "Salary" ‘$’ + Convert(char(10),emp_salary, 1) "Salary" FROM employee WHERE emp_salary NOT BETWEEN 28000 AND 50000 ORDER BY emp_salary; Last Name Salary --------------- ----------- Amin $ 25,000.00 Markis $ 25,000.00 Prescott $ 25,000.00 Bordoloi $ 55,000.00
25
Pretice Hall © 200425 LIKE AND NOT LIKE The LIKE and NOT LIKE operators can be used to search for data rows containing incomplete or partial character strings within a data column.The LIKE and NOT LIKE operators can be used to search for data rows containing incomplete or partial character strings within a data column. The next query searches the employee table for employee names that begin with the characters ‘Bo’.The next query searches the employee table for employee names that begin with the characters ‘Bo’. The search is case-sensitive meaning that ‘Bo’ is not equivalent to ‘BO’.The search is case-sensitive meaning that ‘Bo’ is not equivalent to ‘BO’. SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name" CAST(emp_first_name AS CHAR(15)) "First Name" FROM employee WHERE emp_last_name LIKE 'Bo%';
26
Pretice Hall © 200426 LIKE AND NOT LIKE Wild cardMeaning % (percent) any string of zero or more characters _ (underscore)any single character [ ] (brackets)any single character within a specified range such as ‘a’ to ‘d’, inclusive [a-d] or a set of characters such as [aeiouy] [^] (not brackets)any single character not in the specified range or set (e.g., [^a-f] )
27
Pretice Hall © 200427 MORE EXAMPLES LIKE ‘%inger’ will search for every name that ends with ‘inger’ (Ringer, Stringer).LIKE ‘%inger’ will search for every name that ends with ‘inger’ (Ringer, Stringer). LIKE ‘%en%’ will search for every name that has the letters ‘en’ in the name (Bennet, Green, McBadden).LIKE ‘%en%’ will search for every name that has the letters ‘en’ in the name (Bennet, Green, McBadden). LIKE ‘_heryl’ will search for every six-letter name ending with ‘heryl’ (Cheryl). Notice how this is different than ‘%heryl’,which would return names that are six characters or more.LIKE ‘_heryl’ will search for every six-letter name ending with ‘heryl’ (Cheryl). Notice how this is different than ‘%heryl’,which would return names that are six characters or more.
28
Pretice Hall © 200428 MORE EXAMPLES Contd. LIKE ‘[CK]ars[eo]n’ will search for every six-letter name that begins with a ‘C’ or ‘K’ and has the letter ‘e’ or ‘o’ between ‘ars’ and ‘n’ (e.g., 'Carsen,' ‘Karsen,’ ‘Carson,’ and ‘Karson’.LIKE ‘[CK]ars[eo]n’ will search for every six-letter name that begins with a ‘C’ or ‘K’ and has the letter ‘e’ or ‘o’ between ‘ars’ and ‘n’ (e.g., 'Carsen,' ‘Karsen,’ ‘Carson,’ and ‘Karson’. LIKE ‘[M-Z]inger’ will search for all the names ending with ‘inger’ that begin with any single letter ‘M’ thru ‘Z’ (Ringer).LIKE ‘[M-Z]inger’ will search for all the names ending with ‘inger’ that begin with any single letter ‘M’ thru ‘Z’ (Ringer). LIKE ‘M[^c]%’ will search for all the names that begin with ‘M’ not having ‘c’ as the second letter.LIKE ‘M[^c]%’ will search for all the names that begin with ‘M’ not having ‘c’ as the second letter.
29
Pretice Hall © 200429 MORE EXAMPLES Contd. The SELECT statement shown below generates a result table that includes all DISTINCT rows where the employee social security number in the assignment table ends with the numbers 555.The SELECT statement shown below generates a result table that includes all DISTINCT rows where the employee social security number in the assignment table ends with the numbers 555. SELECT DISTINCT work_emp_ssn "Emp SSN" FROM assignment WHERE work_emp_ssn LIKE ‘%555’ Emp SSN ---------999555555
30
Pretice Hall © 200430 UNKNOWN VALUES (IS NULL and IS NOT NULL) NULL value is not synonymous with “zero” (numerical values) or “blank” (character values).NULL value is not synonymous with “zero” (numerical values) or “blank” (character values). NULL values allow users to distinguish between a deliberate entry of zero/blank and a non entry of data.NULL values allow users to distinguish between a deliberate entry of zero/blank and a non entry of data. SELECT * FROM assignment WHERE work_hours IS NULL; work_emp_ssn work_pro_number work_hours ------------ --------------- ---------- 999444444 1 NULL 999666666 20 NULL
31
Pretice Hall © 200431 MORE EXAMPLES Contd. SELECT * FROM assignment WHERE work_hours = 0; work_emp_ssn work_pro_number work_hours ------------ --------------- ---------- (0 row(s) affected) The query did not return a result table because none of the rows in the assignment table have a zero value for work_hours. Thus, you can see that zero (0) is a value, not an “unknown value.”The query did not return a result table because none of the rows in the assignment table have a zero value for work_hours. Thus, you can see that zero (0) is a value, not an “unknown value.”
32
Pretice Hall © 200432 MORE EXAMPLES The NOT NULL condition can also be tested.The NOT NULL condition can also be tested. SELECT * FROM assignment WHERE work_hours IS NOT NULL; (15 row(s) affected) The result table contains all the rows where work_hours column contains a value.The result table contains all the rows where work_hours column contains a value.
33
Pretice Hall © 200433 EXPRESSIONS IN SELECT CLAUSES An expression is formed by combining a column name or constant with an arithmetic operator.An expression is formed by combining a column name or constant with an arithmetic operator. The arithmetic operators used in SQL areThe arithmetic operators used in SQL are SYMBOLOPERATIONORDER *Multiplication1 /Division1 %Modulo1 +Addition2 -Subtraction2
34
Pretice Hall © 200434 EXAMPLE SELECT CAST(emp_last_name AS Char (15)) "Last Name", CAST(emp_first_name AS CHAR(15)) "First Name", CAST(emp_first_name AS CHAR(15)) "First Name", emp_salary/12 "Monthly Salary" emp_salary/12 "Monthly Salary" FROM employee WHERE emp_salary/12 > 3500 ORDER BY emp_last_name; Last Name First Name Monthly Salary --------------- --------------- --------------------- Bordoloi Bijoy 4583.3333 Joyner Suzanne 3583.3333 Zhu Waiman 3583.3333
35
Pretice Hall © 200435 EXPRESSIONS When expression is used in select with a column name it has no effect on the table’s underlying values.When expression is used in select with a column name it has no effect on the table’s underlying values. The data contained in each column must be numeric data.The data contained in each column must be numeric data. The result of an arithmetic operation on NULL is NULL.The result of an arithmetic operation on NULL is NULL.
36
Pretice Hall © 200436 Examples of Operations on Nulls SELECT work_emp_ssn "SSN", work_pro_number "Project", work_hours/40 "Avg Hours/Week" work_hours/40 "Avg Hours/Week" FROM assignment WHERE work_pro_number = 1 ORDER BY work_emp_ssn; SSN Project Avg Hours/Week --------- ------- -------------- 999111111 1.785000 999444444 1 NULL 999888888 1.525000
37
Pretice Hall © 200437 Examples of Operations on Nulls Contd. Table: Contract_Employee emp_id,emp_jobemp_salaryemp_bonus 10 BIG BOSS 100000NULL 20 LITTLE BOSS 50000NULL 30WARRIOR100002000 40WARRIOR100003000
38
Pretice Hall © 200438 Examples of Operations on Nulls Contd. SELECT emp_id, emp_job, emp_salary+emp_bonus "Total Comp" FROM contract_employee; emp_id emp_job Total Comp --------- --------------- --------------------- 10 BIG BOSS NULL 20 LITTLE BOSS NULL 30 WORKER 12000.0000 40 WORKER 14000.0000
39
Pretice Hall © 200439 SUMMARY Logical operators (AND and OR) in the WHERE clause add power to your queries.Logical operators (AND and OR) in the WHERE clause add power to your queries. When the AND operator is combined with OR, AND takes precedence over OR. Always use parentheses' to clarify the order of operation.When the AND operator is combined with OR, AND takes precedence over OR. Always use parentheses' to clarify the order of operation. IN AND NOT IN operators are used to compare a column against several values.IN AND NOT IN operators are used to compare a column against several values. The BETWEEN operators specifies an inclusive range of values.The BETWEEN operators specifies an inclusive range of values. Use the LIKE operator for incomplete search of character string.Use the LIKE operator for incomplete search of character string. Use the IS NULL operator when querying for unknown values.Use the IS NULL operator when querying for unknown values. The result of an arithmetic operation on NULL is NULL.The result of an arithmetic operation on NULL is NULL.
40
Prentice Hall © 200440 Chapter 5: Aggregate Functions and Grouping of Data SQL for SQL Server Bijoy Bordoloi and Douglas Bock
41
Prentice Hall © 200441 OBJECTIVES Write queries with aggregate functions: SUM, AVG, COUNT, MAX, and MIN.Write queries with aggregate functions: SUM, AVG, COUNT, MAX, and MIN. Use the GROUP BY clause to answer complex managerial questions.Use the GROUP BY clause to answer complex managerial questions. Use the GROUP BY clause with the WHERE and ORDER BY clauses.Use the GROUP BY clause with the WHERE and ORDER BY clauses. Use the HAVING clause to filter out rows from a result table.Use the HAVING clause to filter out rows from a result table.
42
Prentice Hall © 200442 AGGREGATE ROW FUNCTIONS Aggregate row functions give the user the ability to answer business questions such as:Aggregate row functions give the user the ability to answer business questions such as: What is the average salary of an employee in the company? What were the total salaries for a particular year? What are the maximum and minimum salaries in the Computer Department?
43
Prentice Hall © 200443 AGGREGATE ROW FUNCTIONS Contd. Aggregate functions perform a variety of actions such as counting all the rows in a table, averaging a column’s data, and summing numeric data.Aggregate functions perform a variety of actions such as counting all the rows in a table, averaging a column’s data, and summing numeric data. Aggregates can also search a table to find the highest “MAX” or lowest “MIN” values in a column.Aggregates can also search a table to find the highest “MAX” or lowest “MIN” values in a column.
44
Prentice Hall © 200444 AGGREGATE ROW FUNCTIONS Contd. There are two rules that you must understand and follow when using aggregates: Aggregate functions can be used in both the SELECT and HAVING clauses (the HAVING clause is covered later in this chapter). Aggregate functions can be used in both the SELECT and HAVING clauses (the HAVING clause is covered later in this chapter). Aggregate functions cannot be used in a WHERE clause.Aggregate functions cannot be used in a WHERE clause.
45
Prentice Hall © 200445 EXAMPLE The following query is wrong and will produce an error message.The following query is wrong and will produce an error message. SELECT * FROM employee WHERE emp_salary > AVG(emp_salary) ; Msg 147, Level 15, State 1, Line 4 An aggregate may not appear in the WHERE clause unless it is in subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference..
46
Prentice Hall © 200446 AGGREGATE ROW FUCTIONS List of aggregate functions including their syntax and use.List of aggregate functions including their syntax and use. Function SyntaxFunction Use SUM( [ALL | DISTINCT] expression ) The total of the (distinct) values in a numeric column/expression. AVG( [ALL | DISTINCT] expression ) The average of the (distinct) values in a numeric column/expression. COUNT( [ALL | DISTINCT] expression ) The number of (distinct) non-NULL values in a column/expression. COUNT(*) The number of selected rows. MAX(expression) The highest value in a column/expression. MIN(expression)The lowest value in a column/expression.
47
Prentice Hall © 200447 Agg. Function Example: COUNT(*) If a manager needs to know how many employees work in the organization, COUNT(*) can be used to produce this information.If a manager needs to know how many employees work in the organization, COUNT(*) can be used to produce this information. The COUNT(*) function counts all rows in a table.The COUNT(*) function counts all rows in a table. The wild card asterisk (*) would be used as the parameter in the function.The wild card asterisk (*) would be used as the parameter in the function. SELECT COUNT(*) FROM employee; -----------8
48
Prentice Hall © 200448 COUNT(* ) The result table for the COUNT(*) function is a single scalar value.The result table for the COUNT(*) function is a single scalar value. Notice that the result table has no column heading.Notice that the result table has no column heading. The output column can be assigned a more meaningful column name as is shown in the revised query.The output column can be assigned a more meaningful column name as is shown in the revised query.
49
Prentice Hall © 200449 COUNT(*) Contd. This is accomplished by simply listing the desired column name inside double quotes after the aggregate function specification.This is accomplished by simply listing the desired column name inside double quotes after the aggregate function specification. SELECT COUNT(*) "Number of Employees" FROM employee; Number of Employees ---------------------------8
50
Prentice Hall © 200450 COUNT(*) Contd. COUNT(*) is used to count all the rows in a table.COUNT(*) is used to count all the rows in a table. COUNT(column name) does almost the same thing. The difference is that you may define a specific column to be counted.COUNT(column name) does almost the same thing. The difference is that you may define a specific column to be counted. When column name is specified in the COUNT function, rows containing a NULL value in the specified column are omitted.When column name is specified in the COUNT function, rows containing a NULL value in the specified column are omitted. A NULL value stands for “unknown” or “unknowable” and must not be confused with a blank or zero.A NULL value stands for “unknown” or “unknowable” and must not be confused with a blank or zero.
51
Prentice Hall © 200451 COUNT (*) Contd. SELECT COUNT(emp_superssn) "Number of Supervised Employees" FROM employee; Number of Supervised Employees --------------------------- 7 In contrast the count(*) will count each row regardless of NULL values. SELECT COUNT(*) “ Number of Employees ” FROM employee; Number of Employees ------------------- 8
52
Prentice Hall © 200452 Using the AVG Function AVG function is used to compute the average value for the emp_salary column in the employee table.AVG function is used to compute the average value for the emp_salary column in the employee table. For example, the following query returns the average of the employee salaries.For example, the following query returns the average of the employee salaries. SELECT ‘$’+ CONVERT(Char(10), AVG(emp_salary), 1) "Average Employee Salary" FROM employee; Average Employee Salary ----------------------- $ 35,500.00
53
Prentice Hall © 200453 More Examples What is the average salary offered to employees?What is the average salary offered to employees? This question asks you to incorporate the concept of computing the average of the distinct salaries paid by the organization.This question asks you to incorporate the concept of computing the average of the distinct salaries paid by the organization. The same query with the DISTINCT keyword in the aggregate function returns a different average.The same query with the DISTINCT keyword in the aggregate function returns a different average. SELECT ‘$’+ CONVERT(Char(10), AVG(DISTINCT emp_salary), 1) "Average Employee Salary" FROM employee; Average Employee Salary ----------------------- $ 38,200.00
54
Prentice Hall © 200454 Using the SUM Function The SUM function can compute the total of a specified table column.The SUM function can compute the total of a specified table column. The SELECT statement shown here will return the total of the emp_salary column from the employee table.The SELECT statement shown here will return the total of the emp_salary column from the employee table. SELECT ‘$’+ CONVERT(Char(10), SUM(emp_salary), 1) "Total Salary" FROM employee; Total Salary ------------ $ 284,000.00
55
Prentice Hall © 200455 More Examples If management is preparing a budget for various departments, you may be asked to write a query to compute the total salary for different departments.If management is preparing a budget for various departments, you may be asked to write a query to compute the total salary for different departments. The query shown here will compute the total emp_salary for employees assigned to department #7.The query shown here will compute the total emp_salary for employees assigned to department #7. SELECT SUM(emp_salary) "Total Salary Dept 7" FROM employee WHERE emp_dpt_number = 7; Total Salary Dept 7 ------------------- 136000.0000 136000.0000
56
Prentice Hall © 200456 MIN and MAX Functions MIN and MAX Functions The MIN function returns the lowest value stored in a data column.The MIN function returns the lowest value stored in a data column. The MAX function returns the largest value stored in a data column.The MAX function returns the largest value stored in a data column. Unlike SUM and AVG, the MIN and MAX functions work with both numeric and character data columns.Unlike SUM and AVG, the MIN and MAX functions work with both numeric and character data columns. SELECT MIN(emp_last_name), MAX(emp_last_name) FROM employee; ------------------------- ------------------------- Amin Zhu
57
Prentice Hall © 200457 Using GROUP BY with Aggregate Functions The power of aggregate functions is greater when combined with the GROUP BY clause.The power of aggregate functions is greater when combined with the GROUP BY clause. In fact, the GROUP BY clause is rarely used without an aggregate function.In fact, the GROUP BY clause is rarely used without an aggregate function. It is possible to use the GROUP BY clause without aggregates, but such a construction has very limited functionality, and could lead to a result table that is confusing or misleading.It is possible to use the GROUP BY clause without aggregates, but such a construction has very limited functionality, and could lead to a result table that is confusing or misleading.
58
Prentice Hall © 200458 Using GROUP BY with Aggregate Functions Contd. When properly used, the GROUP BY clause enables you to use aggregate functions to answer more complex managerial questions such as: »What is the average salary of employees in each department? »How many employees work in each department? »How many employees are working on a particular project?
59
Prentice Hall © 200459Example The following query displays how many employees work for each department?The following query displays how many employees work for each department? SELECT emp_dpt_number "Department", COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number; Department Employee Count ---------- -------------- 1 1 3 3 7 4 7 4
60
Prentice Hall © 200460 GROUP BY Clause SQL Server provides some flexibility in specifying the GROUP BY clause.SQL Server provides some flexibility in specifying the GROUP BY clause. For example, the column name used in a GROUP BY does not have to be listed in the SELECT clause; however, it must be a column name from one of the tables listed in the FROM clause.For example, the column name used in a GROUP BY does not have to be listed in the SELECT clause; however, it must be a column name from one of the tables listed in the FROM clause.
61
Prentice Hall © 200461Example We could rewrite the last query without specifying the emp_dpt_number column as part of the result table, but as you can see below, the results are rather cryptic without the emp_dpt_number column to identify the meaning of the aggregate count.We could rewrite the last query without specifying the emp_dpt_number column as part of the result table, but as you can see below, the results are rather cryptic without the emp_dpt_number column to identify the meaning of the aggregate count. SELECT COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number; Employee Count --------------13 4
62
Prentice Hall © 200462 GROUP BY Clause Note, however, that if your SELECT clause includes both column names and aggregate functions, then you must also have a GROUP BY clause in your query. Additionally, the column name(s) in the GROUP BY clause must include the column name(s) listed in the SELECT clause. Otherwise, SQL Server will return error messages.Note, however, that if your SELECT clause includes both column names and aggregate functions, then you must also have a GROUP BY clause in your query. Additionally, the column name(s) in the GROUP BY clause must include the column name(s) listed in the SELECT clause. Otherwise, SQL Server will return error messages.
63
Prentice Hall © 200463 GROUP BY Clause Contd. SELECT emp_dpt_number "Department", COUNT(*) "Employee Count" FROM employee; Server: Msg 8118, Level 16, State 1, Line 2 Column 'employee.emp_dpt_number' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause SELECT emp_dpt_number "Department", COUNT(*) "Employee Count" FROM employee GROUP BY emp_city; Server: Msg 8120, Level 16, State 1, Line 2 Column 'employee.emp_dpt_number' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
64
Prentice Hall © 200464 GROUP BY Clause Contd. SELECT emp_dpt_number "Department", COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number; Department Employee Count ---------- -------------- 1 1 3 3 7 4 7 4
65
Prentice Hall © 200465 Using GROUP BY with Expressions In addition to column names, any expression listed in a SELECT clause can be used with a GROUP BY clause.In addition to column names, any expression listed in a SELECT clause can be used with a GROUP BY clause. SELECT CAST(AVG(emp_salary)AS Decimal(10,2)) "Current Average Salary", CAST(AVG(emp_salary* 1.25)AS Decimal(10,2)) "New Average Salary" CAST(AVG(emp_salary* 1.25)AS Decimal(10,2)) "New Average Salary" FROM employee GROUP BY emp_salary * 1.25; Current Average Salary New Average Salary ---------------------- ------------------ 25000.00 31250.00 30000.00 37500.00 38000.00 47500.00 43000.00 53750.00 55000.00 68750.00
66
Prentice Hall © 200466 Using GROUP BY With a WHERE Clause The WHERE clause works to eliminate data table rows from consideration before any grouping takes place.The WHERE clause works to eliminate data table rows from consideration before any grouping takes place. The query shown here produces an average hours worked result table for employees with a social security number that is larger than 999-66- 0000.The query shown here produces an average hours worked result table for employees with a social security number that is larger than 999-66- 0000. SELECT work_emp_ssn SSN, AVG(work_hours) "Average Hours Worked" FROM assignment WHERE work_emp_ssn > 999660000 GROUP BY work_emp_ssn; SSN Average Hours Worked --------- -------------------- 999666666 NULL 999887777 20.500000 999888888 21.500000
67
Prentice Hall © 200467 Using GROUP BY With an ORDER BY Clause The ORDER BY clause allows you to specify how rows in a result table are sorted.The ORDER BY clause allows you to specify how rows in a result table are sorted. The default ordering is from smallest to largest value.The default ordering is from smallest to largest value. A GROUP BY clause in a SELECT statement will determine the sort order of rows in a result table.A GROUP BY clause in a SELECT statement will determine the sort order of rows in a result table. The sort order can be changed by specifying an ORDER BY clause after the GROUP BY clause.The sort order can be changed by specifying an ORDER BY clause after the GROUP BY clause.
68
Prentice Hall © 200468 Using GROUP BY With an ORDER BY Clause Contd. SELECT emp_dpt_number "Department", ‘$’ + CONVERT(Char(10),AVG(emp_salary), 1) "Average Salary" FROM employee GROUP BY emp_dpt_number ORDER BY AVG(emp_salary); Department Average Salary ---------- -------------- 3 $ 31,000.00 7 $ 34,000.00 1 $ 55,000.00
69
Prentice Hall © 200469 GROUP BY With a HAVING Clause The HAVING clause is used for aggregate functions in the same way that a WHERE clause is used for column names and expressions.The HAVING clause is used for aggregate functions in the same way that a WHERE clause is used for column names and expressions. The HAVING and WHERE clauses do the same thing, that is filter rows from inclusion in a result table based on a condition.The HAVING and WHERE clauses do the same thing, that is filter rows from inclusion in a result table based on a condition. A WHERE clause is used to filter rows BEFORE the GROUPING action.A WHERE clause is used to filter rows BEFORE the GROUPING action. A HAVING clause filters rows AFTER the GROUPING action.A HAVING clause filters rows AFTER the GROUPING action.
70
Prentice Hall © 200470 GROUP BY With a HAVING Clause Contd. SELECT emp_dpt_number "Department", ‘$’ + CONVERT(Char(10),AVG(emp_salary), 1) "Average Salary" FROM employee GROUP BY emp_dpt_number HAVING AVG(emp_salary) > 33000; Department Average Salary ---------- -------------- 1 $ 55,000.00 7 $ 34,000.00
71
Prentice Hall © 200471 GROUP BY With a HAVING Clause Contd. Conceptually, SQL performs the following steps in the query given above. Conceptually, SQL performs the following steps in the query given above. 1. The WHERE clause filters rows that do not meet the condition emp_dpt_number <> 1. 2. The GROUP BY clause collects the surviving rows into one or more groups for each unique emp_dpt_number. 3. The aggregate function calculates the average salary for each emp_dpt_number grouping. 4. The HAVING clause filters out the rows from the result table that do not meet the condition average salary greater than $33,000.
72
Prentice Hall © 200472 Combining HAVING Clause with Where clause SELECT emp_dpt_number "Department", ‘$’ + CONVERT(Char(10),AVG(emp_salary), 1) "Average Salary" FROM employee WHERE emp_dpt_number <> 1 GROUP BY emp_dpt_number HAVING AVG(emp_salary) > 33000; Department Average Salary ---------- -------------- 7 $ 34,000.00
73
Prentice Hall © 200473 GROUP BY and HAVING Clauses Standard SQL Rules The most common use of a HAVING clause is to create result tables containing one row per group, with one or more summary values in the row. To do this your query must meet the following conditions: If a SELECT clause includes column names and aggregate functions, then columns listed in a SELECT clause must also be listed in the GROUP BY expression or they must be arguments of aggregate functions. A GROUP BY expression can only contain column names that are in the SELECT clause listing.A GROUP BY expression can only contain column names that are in the SELECT clause listing. YOU cannot have a HAVING clause in the absence of the GROUP BY clause.YOU cannot have a HAVING clause in the absence of the GROUP BY clause.
74
Prentice Hall © 200474 Example SELECT emp_dpt_number "Department", emp_gender, COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number HAVING COUNT(*) >= 2; Server: Msg 8120, Level 16, State 1, Line 2 Column 'employee.emp_gender' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Column 'employee.emp_gender' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
75
Prentice Hall © 200475 Example Contd. SELECT emp_dpt_number "Department", emp_gender, COUNT(*) "Employee Count" COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number, emp_gender HAVING COUNT(*) >= 2; Department emp_gender Employee Count ---------- ---------- -------------- 3 F 2 7 M 3
76
Prentice Hall © 200476 More Examples SELECT emp_dpt_number "Department", COUNT(*) "Department Count", COUNT(*) "Department Count", MAX(emp_salary) "Top Salary", MAX(emp_salary) "Top Salary", MIN(emp_salary) "Low Salary" MIN(emp_salary) "Low Salary" FROM employee GROUP BY emp_dpt_number HAVING COUNT(*) >= 3; Department Department Count Top Salary Low Salary ---------- ---------------- ---------- ---------- 3 3 $ 43,000 $ 25,000 3 3 $ 43,000 $ 25,000 7 4 $ 43,000 $ 25,000 7 4 $ 43,000 $ 25,000
77
Prentice Hall © 200477 HAVING Without a GROUP BY Clause SELECT emp_dpt_number, AVG(emp_salary) FROM employee HAVING AVG(emp_salary) > 33000; Server: Msg 8118, Level 16, State 1, Line 2 Column 'employee.emp_dpt_number' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
78
Prentice Hall © 200478 SQL extensions to GROUP BY and HAVING Clauses Examples: The GROUP BY ALL clause displays all groups, even those excluded from calculations by a WHERE clause.The GROUP BY ALL clause displays all groups, even those excluded from calculations by a WHERE clause. The GROUP BY clause can include column names or expressions that are not included in the SELECT clause listing.The GROUP BY clause can include column names or expressions that are not included in the SELECT clause listing. The HAVING clause can include columns or expressions that are not listed in the SELECT clause or in a GROUP BY clause.The HAVING clause can include columns or expressions that are not listed in the SELECT clause or in a GROUP BY clause.
79
Prentice Hall © 200479 SQL extensions to GROUP BY and HAVING Clauses Contd. Example: SELECT emp_dpt_number "Department", COUNT(*) "Employee Count" FROM employee GROUP BY emp_dpt_number, emp_gender HAVING COUNT(*)>= 2; Department Employee Count ---------- -------------- 3 2 7 3
80
Prentice Hall © 200480 SUMMARY GROUPING AND SUMMARIZING To Get This Effect:Do This: Exclude rows before grouping:Use a WHERE clause. Divide a result table into groups:Use a GROUP BY clause. Calculate summary values for each group: Include one or more aggregates in the SELECT clause listing. Exclude groups from the result table: Use a HAVING clause. If This Happens:Look For This: All qualified rows in all qualified groups display: The SELECT clause listing contains a column name that is not in the GROUP BY clause. All excluded groups displayQuery includes GROUP BY ALL
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.