chapter 4 sql - yu.ac.krynucc.yu.ac.kr/~hrcho/courses/db/chap4-1.pdfdatabase retrieval z basic sql...
TRANSCRIPT
1
Chapter 4SQL
Chapter 4 - 1
Table of Contents
1. Background
2. Database Retrieval
3. Database Update
4. Data Definition Language
5. Security Enforcement
6. Embedded SQL
2
Chapter 4 - 2
1. Backgroundz SQL
✔ A complete data access and manipulation language✔ Defined for relational DBMS✔ An industry standard for relational DBMS✔ A non-procedural language
z Non Procedural - No Statements for:✔ GO TO✔ PERFORM✔ DO LOOP✔ OPEN FILE, CLOSE FILE, END OF FILE
Chapter 4 - 3
SQL is a Set-Level Language
Select the set ofall employees in theemployee table
Select the set ofall employees in theemployee table whoare in department 401
Select the set ofall employees in theemployee table whoearn more than$35,000
Select the set ofall employees in theemployee table whoare in department401 and who earnmore than $35,000
3
Chapter 4 - 4
SQL Functions (1)z Data Definition Language
✔ CREATE - Define a new table, index, view✔ DROP - Remove a table, index, view definition✔ ALTER - Table structure and protection definition
z Data Manipulation Language✔ INSERT - Place a new row into a table✔ SELECT - Perform relational query functions✔ UPDATE - Modify values in an existing row✔ DELETE - Remove a row from a table
Chapter 4 - 5
SQL Functions (2)z Data Control Language
✔ Authorization– GRANT - Give users’ privileges– REVOKE - Remove users’ privileges
✔ Transaction Management– COMMIT - Commit transaction’s effect– ROLLBACK - Abort transaction’s effect
✔ Integrity Constraint– TRIGGER - Define side effect of database update– ASSERTION - Define domain constraints
4
Chapter 4 - 6
Review of Relational Concepts(1)z Table
A two dimensional representation of data composed of rows and columns
z RowOne occurrence in a relational table: a record
z ColumnThe smallest category of data in a relational model: a field
z Data ValueThe smallest unit of data in a relational model: the
intersection of a column and a row
Chapter 4 - 7
Review of Relational Concepts(2)z Domain
The real world values on which data values in a column or columns must be based
z Primary KeyColumn(s) that uniquely identify a specific row in a table
z Foreign KeyColumn(s) in one table that serve as the primary key
elsewhere in the system
5
Chapter 4 - 8
A Table with Rows and Columns
EmployeeNumber
M anagerEmployeeNumber
Depart-m entNumber
JobCode
LastName
FirstName
HireDate
B irthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJam es
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 9
Table Relationshipsz What is the department name for employee 1004?
z Who is the manager of that employee?
z What happens if manager 1003 quits?
EmployeeNumber
M anagerEmployeeNumber
Depart-m entNumber
JobCode
LastName
FirstName
HireDate
B irthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJam es
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
6
Chapter 4 - 10
EmployeeNum ber
M anagerEmployeeNum ber
Depart-m entNum ber
JobCode
LastNam e
FirstNam e
HireDate
B irthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
DepartmentNumber Department Name Budget
Amount
ManagerEmployeeNumber
PK FK
501301302403402401201
Marketing salesResearch and developmentProduct planningEducationSoftware supportCustomer supportTechnical operations
800500465600226000932000308000982300293800
1017101910161005101110031025
Chapter 4 - 11
2. Database Retrieval
z Basic SQL SELECT
z SELECT Subquery
z Join
z Aggregation Functions
z Set Operations
7
Chapter 4 - 12
2.1 Basic SQL SELECT
SELECT [DISTINCT] {*, column [alias], …}
FROM table
WHERE conditions(s)
ORDER BY {column [ASC | DESC], …};
Chapter 4 - 13
A Simple SQL SelectSELECT employee_number
FROM employee;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
8
Chapter 4 - 14
Selecting All Columns and RowsSELECT *
FROM employee;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 15
Using Where for QualificationSELECT employee_number, hire_date, last_name, first_name
FROM employee
WHERE department_number = 401;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
9
Chapter 4 - 16
Order BySELECT employee_number, hire_date, last_name, first_name
FROM employee
WHERE department_number = 401
ORDER BY hire_date;
SELECT employee_number, hire_date, last_name, first_name
FROM employee
WHERE department_number = 401
ORDER BY hire_date DESC;
Chapter 4 - 17
Comparison Operatorsz Operators and Their Meaning
= Equal<> Not Equal> Greater than< Less than>= Greater than or equal to<= Less than or equal to
Between … And Inclusive rangeIS (NOT) NULL Test for NullsLIKE match a character pattern
10
Chapter 4 - 18
Logical Operatorsz Operators and Their Meaning
AND All specified conditions must be metOR Rows meeting either condition are selectedNOT Negates the specified condition
z Operator Precedence① All of comparison and SQL operators have equal
precedence.② NOT③ AND④ OR
Chapter 4 - 19
Logical Operator - ANDz Display the name and number of employees who earn less
than $35,000 per year and work in department 403.SELECT first_name, last_name, employee_numberFROM employeeWHERE salary_amount < 35000AND department_number = 403;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
11
Chapter 4 - 20
Logical Operator - ORz Display the name and number of employees who earn less
than $35,000 per year or work in department 403.SELECT first_name, last_name, employee_numberFROM employeeWHERE salary_amount < 35000OR department_number = 403;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 21
Multiple AND … ORz Select the name, department number, and job code for
employees in department 401 or 403, who have job code 412101 or 432101.
SELECT last_name, department_number, job_codeFROM employeeWHERE (department_number = 403 OR
department_number = 403)AND (job_code = 412101 OR job_code = 432101);
Suppose we leave the parentheses off?
12
Chapter 4 - 22
Logical Operator - NOTz Select the name and employee number for all employees
NOT in department 301.SELECT first_name, last_name, employee_numberFROM employeeWHERE NOT department_number = 301;(WHERE department_number NOT= 301)
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 23
BETWEEN … AND …(��)z Select the name and employee number for all employees
whose job codes are in the 430000 range.SELECT first_name, last_name, employee_numberFROM employeeWHERE job_code BETWEEN 430000 AND 439999;
z BETWEEN is INCLUSIVE
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
13
Chapter 4 - 24
BETWEEN … AND …(��)z Select the last names of employees whose last name begins
with ‘R’.SELECT last_nameFROM employeeWHERE last_name BETWEEN ‘R’ AND ‘S’;
z Why wasn’t ‘Stein’ included?
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 25
Partial String Operator - LIKE z �������� “Wild Character”
% = zero or more character positions_ = one character position
z ExampleLIKE ‘JO%’ = Begins with ‘JO’LIKE ‘%JO%’ = Contains ‘JO’LIKE ‘%HN’ = Ends with ‘HN’LIKE ‘__HN%’ = Contains ‘HN’ in 3rd and 4th positionLIKE ‘%H_’ = Contains ‘HN’ in next to last position
14
Chapter 4 - 26
LIKE� �
z Display the full name of employees whose last name contains ‘R’.SELECT first_name, last_nameFROM employeeWHERE last_name LIKE ‘%R%’;
z Why wasn’t ‘Trader’ included?
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 27
Set Operator - INz Select the name and employee number for all employees in
department 401 or 403.SELECT first_name, last_name, employee_numberFROM employeeWHERE department_number IN (401, 403);
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
15
Chapter 4 - 28
Set Operator - NOT INz Select the name and employee number for all employees
who are not members of department 401 and 403.SELECT first_name, last_name, employee_numberFROM employeeWHERE department_number NOT IN (401, 403);
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 29
Functionsz Single Row Functions
✔ Number Functions✔ Character Functions✔ Date Functions
z Group Functions✔ AVG✔ COUNT✔ MAX✔ MIN✔ SUM
16
Chapter 4 - 30
Number Functions
Function Result
ROUND(col | value, n)columnj� valueN n �¢ jNr þ·
(n 6 Br � ~B)CEIL(col | value) Ceiling functionPOWER(col | value, n) Nth power functionSQRT(col | value) Square root functionSIGN(col | value) Returns –1 if negative, 0 if zero, and 1 if positiveABS(col | value) Absolute valueMOD(value1, value2) Remainder of value1 / value2LOG(col | value) Base 10 logarithmLN(col | value) Base e (natural ) logarithm
Chapter 4 - 31
Character Functions
Function Result
LOWER(col | value, n) ö.�r �.�R ¶N
INITCAP(col | value) ¡~î .�r ö.�R ¶N
LPAD(col | value, n, string) LPAD(name, 20, ‘*’) → *****************choINSTR(col | value, string) stringj �B2R �¶�� úN
LTRIM(col | value, string/c) LTRIM(name, ‘A’): ‘Account’ → ‘ccount’LENGTH(col | value) .�êN .j RúTRANSLATE(col | value,from, to)
Translate(name, ‘A’, ‘B’):‘Account’ → ‘Bccount’
REPLACE(col | value,from, to)
from, to: string (Nî� Translate6 Ïr)toö ¼: ³¦, �Ö from £�
17
Chapter 4 - 32
Date Functionz SYSDATE: ����������
z ���������
✔ Date + Number → Date✔ Date - Number → Date✔ Date - Date → Number of days✔ Date + Number /24 → Date (Number: hours)
z �������
✔ Months_Between(date1, date2)✔ Add_Month(date, n)✔ Next_Day(date, char), Last_Day(date)
Chapter 4 - 33
What is NULL?z NULL is an unknown value
✔ NULL is an SQL keyword.✔ NULL is a state of non-existent or unknown data.✔ NULL indicates a column has no data.✔ NULL is neither a data type nor a characteristic.✔ NULL columns may be compressed to occupy zero space
in a row.
18
Chapter 4 - 34
NULL� �� ���
z Arithmetic Operation✔ 10 + NULL → NULL✔ 10 * NULL → NULL
z Comparison Operation✔ 10 = NULL → FALSE✔ 10 > NULL → FALSE✔ 10 <> NULL → FALSE✔ NULL = NULL → FALSE✔ NULL <> NULL → FALSE
Chapter 4 - 35
Using NULL in a SELECTz List the employee numbers fro people with unknown
extensions.SELECT employee_numberFROM employee_phoneWHERE extension is NULL;
Employee Number
Area Code Phone Extension Comment
PK
FK
1006 1008 1005 1004
213 213 213 213
8278777 2514189 2964652 8278777
429
411
19
Chapter 4 - 36
2.2 SELECT Subqueryz Set Operators Revisited
✔ ������������������.SELECT last_nameFROM employeeWHERE employee_number in (1017, 1005, 1003);
✔ ����������� 100,000����?
Department Number Department Name Budget
Amount
Manager Employee Number
PK FK
501 403 401
Marketing sales Education Customer support
800500 932000 982300
1017 1005 1003
Chapter 4 - 37
SELECT Subqueryz SELECT Subquery�����������
��.
SELECT last_nameFROM employeeWHERE employee_number IN
( SELECT manager_employee_numberFROM department ) ;
20
Chapter 4 - 38
EmployeeNum ber
M anagerEmployeeNum ber
Depart-m entNum ber
JobCode
LastNam e
FirstNam e
HireDate
B irthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
DepartmentNumber Department Name Budget
Amount
ManagerEmployeeNumber
PK FK
501301302403402401201
Marketing salesResearch and developmentProduct planningEducationSoftware supportCustomer supportTechnical operations
800500465600226000932000308000982300293800
1017101910161005101110031025
Chapter 4 - 39
Another SELECT Subqueryz Who are the department managers with budget
amounts greater than $900,000
SELECT last_nameFROM employeeWHERE employee_number IN
( SELECT manager_employee_numberFROM department WHERE budget_amount > 900000 ) ;
21
Chapter 4 - 40
SELECT Subquery with ANDz Who are the department managers whose salaries
are less than $35,000 and whose budget amounts are greater than $900,000?
SELECT last_name, first_nameFROM employeeWHERE salary_amount < 35000AND employee_number IN
( SELECT manager_employee_numberFROM department WHERE budget_amount > 900000 ) ;
Chapter 4 - 41
Subquery – Multiple Matchz Who are the department –level managers who are
assigned to the same department that they manage?
SELECT employee_number, last_name, first_nameFROM employeeWHERE (department_number, employee_number) IN
( SELECT department_number,manager_employee_number
FROM department );
22
Chapter 4 - 42
Single Row Subqueryz Select employees who have the same job as ‘Ryan’.
SELECT employee_numberFROM employeeWHERE job_code =
( SELECT job_code FROM employee WHERE last_name = ‘Ryan’);
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 43
ANY or ALL Operatorsz Select employees who earn more than the lowest
salary in department 401.SELECT employee_numberFROM employeeWHERE salary_amount >ANY (
SELECT DISTINCT salary_amountFROM employeeWHERE department_number = 401 );
z ANY � ALL������?
23
Chapter 4 - 44
EXISTS Operatorsz ��������?
SELECT employee_number, last_nameFROM employee MWHERE EXISTS (
SELECT employee_numberFROM employee EWHERE E.manager_employee_number =
M.employee_number );
z EXISTS, NOT EXISTS
Chapter 4 - 45
2.3 Joinz What is Join?
✔ A concept in relational database theory.✔ A technique for outputting data from more than one
table in a single answer set.✔ Each row in the answer set may contain data from
columns of more than one table.✔ Tables should be joined on columns sharing common
domains – rows that have identical values in the join column are matched up.
24
Chapter 4 - 46
Simple JoinSELECT employee.employee_number,
employee.last_name,
department.department_name
FROM employee, department
WHERE employee.department_number =
department.department_number;
Employee Departmentdepartment_number
employee_numberlast_name
department_name
Chapter 4 - 47
EmployeeNum ber
M anagerEmployeeNum ber
Depart-m entNum ber
JobCode
LastNam e
FirstNam e
HireDate
B irthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
DepartmentNumber Department Name Budget
Amount
ManagerEmployeeNumber
PK FK
501301302403402401201
Marketing salesResearch and developmentProduct planningEducationSoftware supportCustomer supportTechnical operations
800500465600226000932000308000982300293800
1017101910161005101110031025
25
Chapter 4 - 48
Join with ANDz �������������������
�������
SELECT employee_number, last_name, first_name,department_name
FROM employee, departmentWHERE department_name like ‘%support%’AND employee.department_number =
department.department_number;
Chapter 4 - 49
Defining and Using Alias Namez 401 �����������������
�����?
SELECT e.last_name, m.last_nameFROM employee e, manager mWHERE e.department_number = 401AND e.manager_employee_number =
m.employee_number;
26
Chapter 4 - 50
E m ploye e N um ber
M an age r E m ploye e N um ber
D epart-m ent N um ber
Jo b C ode
La s t N am e
F irs t N am e
H ire D a te
B irth D a te
S a la ry A m oun t
P K F K F K F K
D epartm ent N um ber D epartm ent N am e B udget
A m ount
M anager E m ployee N um ber
P K FK
Job C ode D escrip tion
H ourly B illing R ate
H ourly C ost R a te
P K
Three-way Join
Chapter 4 - 51
Three-way Join - Examplez 401 ��������������, ����, �������?
SELECT last_name, department_name, descriptionFROM employee e, department d, job jWHERE e.department_number = d.department_number AND e.job_code = j.job_codeAND e.department_number = 401;
27
Chapter 4 - 52
Outer JoinSELECT last_name, D.department_number,
department_nameFROM employee E, department DWHERE E.department_number = D.department_number;
⇒ ���: Employee� �� Department���?
SELECT last_name, D.department_number,department_name
FROM employee E, department DWHERE E.department_number (+) = D.department_number;
Chapter 4 - 53
Subquery� Join� ��
z SUBQUERY z JOIN
Table 1 Table 2
Result
Table 1 Table 2
Result
28
Chapter 4 - 54
2.4 Aggregate Functionsz COUNT
z SUM
z AVG
z MAX
z MIN
Chapter 4 - 55
ExampleSELECT COUNT(salary_amount),
SUM(salary_amount), AVG(salary_amount),
MAX(salary_amount), MIN(salary_amount)
FROM employee;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
29
Chapter 4 - 56
GROUP BYz Create a summary showing total salary for each
department.SELECT department_number, SUM(salary_amount)FROM employeeGroup By department_number;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
Chapter 4 - 57
GROUP BY and WHEREz What are the total salaries for department 401 and
403?SELECT department_number, SUM(salary_amount)FROM employeeWHERE department_number IN (401, 403)Group By department_number;
EmployeeNumber
ManagerEmployeeNumber
Depart-mentNumber
JobCode
LastName
FirstName
HireDate
BirthDate
SalaryAmount
PK FK FK FK
100610081005100410071003
100310081007100310051008
301301403401403401
312101312102431100412101432101411100
SteinKanieskiRyanJohnsonVillegasTrader
JohnCarolLorettaDarleneArnoldJames
761015770201761015761015770102760731
531015580517550910460423370131470619
294502925031200363004970037850
30
Chapter 4 - 58
GROUP BY on Multiple Fieldsz What are the total salaries for department 401 and
403, by job code?
SELECT department_number, job_code,SUM(salary_amount)
FROM employeeWHERE department_number IN (401, 403)GROUP BY department_number, job_codeORDER BY department_number, job_code;
Chapter 4 - 59
GROUP BY and Havingz Which departments have their average salary at
less than $36,000?
SELECT department_number,AVG(salary_amount)
FROM employeeGROUP BY department_numberHAVING AVG(salary_amount) < 36000;
31
Chapter 4 - 60
Aggregate Function & Subqueryz 301 �����������������
�������?
SELECT department_number, AVG(salary_amount)FROM employeeGROUP BY department_numberHAVING AVG(salary_amount) > ( SELECT AVG(salary_amount)
FROM employeeWHERE department_number = 301 );
Chapter 4 - 61
Aggregate Function & Subqueryz ��������������?
SELECT department_number, employee_numberFROM employee fWHERE salary_amount = ( SELECT MAX(salary_amount)
FROM employee sWHERE s.department_number =
f.department_number );
32
Chapter 4 - 62
Aggregate Function & Subqueryz ����������?
SELECT job_code, AVG(salary_amount)FROM employeeGROUP BY job_codeHAVING AVG(salary_amount) = ( SELECT MAX(AVG(salary_amount))
FROM employeeGROUP BY job_code );
Chapter 4 - 63
2.5 Set Operationsz Manager���� 401 ������?
SELECT employee_number, last_nameFROM employeeWHERE department_number = 401MINUSSELECT employee_number, last_nameFROM employee e, department dWHERE d.department_number = 401AND e.employee_number =
d.manager_employee_number
z UNION, MINUS, INTERSECT