Algebra - To - SQL 2023 2 1
Algebra - To - SQL 2023 2 1
SQL Queries
◼ Basic SQL structure
SELECT A1, A2, …, An
FROM R1, R2, …, Rm
WHERE P
where
Ai are attributes from…
Ri which are relations
P is a predicate
• can replace Ai’s if all attributes are to be retrieved
• A1, A2, …, An(F)
• F is an expression with R1, R2, …, Rm as
2
From Algebra to SQL
Types of Queries
◼ Simple (Level 1)
⚫ Retrieve tuples from a table that match a search criteria
⚫ The table can be an existing table in the database
schema or constructed using tables in the schema
⚫ Level 1 queries are expresses using Selection,
Projection and Join
◼ Complex (Level 2)
⚫ Retrieve tuples from a reference table R that do not
qualify (R1)
⚫ Compute R-R1 to get the answer
4
Example Queries
Emp (Eno, Ename, Title, City) (note we added City)
Project(Pno, Pname, Budget, City) (note we added City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ List names of all employees.
⚫ Ename(Emp)
⚫ SELECT Ename
FROM EMP
◼ List names of all projects together with their
budgets.
⚫ Pname,Budget(Project)
⚫ SELECT Pname, Budget
FROM Project 5
Example Queries
Emp (Eno, Ename, Title, City) (note we added City)
Project(Pno, Pname, Budget, City) (note we added City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find all job titles to which at least one employee has been
hired.
⚫ Title(Emp)
⚫ SELECT Title
FROM EMP
◼ Find the records of all employees who live in Newark.
⚫ City=‘Newark’(Emp)
⚫ SELECT *
FROM EMP
Where City = ‘Newark’
6
6
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
8
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find all cities that has a project but no employees
who work there.
◼ City(Project) − City(Emp)
⚫ SELECT City
FROM Project
Minus
(SELECT City
FROM Emp)
9
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find the names of all projects with budgets greater
than $225,000.
⚫ Pname(Budget>225000 (Project))
⚫ SELECT Pname
FROM Project
WHERE Budget>225000
10
10
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ List the names and budgets of projects on which
employee E1 works.
⚫ Pname, Budget(Project (Eno=‘E1’ (Works)))
⚫ Pname, Budget(Emp.Eno=Works.Eno (Project Eno=‘E1’
(Works)))
⚫ SELECT Pname, Budget
FROM Project P, Works W
WHERE W.PNO=P.PNO
AND W.ENO=‘E1’ 11
11
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find the name of all the employees who live in a city
where no project is located.
⚫ Ename(Emp (City(Emp) − City(Project))
⚫ SELECT E.Ename
FROM Emp E
WHERE E.City NOT IN
(SELECT City
FROM Project )
12
12
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find the name of all the employees who live in a city
where no project is located.
⚫ Ename(Emp (City(Emp) − City(Project))
⚫ SELECT E.Ename
FROM Emp E
WHERE NOT EXISTS
(SELECT *
FROM Project P
WHERE P.City= E.City) )
13
13
Example Queries
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find pairs of employees working on the same
projects.
⚫ Ename(Works Pno=PnoWorks)
⚫ Ename(Works Pno=Pno^Eno!=EnoWorks)
⚫ Ename(Works Pno=Pno^Eno<EnoWorks)
⚫ SELECT W1.Eno, W2.Eno
FROM Works W1, Works W2
WHERE W1.Pno=W2.Pno
And W1.Eno<W2.Eno
14
14
Division (Quotient)
Given relations
⚫ R of degree k1 (R = {A1,…,Ak1})
⚫ S of degree k2 (S = {B1,…,Bk2})
Let A = {A1,…,Ak1} [i.e., R(A)]and B = {B1,…,Bk2}
[i.e., S(B)] and B A.
Then, T = R ÷ S gives T of degree k1-k2 [i.e., T(Y) where
Y = A-B] such that for a tuple t to appear in T, the
values in t must appear in R in combination with every
tuple in S.
15
15
Division (cont’d)
R S
X Y X
x1 y1 x1
x2 y1 x2
x3 y1 X3
T1 Y(R)
x4 y1 x4
T2 Y((S T1) − R)
x1 y2 T T1 − T2
x3 y2
T
x2 y3
Y
x3 y3
y1
x4 y3
y4
x1 y4
x2 y4
x3 y4
x4 y4
16
16
Complex Queries - Division
Emp (Eno, Ename, Title, City)
Project(Pno, Pname, Budget, City)
Pay(Title, Salary)
Works(Eno, Pno, Resp, Dur)
◼ Find all the employees who work on every project
⚫ Not(Employees NOT working on at least 1 project).
⚫ Eno, Pno(Works) ÷ Pno(Project)
SELECT W1.Eno
FROM Works W1
WHERE W1.Eno NOT IN
(SELECT W2.Eno
FROM Works W2, Project P
WHERE W2.ENO NOT IN
(SELECT W3.ENO
FROMWorks W3
WHERE P.PNO=W3.PNO))
17
17
18
Complex Queries - NOT Division
branch (B-name, Address, City, Assets)
customer(C-name, Street, City)
deposit(Acc-number, C-name, B-name, Balance)
borrow(Acc-number, C-name, B-name, Amount)
19
20
Complex Queries - Division
branch (B-name, Address, City, Assets)
customer(C-name, Street, City)
deposit(Acc-number, C-name, B-name, Balance)
borrow(Acc-number, C-name, B-name, Amount)
◼ Find all the customers who have deposits in every
branch of the bank.
⚫ NOT (Customers who do not have a deposit in at least one
branch)
SELECT *
FROM customer
WHERE C-name NOT IN
(SELECT C.C-name
FROM branch B, Customer C
WHERE C.C-name NOT IN
(SELECT D.C-name
FROM deposit D
WHERE B.B-name=D.B-name))
21
21