0% found this document useful (0 votes)
46 views45 pages

Lecture 10

The document discusses various SQL aggregate functions and clauses including COUNT, AVG, GROUP BY, and HAVING. It provides examples of queries using these functions and clauses to return aggregate results like the total number of instructors, average salary by department, and number of instructors by department. It also covers nested subqueries, set comparisons, and modifying the database through INSERT, DELETE, and UPDATE statements.

Uploaded by

dragon ball
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views45 pages

Lecture 10

The document discusses various SQL aggregate functions and clauses including COUNT, AVG, GROUP BY, and HAVING. It provides examples of queries using these functions and clauses to return aggregate results like the total number of instructors, average salary by department, and number of instructors by department. It also covers nested subqueries, set comparisons, and modifying the database through INSERT, DELETE, and UPDATE statements.

Uploaded by

dragon ball
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 45

Aggregate Functions

• Find the total number of instructors who


teach a course in the Spring 2010 semester.

• select count (distinct ID)


• from teaches
• where semester = ’Spring’ and year = 2010
Aggregate Functions
• Find the number of tuples in the course
relation.
Aggregate Functions
• Find the number of tuples in the course
relation.

• select count (*)


• from course ;

• SQL does not allow the use of distinct with


count (*)
Grouping
• There are circumstances where we would like
to apply the aggregate function not only to a
single set of tuples, but also to a group of sets
of tuples.
• We specify this in SQL using the group by
clause.
Grouping
• Find the average salary in each department.
Grouping
• Find the average salary in each department.

• select dept_name, avg (salary ) as avg_salary


• from instructor
• group by dept_name;
Grouping
Any attribute that is not present in the group by
clause must appear only inside an aggregate
function if it appears in the select clause.
• Otherwise the query is treated as erroneous.
• /* erroneous query */
• select dept_name, ID, avg (salary )
• from instructor
• group by dept_name;
Grouping
• Find the number of instructors in each department
who teach a course in the Spring 2010 semester.
Grouping
• Find the number of instructors in each
department who teach a course in the Spring
2010 semester.

• select dept_name, count (distinct ID) as


instr_count
• from instructor natural join teaches
• where semester = ’Spring’ and year = 2010
• group by dept_name;
Having Clause
• Having clause is useful to state a condition
that applies to groups rather than to tuples.
• Any attribute that is present in the having
clause without being aggregated must
appear in the group by clause, otherwise the
query is treated as erroneous.
• SQL applies predicates in the having clause
after groups have been formed.
Having Clause
• Find only those departments where the average
salary of the instructors is more than $42,000.
Having Clause
• Find only those departments where the
average salary of the instructors is more than
$42,000.

• select dept_name, avg (salary ) as avg_salary


• from instructor
• group by dept_name
• having avg (salary ) > 42000;
Having Clause
• For each course section offered in 2009, find
the average total credits of all students
enrolled in the section, if the section had at
least 2 students.
Having Clause
• For each course section offered in 2009, find the
average total credits of all students enrolled in
the section, if the section had at least 2 students.

• select course_id , year , sec_id , avg (tot_cred )


• from takes natural join student
• where year = 2009
• group by course_id , year , sec_id
• having count (ID) >= 2;
Nested Subqueries
• A subquery is a select -from-where expression
that is nested within another query.
• A common use of subqueries is to perform
tests for set membership, make set
comparisons, and determine set cardinality, by
nesting subqueries in the where clause.
Set Membership
• The in connective tests for set membership,
where the set is a collection of values
produced by a select clause.
• The not in connective tests for the absence of
set membership.
Set Membership
• Find all the courses taught in the both the Fall 2009
and Spring 2010 semesters.

• (select distinct course_id
• from section
• where semester = ’Fall’ and year = 2009)
intersect
• (select course_id
• from section
• where semester = ’Spring’ and year = 2010);
Set Membership
• Find all the courses taught in the both the Fall 2009
and Spring 2010 semesters.

• select distinct course_id


