









Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
In this document topics covered which are Relational DB Languages Advanced SQL, SELECT Statement - Aggregates, Restricted Groupings – HAVING clause, Subqueries,Subquery with Aggregate, Use of HAVING.
Typology: Study notes
1 / 15
This page cannot be seen from the preview
Don't miss anything!










DBDI/ Lecture 9 Relational DB Languages Advanced SQL
Dr. Ala Al-Zobaidie The slides are based on the textbook Database Systems by Connolly & Begg
30/05/2007 DBDI / AdvSQL 2
30/05/2007 DBDI / AdvSQL 3
SELECT Statement - Aggregates
COUNT returns number of values in specified column.
SUM returns sum of values in specified column.
AVG returns average of values in specified column.
MIN returns smallest value in specified column.
MAX returns largest value in specified column.
30/05/2007 DBDI / AdvSQL 4
SELECT Statement - Aggregates
SELECT Statement - Aggregates
SELECT Statement - Aggregates
SELECT staffNo, COUNT(salary) FROM Staff;
30/05/2007 DBDI / AdvSQL 7
Example 5.13 Use of COUNT()*
How many properties cost more than 350 per month to rent?
SELECT COUNT(*) AS count FROM PropertyForRent WHERE rent > 350;
30/05/2007 DBDI / AdvSQL 8
Example 5.14 Use of COUNT(DISTINCT)
How many different properties viewed in May ‘01?
SELECT COUNT(DISTINCT propertyNo) AS count FROM Viewing WHERE date BETWEEN ‘1-May-01’ AND '31-May-01';
30/05/2007 DBDI / AdvSQL 9
Example 5.15 Use of COUNT and SUM
Find number of Managers and sum of their salaries. SELECT COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff WHERE position = 'Manager';
30/05/2007 DBDI / AdvSQL 10
Example 5.16 Use of MIN, MAX, AVG
Find minimum, maximum, and average staff salary.
SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg FROM Staff;
SELECT Statement - Grouping
SELECT Statement - Grouping
30/05/2007 DBDI / AdvSQL 19
Example 5.19 Subquery with Equality
List staff who work in branch at '163 Main St'.
SELECT staffNo, fName, lName, position FROM Staff WHERE branchNo = (SELECT branchNo FROM Branch WHERE street = '163 Main St');
30/05/2007 DBDI / AdvSQL 20
Example 5.19 Subquery with Equality
SELECT staffNo, fName, lName, position FROM Staff WHERE branchNo = 'B003';
30/05/2007 DBDI / AdvSQL 21
Example 5.19 Subquery with Equality
30/05/2007 DBDI / AdvSQL 22
Example 5.20 Subquery with Aggregate
List all staff whose salary is greater than the average salary, and show by how much.
SELECT staffNo, fName, lName, position, salary – (SELECT AVG(salary) FROM Staff) As SalDiff FROM Staff WHERE salary > (SELECT AVG(salary) FROM Staff);
Example 5.20 Subquery with Aggregate
SELECT staffNo, fName, lName, position, salary – 17000 As salDiff FROM Staff WHERE salary > 17000;
Example 5.20 Subquery with Aggregate
30/05/2007 DBDI / AdvSQL 25
Subquery Rules
Subquery Rules
30/05/2007 DBDI / AdvSQL 27
Example 5.21 Nested subquery: use of IN
List properties handled by staff at '163 Main St'.
SELECT propertyNo, street, city, postcode, type, rooms, rent FROM PropertyForRent WHERE staffNo IN (SELECT staffNo FROM Staff WHERE branchNo = (SELECT branchNo FROM Branch WHERE street = '163 Main St')); 30/05/2007 DBDI / AdvSQL 28
Example 5.21 Nested subquery: use of IN
ANY and ALL
Example 5.22 Use of ANY/SOME
Find staff whose salary is larger than salary of at least one member of staff at branch B003.
SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > SOME (SELECT salary FROM Staff WHERE branchNo = 'B003');
30/05/2007 DBDI / AdvSQL 37
Example 5.24 Simple Join
30/05/2007 DBDI / AdvSQL 38
Alternative JOIN Constructs
FROM Client c JOIN Viewing v ON c.clientNo = v.clientNo FROM Client JOIN Viewing USING clientNo FROM Client NATURAL JOIN Viewing
30/05/2007 DBDI / AdvSQL 39
Example 5.25 Sorting a join
For each branch, list numbers and names of staff who manage properties, and properties they manage.
SELECT s.branchNo, s.staffNo, fName, lName, propertyNo FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo ORDER BY s.branchNo, s.staffNo, propertyNo; 30/05/2007 DBDI / AdvSQL 40
Example 5.25 Sorting a join
Example 5.26 Three Table Join
For each branch, list staff who manage properties, including city in which branch is located and properties they manage.
SELECT b.branchNo, b.city, s.staffNo, fName, lName, propertyNo FROM branch b, staff s, property_for_rent p WHERE b.branchNo = s.branchNo AND s.staffNo = p.staffNo ORDER BY b.branchNo, s.staffNo, propertyNo;
Example 5.26 Three Table Join
30/05/2007 DBDI / AdvSQL 43
Example 5.27 Multiple Grouping Columns Find number of properties handled by each staff member.
SELECT s.branchNo, s.staffNo, COUNT(*) AS count FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.branchNo, s.staffNo ORDER BY s.branchNo, s.staffNo;
30/05/2007 DBDI / AdvSQL 44
Example 5.27 Multiple Grouping Columns
30/05/2007 DBDI / AdvSQL 45
Computing a Join
Procedure for generating results of a join are:
30/05/2007 DBDI / AdvSQL 46
Computing a Join
Outer Joins
Outer Joins
30/05/2007 DBDI / AdvSQL 55
Example 5.30 Full Outer Join
30/05/2007 DBDI / AdvSQL 56
EXISTS and NOT EXISTS
30/05/2007 DBDI / AdvSQL 57
EXISTS and NOT EXISTS
30/05/2007 DBDI / AdvSQL 58
Example 5.31 Query using EXISTS
Find all staff who work in a London branch.
SELECT staffNo, fName, lName, position FROM Staff s WHERE EXISTS (SELECT * FROM Branch b WHERE s.branchNo = b.branchNo AND city = 'London');
Example 5.31 Query using EXISTS Example 5.31 Query using EXISTS
30/05/2007 DBDI / AdvSQL 61
Example 5.31 Query using EXISTS
30/05/2007 DBDI / AdvSQL 62
Union, Intersect, and Difference (Except)
30/05/2007 DBDI / AdvSQL 63
Union, Intersect, and Difference (Except)
op [ALL] [CORRESPONDING [BY {column1 [, ...]}]]
Union, Intersect, and Difference (Except)
Example 5.32 Use of UNION
List all cities where there is either a branch or property.
(SELECT city FROM Branch WHERE city IS NOT NULL) UNION (SELECT city FROM PropertyForRent WHERE city IS NOT NULL);
Example 5.32 Use of UNION
(SELECT * FROM Branch WHERE city IS NOT NULL) UNION CORRESPONDING BY city (SELECT * FROM PropertyForRent WHERE city IS NOT NULL);
30/05/2007 DBDI / AdvSQL 73
INSERT INTO TableName [ (columnList) ] VALUES (dataValueList)
30/05/2007 DBDI / AdvSQL 75
Example 5.35 INSERT … VALUES
Insert a new row into Staff table supplying data for all columns.
INSERT INTO Staff VALUES ('SG16', 'Alan', 'Brown', 'Assistant', 'M', Date‘1957-05-25', 8300, 'B003');
30/05/2007 DBDI / AdvSQL 76
Example 5.36 INSERT using Defaults
Insert a new row into Staff table supplying data for all mandatory columns. INSERT INTO Staff (staffNo, fName, lName, position, salary, branchNo) VALUES ('SG44', 'Anne', 'Jones', 'Assistant', 8100, 'B003');
INSERT INTO TableName [ (columnList) ] SELECT ...
Example 5.37 INSERT … SELECT
Assume there is a table StaffPropCount that contains names of staff and number of properties they manage:
StaffPropCount(staffNo, fName, lName, propCnt)
Populate StaffPropCount using Staff and PropertyForRent tables.
30/05/2007 DBDI / AdvSQL 79
Example 5.37 INSERT … SELECT INSERT INTO StaffPropCount (SELECT s.staffNo, fName, lName, COUNT(*) FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.staffNo, fName, lName) UNION (SELECT staffNo, fName, lName, 0 FROM Staff WHERE staffNo NOT IN (SELECT DISTINCT staffNo FROM PropertyForRent)); 30/05/2007 DBDI / AdvSQL 80
Example 5.37 INSERT … SELECT
30/05/2007 DBDI / AdvSQL 81
UPDATE TableName SET columnName1 = dataValue [, columnName2 = dataValue2...] [WHERE searchCondition]
30/05/2007 DBDI / AdvSQL 82
Example 5.38/39 UPDATE All Rows
Give all staff a 3% pay increase. UPDATE Staff SET salary = salary*1.03;
Give all Managers a 5% pay increase.
UPDATE Staff SET salary = salary*1. WHERE position = 'Manager';
Example 5.40 UPDATE Multiple Columns Promote David Ford (staffNo = 'SG14') to Manager and change his salary to 18,000.
UPDATE Staff SET position = 'Manager', salary = 18000 WHERE staffNo = 'SG14';