Employees in Both Departments
Which queries correctly find employees who work in both department 'A' and 'B' (they may also work in other departments)?
-- Query 1: Self-join
SELECT e.ename, e.age
FROM Emp e
JOIN Works w1 ON e.eid = w1.eid
JOIN Dept d1 ON w1.did = d1.did
JOIN Works w2 ON e.eid = w2.eid
JOIN Dept d2 ON w2.did = d2.did
WHERE d1.dname = 'A' AND d2.dname = 'B';
-- Query 2: HAVING COUNT
SELECT e.ename, e.age
FROM Emp e
JOIN Works w ON e.eid = w.eid
JOIN Dept d ON w.did = d.did
WHERE d.dname IN ('A', 'B')
GROUP BY e.eid, e.ename, e.age
HAVING COUNT(DISTINCT d.dname) = 2;
-- Query 3: EXISTS
SELECT e.ename, e.age
FROM Emp e
WHERE EXISTS (
SELECT 1 FROM Works w JOIN Dept d ON w.did = d.did
WHERE w.eid = e.eid AND d.dname = 'A'
)
AND EXISTS (
SELECT 1 FROM Works w JOIN Dept d ON w.did = d.did
WHERE w.eid = e.eid AND d.dname = 'B'
);
Sign in to answer questions and track your progress
Sign In