Sub Query Practice Problems

3-Table SQL Subquery Practice — Department, Employee, Project (20 Examples)

3-Table SQL Subquery Practice — Department / Employee / Project (20 Examples)

This guide contains 20 ready-to-run subquery problems (with schema + sample data). Use Oracle, PostgreSQL or MySQL (minor syntax tweaks may apply).

Schema

-- Department table
CREATE TABLE Department (
  dept_id INT PRIMARY KEY,
  dept_name VARCHAR2(50)
);

-- Employee table
CREATE TABLE Employee (
  emp_id INT PRIMARY KEY,
  emp_name VARCHAR2(50),
  salary NUMBER(10,2),
  dept_id INT,
  hire_date DATE,
  FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
);

-- Project table
CREATE TABLE Project (
  proj_id INT PRIMARY KEY,
  proj_name VARCHAR2(50),
  dept_id INT,
  budget NUMBER(12,2),
  FOREIGN KEY (dept_id) REFERENCES Department(dept_id)
);

Sample Data

-- Departments
INSERT INTO Department VALUES (1, 'HR');
INSERT INTO Department VALUES (2, 'Finance');
INSERT INTO Department VALUES (3, 'IT');
INSERT INTO Department VALUES (4, 'Marketing');


-- Employees (Bangladeshi names)
INSERT INTO Employee VALUES (101, 'Ahsan', 55000, 1, TO_DATE('2020-01-15','YYYY-MM-DD'));
INSERT INTO Employee VALUES (102, 'Shuvo', 72000, 2, TO_DATE('2019-03-12','YYYY-MM-DD'));
INSERT INTO Employee VALUES (103, 'Mehedi', 48000, 3, TO_DATE('2021-06-01','YYYY-MM-DD'));
INSERT INTO Employee VALUES (104, 'Tania', 60000, 2, TO_DATE('2018-11-23','YYYY-MM-DD'));
INSERT INTO Employee VALUES (105, 'Farzana', 90000, 3, TO_DATE('2017-09-10','YYYY-MM-DD'));
INSERT INTO Employee VALUES (106, 'Sabbir', 40000, 4, TO_DATE('2022-02-05','YYYY-MM-DD'));
INSERT INTO Employee VALUES (107, 'Nusrat', 75000, 1, TO_DATE('2020-05-25','YYYY-MM-DD'));


-- Projects
INSERT INTO Project VALUES (201, 'Payroll System', 2, 150000);
INSERT INTO Project VALUES (202, 'Recruitment Portal', 1, 80000);
INSERT INTO Project VALUES (203, 'ERP Upgrade', 3, 250000);
INSERT INTO Project VALUES (204, 'Ad Campaign', 4, 60000);
INSERT INTO Project VALUES (205, 'AI Research', 3, 500000);

20 Practice Subquery Problems

Try solving these on your own first. Each block shows the full SQL solution.

1. Employees with salary above the overall average
SELECT emp_name, salary
FROM Employee
WHERE salary > (SELECT AVG(salary) FROM Employee);
2. Employees in the same department as 'Eva'
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id = (SELECT dept_id FROM Employee WHERE emp_name = 'Eva');
3. Highest paid employee in each department
SELECT emp_name, dept_id, salary
FROM Employee e
WHERE salary = (SELECT MAX(salary) FROM Employee WHERE dept_id = e.dept_id);
4. Departments with no employees
SELECT dept_name
FROM Department
WHERE dept_id NOT IN (SELECT DISTINCT dept_id FROM Employee);
5. Projects in departments where average salary > 60,000
SELECT proj_name, dept_id, budget
FROM Project
WHERE dept_id IN (
  SELECT dept_id
  FROM Employee
  GROUP BY dept_id
  HAVING AVG(salary) > 60000
);
6. Employees in the department with the largest project budget
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id = (
  SELECT dept_id
  FROM Project
  WHERE budget = (SELECT MAX(budget) FROM Project)
);
7. Employees who joined before the earliest IT hire
SELECT emp_name, hire_date
FROM Employee
WHERE hire_date < (
  SELECT MIN(hire_date)
  FROM Employee
  WHERE dept_id = (SELECT dept_id FROM Department WHERE dept_name = 'IT')
);
8. Employees in departments that have at least 2 projects
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id IN (
  SELECT dept_id
  FROM Project
  GROUP BY dept_id
  HAVING COUNT(proj_id) >= 2
);
9. Employees in departments with a project budget < 70,000
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id IN (
  SELECT dept_id
  FROM Project
  WHERE budget < 70000
);
10. Departments that have projects but no employees
SELECT dept_name
FROM Department
WHERE dept_id IN (SELECT dept_id FROM Project)
  AND dept_id NOT IN (SELECT dept_id FROM Employee);
11. Employees who earn more than the highest-paid HR employee
SELECT emp_name, salary
FROM Employee
WHERE salary > (
  SELECT MAX(salary)
  FROM Employee
  WHERE dept_id = (SELECT dept_id FROM Department WHERE dept_name = 'HR')
);
12. Projects in the department with the maximum number of employees
SELECT proj_name, budget
FROM Project
WHERE dept_id = (
  SELECT dept_id
  FROM Employee
  GROUP BY dept_id
  ORDER BY COUNT(emp_id) DESC
  FETCH FIRST 1 ROWS ONLY
);
13. Employees in departments where total project budget > 300,000
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id IN (
  SELECT dept_id
  FROM Project
  GROUP BY dept_id
  HAVING SUM(budget) > 300000
);
14. Employees whose department has both employees and projects
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id IN (
  SELECT dept_id FROM Employee
  INTERSECT
  SELECT dept_id FROM Project
);
15. Employees in the department that owns the most expensive project
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id = (
  SELECT dept_id
  FROM Project
  WHERE budget = (SELECT MAX(budget) FROM Project)
);
16. Employees whose department has the least total project budget
SELECT emp_name, dept_id
FROM Employee
WHERE dept_id = (
  SELECT dept_id
  FROM Project
  GROUP BY dept_id
  ORDER BY SUM(budget) ASC
  FETCH FIRST 1 ROWS ONLY
);
17. Projects managed by departments with more than 3 employees
SELECT proj_name, budget
FROM Project
WHERE dept_id IN (
  SELECT dept_id
  FROM Employee
  GROUP BY dept_id
  HAVING COUNT(emp_id) > 3
);
18. Employees who joined after all HR employees
SELECT emp_name, hire_date
FROM Employee
WHERE hire_date > (
  SELECT MAX(hire_date)
  FROM Employee
  WHERE dept_id = (SELECT dept_id FROM Department WHERE dept_name = 'HR')
);
19. Youngest employee (latest hire_date) in each department
SELECT emp_name, dept_id, hire_date
FROM Employee e
WHERE hire_date = (
  SELECT MAX(hire_date)
  FROM Employee
  WHERE dept_id = e.dept_id
);
20. Projects in the department with the highest average salary
SELECT proj_name, budget
FROM Project
WHERE dept_id = (
  SELECT dept_id
  FROM Employee
  GROUP BY dept_id
  ORDER BY AVG(salary) DESC
  FETCH FIRST 1 ROWS ONLY
);

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন