summaryrefslogtreecommitdiff
path: root/assignments/exam/README.md
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-04-30 14:29:53 -0600
committermo khan <mo.khan@gmail.com>2020-04-30 14:29:53 -0600
commit84840049606d9ca363f4db384d3865754b67b012 (patch)
tree95c88676d410bc0a177e92301ea8b115dcd8c56e /assignments/exam/README.md
parentf27d533f1f774a9043fa631f1938c7e86a1f9087 (diff)
write some quick sql
Diffstat (limited to 'assignments/exam/README.md')
-rw-r--r--assignments/exam/README.md98
1 files changed, 98 insertions, 0 deletions
diff --git a/assignments/exam/README.md b/assignments/exam/README.md
index 26356c6..1f23031 100644
--- a/assignments/exam/README.md
+++ b/assignments/exam/README.md
@@ -150,3 +150,101 @@ maintenance(_id_, technician_id, plane_id, type)
| |
------------------
```
+
+## 3
+
+Consider the following three relations:
+
+```text
+Manager(name, address, specialization, salary)
+Employee(name, address, rank, salary)
+Project (proj_num, emp_name, manager_name, duration)
+```
+
+Write the SQL queries corresponding to the following questions.
+
+a. Find the number of different employees who are assigned to projects.
+
+```sql
+SELECT count(distinct(e.name))
+FROM Employee e
+WHERE e.name IN (SELECT DISTINCT(emp_name) FROM PROJECT);
+```
+or
+
+```sql
+SELECT count(distinct(e.name))
+FROM Employee e
+INNER JOIN Project p on p.emp_name = e.name;
+```
+
+b. Find the managers' average salary.
+
+```sql
+SELECT AVG(m.salary)
+FROM Manager m;
+```
+
+c. List the name and number of projects supervised by each manager.
+
+```sql
+SELECT p.manager_name, count(p.proj_numb)
+FROM Project p
+GROUP BY p.manager_name;
+```
+
+d. Show the names and salaries of managers who supervise employees of rank "beginner" in ascending
+order of salary (use a subquery).
+
+```sql
+SELECT m.name, m.salary
+FROM Manager m
+WHERE m.name in (
+ SELECT p.manager_name
+ FROM Project p
+ INNER JOIN Employee e on e.name = p.emp_name
+ WHERE e.rank = 'beginner'
+)
+ORDER BY m.salary ASC;
+```
+
+or
+
+```sql
+SELECT m.name, m.salary
+FROM Manager m
+WHERE m.name in (
+ SELECT p.manager_name
+ FROM Project p
+ WHERE p.emp_name IN (
+ SELECT e.name
+ FROM Employee e where e.rank = 'beginner'
+ )
+)
+ORDER BY m.salary ASC;
+```
+
+e. Show the names and salaries of managers who supervise employees of rank "beginner" in
+descending order of salary (do not use a subquery).
+
+```sql
+SELECT m.name, m.salary
+FROM Manager m
+INNER JOIN Project p on p.manager_name = m.name
+INNER JOIN Employee e on e.name = p.emp_name
+WHERE e.rank = 'beginner'
+ORDER BY m.salary ASC;
+```
+
+f. Show the names and salaries of supervisors who supervise more than 20 employees.
+
+```sql
+SELECT m.name, m.salary
+FROM Manager m
+WHERE m.name IN (
+ SELECT p.manager_name
+ FROM Project p
+ GROUP BY p.manager_name
+ HAVING COUNT(p.manager_name) > 20
+):
+```