SQL Design and Implementation
SQL Design and Implementation
CONTENT SOURCES:
• ELAMSARI AND NAVATHE, FUNDAMENTALS OF DATABASE MANAGEMENT
SYSTEMS
• BRAD LLOYD & MICHELLE ZUKOWSKI’S SLIDES
• -Silberschatz−Korth−Sudarshan • Database System Concepts, Fourth
Edition
An Overview of SQL
•2
Data Manipulation
Data Definition
Data Administration
All operations are expressed as an SQL statement or
command.
SQL Requirements
•4
Altering Table
Altering Constraints
WHERE <condition>
Query 0: Retrieve the birthdate and address of the employee whose name
is 'John B. Smith'.
•Slide 8-23
Simple SQL Queries (cont.)
Query 1: Retrieve the name and address of all employees who work for the
'Research' department.
•Slide 8-24
Simple SQL Queries (cont.)
Query 2: For every project located in 'Stafford', list the project number, the
controlling department number, and the department manager's last name,
address, and birthdate.
•Slide 8-25
•26
Aliases, * and DISTINCT, Empty WHERE-clause
In SQL, we can use the same name for two (or more)
attributes as long as the attributes are in different relations
A query that refers to two or more attributes with the same
name must qualify the attribute name with the relation
name by prefixing the relation name to the attribute name
EMPLOYEE.LNAME ,DEPARTMENT.DNAME
•Slide 8-27
Dealing with ambiguities
•28
Query 8: For each employee, retrieve the employee's name, and the name of his or her
immediate supervisor.
In Q8, the alternate relation names E and S are called aliases or tuple variables
for the EMPLOYEE relation
We can think of E and S as two different copies of EMPLOYEE; E represents
employees in role of supervisees and S represents employees in role of supervisors
•Slide 8-29
•30
ALIASES (cont.)
Aliasing can also be used in any SQL query for convenience
Can also use the AS keyword to specify aliases
Q1C: SELECT *
FROM EMPLOYEE
WHERE DNO=5
•Slide 8-32
DISTINCT
SQL does not treat a relation as a set; duplicate tuples can
appear
To eliminate duplicate tuples in a query result, the keyword
DISTINCT is used
Q11: SELECT SALARY
FROM EMPLOYEE
Q11A: SELECT DISTINCT SALARY
FROM EMPLOYEE
•Slide 8-33
AGGREGATE FUNCTIONS
COUNT, SUM, MAX, MIN, and AVG
Query 15: Find the maximum salary, the minimum salary, and
•Slide 8-34
AGGREGATE FUNCTIONS (cont.)
Query 16: Find the maximum salary, the minimum salary, and
the average salary among employees who work for the
'Research' department.
•Slide 8-35
AGGREGATE FUNCTIONS (cont.)
•Slide 8-36
GROUPING
•Slide 8-37
GROUPING (cont.)
Query 20: For each department, retrieve the department number, the
number of employees in the department, and their average salary.
Q20: SELECT DNO, COUNT (*), AVG (SALARY)
FROM EMPLOYEE
GROUP BY DNO
•Slide 8-38
GROUPING (cont.)
Query 21: For each project, retrieve the project number, project
name, and the number of employees who work on that project
Q21: SELECT PNUMBER, PNAME, COUNT (*)
FROM PROJECT, WORKS_ON
WHEREPNUMBER=PNO
GROUP BY PNUMBER, PNAME
In this case, the grouping and functions are applied after the joining of the two
relations
•Slide 8-39
THE HAVING-CLAUSE
To retrieve the values of functions for only those
groups that satisfy certain conditions
The HAVING-clause is used for specifying a
selection condition on groups (rather than on
individual tuples)
•Slide 8-40
THE HAVING-CLAUSE (cont.)
Query 22: For each project on which more than two
employees work , retrieve the project number, project
name, and the number of employees who work on that
project.
•count
•Slide 8-41
SUBSTRING COMPARISON
The LIKE comparison operator is used to compare
partial strings
Two reserved characters are used:
•Slide 8-42
SUBSTRING COMPARISON (cont.)
Query 25: Retrieve all employees whose address is in Houston, Texas.
Here, the value of the ADDRESS attribute must contain the substring
'Houston,TX'.
•Slide 8-43
SUBSTRING COMPARISON (cont.)
Query 26: Retrieve all employees who were born during the 1950s.
Q26: SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE BDATE LIKE '_______5_’
The LIKE operator allows us to get around the fact that each value is
considered atomic and indivisible; hence, in SQL, character string
attribute values are not atomic
Here, '5' must be the 8th character of the string (according to our format for
date), so the BDATE value is '_______5_', with each underscore as a place holder
for a single arbitrary character.
•Slide 8-44
ARITHMETIC OPERATIONS
The standard arithmetic operators '+', '-'. '*', and '/' can be applied
to numeric values in an SQL query result
Query 27: Show the effect of giving all employees who work on the
'ProductX' project a 10% raise.
•Slide 8-45
ORDER BY
The ORDER BY clause is used to sort the tuples in a query result based
on the values of some attribute(s)
Query 28: Retrieve a list of employees and the projects each works in,
ordered by the employee's department, and within each department
ordered alphabetically by employee last name.
•Slide 8-46
ORDER BY (cont.)
The default order is in ascending order of values
We can specify the keyword DESC if we want a descending
order;
The keyword ASC can be used to explicitly specify ascending
order, even though it is the default
•Slide 8-47
SET OPERATIONS
UNION
Set difference (MINUS)
Intersection (INTERSECT)
•Slide 8-48
SET OPERATIONS (cont.)
Query 4: Make a list of all project numbers for projects that involve an
employee whose last name is 'Smith' as a worker or as a manager of the
department that controls the project.
(SELECT PNAME
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith')
UNION
(SELECT PNAME
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='Smith')
•Slide 8-49
NESTING OF QUERIES
A complete SELECT query, called a nested query , can be specified within the WHERE-
clause of another query, called the outer query
Query 1: Retrieve the name and address of all employees who work for the
'Research' department.
•The outer query select an
EMPLOYEE tuple if its DNO value
Q1: SELECT FNAME, LNAME, ADDRESS is in the result of nested query
FROM EMPLOYEE
WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT
• WHERE DNAME='Research' )
•The comparison operator IN compares a value
v with a set (or multi-set) of values V, and
evaluates to TRUE if v is one of the elements in
V •The nested query selects
the number of the
'Research' department
•Slide 8-50
CORRELATED NESTED QUERIES
If a condition in the WHERE-clause of a nested query references an attribute of a
relation declared in the outer query
Query 12: Retrieve the name of each employee who has a dependent with the
same first name as the employee.
Q12: SELECT E.FNAME, E.LNAME
FROM EMPLOYEE AS E
WHERE E.SSN IN (SELECT ESSN
FROM DEPENDENT
Same query-
WHERE ESSN=E.SSN AND
E.FNAME=DEPENDENT_NAME) Two diff
ways
Q12A:SELECT E.FNAME, E.LNAME
FROM EMPLOYEE E, DEPENDENT D
WHERE E.SSN=D.ESSN AND
E.FNAME=D.DEPENDENT_NAME
•Slide 8-51
THE EXISTS FUNCTION
EXISTS is used to check whether the result of a
correlated nested query is empty (contains no
tuples) or not. The result of EXISTS is a boolean
value True or False. It can be used in a SELECT,
UPDATE, INSERT or DELETE statement.
•Slide 8-52
THE EXISTS FUNCTION (cont.)
•Slide 8-53
THE EXISTS FUNCTION (cont.)
Query 6: Retrieve the names of employees who have no
dependents.
Q6:
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE NOT EXISTS ( SELECT *
FROM DEPENDENT
WHERE SSN=ESSN)
•Slide 8-54
EXPLICIT SETS
It is also possible to use an explicit (enumerated) set of
values
Query 13: Retrieve the social security numbers of all
employees who work on project number 1, 2, or 3.
•Slide 8-55
NULLS IN SQL QUERIES
SQL allows queries that check if a value is NULL
- (missing / undefined /not applicable)
SQL uses IS or IS NOT to compare NULLs because it considers each
NULL value distinct from other NULL values, so equality comparison is
not appropriate .
Query 14: Retrieve the names of all employees who do not have
supervisors.
Note: If a join condition is specified, tuples with NULL values for the join
attributes are not included in the result
•Slide 8-56
Joins in SQL
•57
•Slide 8-58
Different SQL Joins
•59
•Slide 8-61
LEFT JOIN
The SQL LEFT JOIN returns all rows from the left table, even if there are no
matches in the right table.
This means that if the ON clause matches 0 (zero) records in right table, the join
will still return a row in the result, but with NULL in each column from right table.
This means that a left join returns all the values from the left table, plus matched
values from the right table or NULL in case of no matching join predicate.
•Slide 8-62
Right Join
•63
A query in SQL can consist of up to six clauses, but only the first
two, SELECT and FROM, are mandatory. The clauses are
specified in the following order:
•Slide 8-67
Summary of SQL Queries (cont.)
•Slide 8-68
Specifying Updates in SQL
There are three SQL commands to modify the
database; INSERT, DELETE, and UPDATE
•Slide 8-69
INSERT
Used to add one or more tuples to a relation
Attribute values should be listed in the same order
as the attributes were specified in the CREATE
TABLE command
•Slide 8-70
INSERT (cont.)
Example:
Example: Insert a tuple for a new EMPLOYEE for whom we only know the
FNAME, LNAME, and SSN attributes.
•Slide 8-71
INSERT (cont.)
Note: Only the constraints specified in the DDL
commands are automatically enforced by the DBMS
when updates are applied to the database
Another variation of INSERT allows insertion of
multiple tuples resulting from a query into a relation
•Slide 8-72
INSERT (cont.)
Example: Suppose we want to create a temporary table that has the name, number of
employees, and total salaries for each department. A table DEPTS_INFO is created by
U3A, and is loaded with the summary information retrieved from the database by the
query in U3B.
•Slide 8-73
INSERT (cont.)
Note: The DEPTS_INFO table may not be up-to-date if we
change the tuples in either the DEPARTMENT or the EMPLOYEE
relations after issuing U3B. We have to create a view (see
later) to keep such a table up to date.
•Slide 8-74
DELETE
Removes tuples from a relation
Includes a WHERE-clause to select the tuples to be deleted
Tuples are deleted from only one table at a time (unless
CASCADE is specified on a referential integrity constraint)
A missing WHERE-clause specifies that all tuples in the relation
are to be deleted; the table then becomes an empty table
The number of tuples deleted depends on the number of tuples
in the relation that satisfy the WHERE-clause
Referential integrity should be enforced
•Slide 8-75
DELETE (cont.)
U4A: DELETE FROM EMPLOYEE
WHERE LNAME='Brown’
U4B:DELETE FROM EMPLOYEE
WHERE SSN='123456789’
U4C: DELETE FROM EMPLOYEE
WHERE DNO IN
(SELECT DNUMBER
FROM DEPARTMENT
WHEREDNAME='Research')
U4D: DELETE FROM EMPLOYEE
•Slide 8-76
UPDATE
Used to modify attribute values of one or more
selected tuples
A WHERE-clause selects the tuples to be modified
An additional SET-clause specifies the attributes to be
modified and their new values
Each command modifies tuples in the same relation
Referential integrity should be enforced
•Slide 8-77
UPDATE (cont.)
Example: Change the location and controlling department
number of project number 10 to 'Bellaire' and 5,
respectively.
•Slide 8-78
UPDATE (cont.)
Example: Give all employees in the 'Research' department a 10% raise in
salary.
•Slide 8-79