SQL: Schema Definition,
Basic Constraints, and
Queries
SQL INTRODUCTION
SQL stands for Structured Query Language
Standard language for querying and manipulating data
Data Definition • Create, alter, delete tables and their
Language (DDL) attributes
Data • Query one or more tables
Manipulation
• Insert, delete, modify tuples in tables
Language (DML)
Slide
Many standards out there: 8-2
ANSI SQL, SQL92 (a.k.a. SQL2), SQL99 (a.k.a. SQL3), …
REFERENTIAL INTEGRITY OPTIONS
We can specify RESTRICT, CASCADE, SET NULL or SET
DEFAULT on foreign keys.
CREATE TABLE DEPARTMENT
(
DNAME VARCHAR(10) NOT NULL,
DNUMBER INTEGER NOT NULL,
MGRSSN CHAR(9),
MGRSTARTDATE CHAR(9),
PRIMARY KEY (DNUMBER),
UNIQUE (DNAME),
FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN)
ON DELETE SET DEFAULT ON UPDATE CASCADE Slide
); 8-6
REFERENTIAL INTEGRITY OPTIONS
Not reasonable
in this scenario
CASCADE Slide
8-7
REFERENTIAL INTEGRITY OPTIONS
NULL
SET NULLSlide
8-8
REFERENTIAL INTEGRITY OPTIONS
CREATE TABLE EMPLOYEE(
ENAME VARCHAR(30) NOT NULL,
ESSN CHAR(9),
BDATE DATE,
DNO INTEGER DEFAULT 1,
SUPERSSN CHAR(9),
PRIMARY KEY (ESSN),
FOREIGN KEY (DNO) REFERENCES DEPARTMENT
ON DELETE SET DEFAULT ON UPDATE CASCADE,
FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN)
ON DELETE SET NULL ON UPDATE CASCADE
);
SQL CONSTRAINTS
Assigning Names to Constraints
CONSTRAINT deptPK PRIMARY KEY(Dnumber)
CONSTRAINT deptSK UNIQUE(Dname)
Slide
8-12
ALTER COMMAND
The definition of table can be changed using ALTER command
ALTER can be used to add an attribute to the relation
Initially, the new attribute will have NULLs in all the tuples of the relation
NOT NULL constraint is not allowed for such an attribute
Example :
ALTER TABLE EMPLOYEE ADD JOB VARCHAR(12);
The database user have to enter a value for the new attribute
Slide
JOB for each EMPLOYEE tuple. 8-13
SQL QUERIES
Basic form
SELECT <attributes>
FROM <one or more relations>
WHERE <conditions>
Not same as the Select operation of the relational algebra
In SQL, the result can have duplicate tuples
SQL relation is a multi-set (bag) of tuples; not a set of
tuples
Try SQLFiddle for online SQL practice Slide
8-15
http://sqlfiddle.com/
SIMPLE SQL QUERIES
Retrieve the details of employees who work under
the supervision of employee with id=333445555
SELECT * “selection”
FROM EMPLOYEE
WHERE Super_ssn = 333445555
Slide
8-17
SIMPLE SQL QUERIES
Retrieve the birthdate and address of the employee whose
name is 'John B. Smith'.
SELECT BDATE, ADDRESS
FROM EMPLOYEE
“selection” and
WHERE FNAME='John' AND MINIT='B’ “projection”
AND LNAME='Smith’
Slide
8-18
ELIMINATING DUPLICATES
SELECT Salary SELECT DISTINCT Salary
FROM Employee FROM Employee
JOIN OPERATION
Retrieve the name of all projects that are offered by
'Research' department.
SELECT PNAME
FROM PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER
WHERE DNAME='Research'
Slide
8-20
JOIN OPERATION
Retrieve the name of all projects that are offered by
'Research' department.
SELECT PNAME
FROM PROJECT , DEPARTMENT join condition
WHERE DNAME='Research’ and DNUM=DNUMBER
Slide
8-21
JOIN OPERATION
For projects located in 'Stafford', list the project no, the controlling
department no, and the department manager's last name, address
and birthdate.
SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE
FROM ((PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER)
JOIN EMPLOYEE ON MGRSSN=SSN)
WHERE PLOCATION = 'Stafford'
Slide
8-22
JOIN OPERATION
For projects located in 'Stafford', list the project no, the controlling
department no, and the department manager's last name, address
and birthdate.
SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE
FROM ((PROJECT JOIN DEPARTMENT ON DNUM=DNUMBER)
JOIN EMPLOYEE ON MGRSSN=SSN )
WHERE PLOCATION='Stafford'
Slide
8-23
JOIN OPERATION
For projects located in 'Stafford', list the project no, the controlling
department no, and the department manager's last name, address
and birthdate.
SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM=DNUMBER AND MGRSSN=SSN AND
PLOCATION='Stafford'
Slide
8-24
UNSPECIFIED WHERE-clause
Retrieve the SSN values for all employees.
• SELECT SSN
• FROM EMPLOYEE
Missing WHERE-clause
• indicates there is no condition and is same as WHERE TRUE
If there is no join condition, then we get
CARTESIAN PRODUCT
• SELECT SSN, DNAME
• FROM EMPLOYEE, DEPARTMENT
Slide
8-25
DIFFERENT JOINS IN SQL
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE AS E , EMPLOYEE AS S
WHERE E.SUPERSSN=S.SSN
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM (EMPLOYEE E JOIN EMPLOYEE S)
ON E.SUPERSSN=S.SSN
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM (EMPLOYEE E LEFT OUTER JOIN EMPLOYEE S
ON E.SUPERSSN=S.SSN) Slide
8-26
NATURAL JOIN IN SQL
SELECT FNAME, LNAME, ADDRESS
FROM (EMPLOYEE JOIN DEPARTMENT ON DNUMBER=DNO)
WHERE DNAME='Research’
or as:
SELECT FNAME, LNAME, ADDRESS
FROM (EMPLOYEE NATURAL JOIN DEPARTMENT
AS DEPT(DNAME, DNO, MSSN, MSDATE)
WHERE DNAME='Research’
No Natural Join in Transact-SQL
The keyword OUTER is marked as optional that is
A LEFT JOIN B is same as A LEFT OUTER JOIN B
CROSS JOIN is for cartesian product
ALIASES
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 attributes with the same name
must prefix the relation name to the attribute name
Example:
EMPLOYEE.DNO, DEPARTMENT.DNO
Slide
8-29
ALIASES
For each employee, retrieve the employee's name, and the
name of his or her immediate supervisor.
Using AS keyword to specify aliases
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE AS E, EMPLOYEE AS S
WHERE E.SUPERSSN=S.SSN
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME
FROM EMPLOYEE E S
WHERE E.SUPERSSN=S.SSN
Slide
8-30
ARITHMETIC OPERATIONS
Arithmetic operators '+', '-'. '*', and '/’) can be applied to
numeric values in an SQL query result
Give all employees who work on the 'ProductX' project a 10% raise.
SELECT FNAME, LNAME, 1.1*SALARY
FROM (WORKS_ON JOIN PROJECT ON PNO=PNUMBER)
JOIN EMPLOYEE ON ESSN=SSN
WHERE PNAME='ProductX’
Slide
8-31
ORDER BY
The ORDER BY clause sort the tuples in a query result
Retrieve a list of employees and the projects each works in,
ordered by the employee's department number
SELECT DNO, LNAME, FNAME, PNO
FROM EMPLOYEE JOIN WORKS_ON ON SSN=ESSN
ORDER BY DNO
ORDER BY
The ORDER BY clause sort the tuples in a query result
Retrieve a list of employees and the projects each works in,
ordered by the employee's department number
SELECT DNO, LNAME, FNAME, PNO
FROM EMPLOYEE JOIN WORKS_ON ON SSN=ESSN
ORDER BY DNO
The default order is in ascending order of values
We can specify the keyword DESC if we want a descending order
• ORDER BY Dname DESC, Lname ASC Slide
8-33
ORDER BY
Retrieve a list of Male employees and the projects each works in,
ordered by the employee's department name, and within each
department ordered alphabetically by employee last name,
then first name.
SELECT DNAME, LNAME, FNAME, PNAME
FROM ((DEPARTMENT JOIN EMPLOYEE ON DNUMBER=DNO )
JOIN WORKS_ON ON SSN=ESSN )
JOIN PROJECT ON PNO=PNUMBER)
WHERE SEX = ‘MALE’
ORDER BY DNAME, LNAME, FNAME
Slide
8-34
SQL QUERIES
Retrieve the names of all employees who do not have supervisors.
SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE SUPERSSN IS NULL
Note: If a join condition is specified, tuples with NULL values for the join
attributes are not included in the result
Slide
8-35
SUBSTRING COMPARISON
LIKE operator is used to compare partial strings
Two reserved characters are used:
• '%' (or '*' in some implementations) replaces an arbitrary number of
characters, and
• '_' replaces a single arbitrary character
Retrieve all employees whose address is in Houston, Texas.
• SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE ADDRESS LIKE '%Houston,TX%’ Slide
8-36
SUBSTRING COMPARISON
Retrieve all employees who were born during the
1950s.
• SELECT FNAME, LNAME
FROM EMPLOYEE
WHERE BDATE LIKE ‘195_______',.
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
SET OPERATIONS
SQL set operations are
• Union operation (UNION),
• Set difference (EXCEPT)
• Intersection operation (INTERSECT)
Duplicate tuples are eliminated from the result
Requires union compatible relations
Slide
8-38
SET OPERATIONS
Make a list of Pname’s 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.
Slide
8-39
SET OPERATIONS
Make a list of Pname’s 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 JOIN DEPARTMENT ON DNUM=DNUMBER ) JOIN
EMPLOYEE ON MGRSSN=SSN
WHERE LNAME='Smith')
UNION
(SELECT PNAME
FROM (PROJECT JOIN WORKS_ON ON PNUMBER=PNO ) JOIN
EMPLOYEE ON ESSN=SSN Slide
WHERE LNAME='Smith') 8-40
SET OPERATIONS
Find SSN of employees who work on project named ProductX
and as well as on project named ProductY
Slide
8-41
AGGREGATE FUNCTIONS
Include COUNT, SUM, MAX, MIN, and AVG
Find the maximum salary, the minimum salary, and the average
salary among all employees.
SELECT MAX(SALARY), MIN(SALARY), AVG(SALARY)
FROM EMPLOYEE
Some SQL implementations may not allow more than one
function in the SELECT-clause
Slide
8-42
AGGREGATE FUNCTIONS
Retrieve the no. of employees in the ‘Administration' department
SELECT COUNT (*)
FROM EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER
WHERE DNAME=‘Administration’
Slide
8-43
AGGREGATE EXAMPLE
Count the number of distinct salary values in the
database
SELECT COUNT (DISTINCT Salary)
FROM EMPLOYEE
NULL values are discarded when aggregate functions are
applied to a particular attribute.
Slide
8-44
GROUPING
GROUP BY-clause specifies the grouping attributes
For each department, retrieve the department number, the number
of employees in the department, and their average salary.
Slide
8-45
GROUPING
For each department, retrieve the department number, the
number of employees in the department, and their average
salary.
SELECT DNO, COUNT (*), AVG (SALARY)
FROM EMPLOYEE
GROUP BY DNO
Slide
8-46
GROUPING
For each project, retrieve the project number, project name,
and the number of employees who work on that project.
Slide
8-47
GROUPING
For each project, retrieve the project number, project name,
and the number of employees who work on that project.
SELECT PNUMBER, PNAME, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE PNUMBER=PNO
GROUP BY PNUMBER, PNAME
Grouping & Aggregate functions are applied after the joining two relations Slide
8-48
Select clause can only include the grouping attributes and aggregate functions
HAVING-CLAUSE
HAVING-clause specify a selection condition on groups
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.
SELECT PNUMBER, PNAME, COUNT (*)
FROM PROJECT JOIN WORKS_ON ON
PNUMBER=PNO Slide
GROUP BY PNUMBER, PNAME 8-49
HAVING COUNT (*) > 2
HAVING-CLAUSE
Slide
8-50
HAVING-CLAUSE
Slide
8-51
General form of Grouping and Aggregation
Evaluation steps:
SELECT S Evaluate FROM-WHERE,
FROM R1,…,Rn apply condition C1
WHERE C1
GROUP BY a1,…,ak Group by the attributes a1,…,ak
HAVING C2
Apply condition C2 to each group
(may have aggregates)
Compute aggregates in S and return
the result