• from section
• where semester = ’Fall’ and year = 2009 and
Course_id in (select course_id
from section
where semester = ’Spring’ and year
= 2010);
Nested Subqueries
• Find all the courses taught in the Fall 2009
semester but not in the Spring 2010 semester.
Nested Subqueries
• Find all the courses taught in the Fall 2009 semester
but not in the Spring 2010 semester.

• (select course_id
• from section
• where semester = ’Fall’ and year = 2009)
except
• (select course id
• from section
• where semester = ’Spring’ and year = 2010);
Nested Subqueries
• Find all the courses taught in the Fall 2009
semester but not in the Spring 2010 semester.
• select distinct course_id
• from section
• where semester = ’Fall’ and year = 2009 and
course_id not in (select course_id
from section
where semester = ’Spring’ and
year = 2010);
Nested Subqueries
• Find the names of instructors whose names
are neither “Mozart” nor “Einstein”.
Nested Subqueries
• Find the names of instructors whose names
are neither “Mozart” nor “Einstein”.

• select distinct name


• from instructor
• where name not in (’Mozart’, ’Einstein’);
Set Comparison
• The phrase “greater than at least one” is
represented in SQL by > some.
• SQL also allows < some, <= some, >= some,
= some.
• As an exercise, verify that = some is identical
to in
Set Comparison
• Find the names of all instructors whose salary
is greater than at least one instructor in the
Biology department.
Set Comparison
• Find the names of all instructors whose salary
is greater than at least one instructor in the
Biology department.

• select distinct T . name


• from instructor as T , instructor as S
• where T.salary> S.salary and S.dept_name=
’Biology’;
Set Comparison
• Find the names of all instructors whose salary
is greater than at least one instructor in the
Biology department.
Set Comparison
• The construct > all corresponds to the phrase
“greater than all. “
• SQL also allows < all, <= all, >= all, = all
comparisons.
Set Comparison
• Find the departments that have the highest
average salary.
Set Comparison
• Find the departments that have the highest
average salary.
Set Comparison
• Find the departments that have the highest
average salary.

• select max (avg_salary)


• from (select dept_name, avg(salary) AS
avg_salary
from instructor
group by dept_name);
Modification o f the Database
• Insertion
• Deletion
• Update
Deletion
• We can delete only whole tuples; we cannot
delete values on only particular attributes.

• delete from relation_name


• where given_conditions ;

• Note that a delete command operates on only


one relation.
Deletion
• delete from instructor;

• The request deletes all tuples from the


instructor relation.
• The instructor relation itself still exists, but it is
empty.
Deletion
• Delete all instructors with a salary between
$13,000 and $15,000.

• delete from instructor


• where salary between 13000 and 15000;
Deletion
• Delete all tuples in the instructor relation for
those instructors associated with a
department located in the Watson building.
Deletion
• Delete all tuples in the instructor relation for those instructors
associated with a department located in the Watson building.

• delete from instructor


• where dept_name in (select dept_name
from department
where building = ’Watson’);

• We may reference any number of relations in a select-from-


where nested in the where clause of a delete .
Insertion
• The simplest insert statement is a request to
insert one tuple.
• insert into course
• values (’ CS-437’, ’Database Systems’, ’Comp.
Sci.’, 4);
Insertion
• The simplest insert statement is a request to
insert one tuple (using form).
• insert into course
• values (’ $course_id’, ’$title’, ’$dept_name’,
‘$credits’);
Updates
• We may wish to change a value in a tuple
without changing all values in the tuple.

• Suppose that annual salary increases are being


made, and salaries of all instructors are to be
increased by 5 percent.
• Update instructor
• set salary = salary * 0.05;
Updates
• Suppose that annual salary increases are being
made, and salaries of all instructors are to be
increased by 5 percent. This salary increase is to
be paid only to instructors with salary of less than
$70,000

• Update instructor
• set salary = salary *0.05
• where salary < 70000;
Updates
• Give a 5 percent salary raise to instructors
whose salary is less than average.
Updates
• Give a 5 percent salary raise to instructors
whose salary is less than average.

• Update instructor
• set salary = salary *0.05
• where salary < (select avg (salary )
from instructor)

You might also like