DB_SQL 표현(38개 예시)
데이터베이스 성적 92 나왓다.
싹다 SQL 문제였는데, 1년전 대비 엄청 늘었구나!

1. 'John Smith' 사원의 생일과 주소를 검색하시오.
SELECT Bdate, Address
FROM Employee
WHERE Fname = “John” and Lname = "Smith"
2. 'Research' 부서에 근무하는 모든 사원의 이름과 주소를 검색하시오. (Case 3)
1. - New SQL -
SELECT E.Fname, E.Lname, E.Address
FROM Employee E
WHERE E.Dno=(SELECT D.Dnumber
FROM Department D
WHERE D.Dname="Research");
2.(정답)
select E.Fname, E.Lname, E.Address
from employee E, department D
where D.dname = 'Research' and D.dnumber = E.dno
3.(정답)
select Fname, Lname, Address
from (Employee inner join department
on employee.Dno = department.Dnumber)
where Dname = 'Research'
(오답)
Select E.Fname, E.Lname, E.Address
From Employee E, Department D
Where D.Mgr_ID = E.ID and Dname = 'Research'
3. 'Stafford'에서 진행되는 프로젝트에 대해 프로젝트 번호, 그 프로젝트를 담당하는 부서번호, 그 부서의 관리자의 이름, 주소, 생년월일을 검색하시오. (숨겨진 Department)
(정답)
Select P.Pnumber, P.Dnum, E.Lname, E.Address, E.Bdate
From Department D, Project P, Employee E
Where P.Dnum = D.Dnumber and
D.Mgr_ID = E.ID and
P.Plocation = 'Stafford'
SELECT P.Pnumber, D.Dnumber, E.Fname, E.Lname, E.Address, E.Bdate
FROM Project P, Department D, Employee E
WHERE Plocation = 'Stafford' and
P.Dnum = D.Dnumber and
D.Mgr_ID = E.ID
(오답) - 숨겨진 Department
Select P.Pnumber, P.Dnum, E.Lname, E.Address, E.Bdate
From Project P, Employee E
Where P.Plocation = "Stafford" and P.Dnum = E.Dno
(오답) - (Department 부서번호 연동 안함, "D.Dnumber = P.Dnum") -
SELECT A.Pnumber, A.Dnum, B.Fname, B.Lname, B.Address, B.Bdate
FROM Project as A, Employee as B
WHERE A.Plocation = “Stafford”
4. 각 사원의 이름과 그리고 그 사원의 직속 상사(supervisor)의 이름을 검색하시오.
(정답)
SELECT E.Fname, E.Lname, S.Fname, S.Lname
FROM Employee E, Employee S
Where E.Super_ID = S.ID
Select A.Fname, A.Lname, B.Fname, B.Lname
From Employee A, Employee B
Where A.Super_ID = B.ID
(오답)
SELECT E.Fname, E.Lname, S.Fname, S.Lname
FROM Employee E, Employee S
Where E.ID = S.Super_ID (둘이 바뀜)
5. 모든 사원의 ID를 검색하시오.
SELECT ID
FROM Employee
6. 사원의 ID와 부서의 이름의 가능한 모든 조합을 검색하시오.
SELECT ID, Dname
FROM Employee, Department
7. 부서번호 5에 근무하는 모든 사원의 모든 속성 정보를 검색하시오.
(정답)
SELECT *
FROM Employee
Where Dno = 5;
(오답) - 조건 = 부서번호 5에 근무 -
SELECT *
FROM Employee a, Department b
WHERE a.Dno = b.Dnumber
8. 사원의 모든 급여(중복 포함) 정보를 검색하시오.
SELECT all Salary
FROM Employee
(기존 답)
SELECT Salary
FROM Employee
9. 사원의 모든 급여(중복 제거) 정보를 검색하시오.
SELECT DISTINCT Salary
FROM Employee
10. ‘Smith’라는 사원이 직접 참여하고 있는 프로젝트 번호 또는 관리자로 일하는 부서에서 진행하고 있는 프로젝트의 번호를 검색하시오. (숨겨진 Department, Works_On)
(정답)
(Select Distinct P.Pnumber
From Project P, Department D, Employee E
Where P.Dnum = D.Dnumber and
D.Mgr_ID = E.ID and
E.lname = 'Smith')
UNION
(Select Distinct P.Pnumber
From Project P, Works_On W, Employee E
Where P.Pnumber = W.Pno and
W.EmpID = E.ID and
E.lname = 'smith')
(정답 2)
SELECT P.Pnumber
FROM Project P, Works_On W, Employee E
Where P.Pnumber = W.Pno and
W.EmpID = E.ID and
E.Lname = 'Smith'
UNION
SELECT P.Pnumber
FROM Project P, Department D, Employee E
Where P.Dnum = D.Dnumber and
D.Mgr_ID = E.ID and
E.Lname = 'Smith'
(오답)
Select Distinct P.Pnumber
From Project P, Department D, Employee E
Where P.Dnum = E.Dno and D.Dname = "Research" and E.Lname = "Smith"
Union
Select Distinct P.Pnumber
From Project P, Employee E, Works_on W
Where P.Dnum = E.Dno and W.pno = P.Pnumber and E.Lname = "Smith"
(오답)
SELECT Pnumber
FROM Project
WHERE Dnum = (SELECT A.Dno, C.Dnumber FROM A.Employee, C.Department
WHERE (A.Lname = “Smith” OR C.Dname = “Administration”)
11. ‘Houston’에 사는 사원들의 이름을 검색하시오. (address)
(정답)
Select Fname, Lname
From Employee
Where address like '*Houston'
(오답)
SELECT A.Fname, A.Lname
FROM Dept_Locations B, Employee A
WHERE B.Dlocation = “Houston”
12. ‘Houston’에 살지 않는 사원들의 이름을 검색하시오. (address)
(정답)
Select Fname, Lname
From Employee
Where address not like '*Houston'
(오답)
SELECT A.Fname, A.Lname
FROM B.Dept_Locations, A.Employee
WHERE B.Dlocation <> “Houston”
13. 1950년대에 태어난 사원의 이름과 생일을 검색하시오.
(정답)
Select Fname, Lname
From Employee
Where Bdate like '195*'
SELECT Fname, Lname, Bdate
FROM Employee
WHERE Year(Bdate) Between "1950" and "1959"
14. 1970년 이전에 태어난 사원의 이름과 생일을 검색하시오.
SELECT Fname, Lname, Bdate
FROM Employee
WHERE Year(Bdate) < "1970"
15. 1965년부터 1975년 사이에 태어난 사원의 이름과 생일을 검색하시오.
SELECT Fname, Lname, Bdate
FROM Employee
WHERE Year(Bdate) Between "1965" and "1975"
16. ‘ProductX’ 프로젝트에 참여하는 사원의 이름과, 급여를 10% 증액하여 제시하라.
(숨겨진 Works_on)
(정답)
Select Fname, Lname, 1.1*salary as Increased_sal
From Employee E, Works_on W, Project P
Where E.ID = W.EmpID and
W.pno = P.pnumber and
P.pname = 'ProductX'
(오답)
SELECT Fname, Lname, (1.1)*Salary
FROM Employee
WHERE Dno = (SELECT Dnum FROM Project
WHERE B.Pname = “ProductX”)
17. 소속부서가 5번이고 급여가 30000에서 40000 사이인 사원의 이름과 급여, 그리고 생년월일 정보를 검색하시오.
SELECT Fname, Lname, Salary, Bdate
FROM Employee
WHERE Dno = 5 and (Salary between 3000 and 4000)
18. 부서 이름, 사원 이름, 프로젝트 이름의 리스트를 각 부서의 이름순으로 그리고 같은 부서에서는 이름(Lname, Fname) 순으로 검색하시오. (숨겨진 Works_on(W.Pno) = 프로젝트(Project.Pnumber))
(정답)
Select D.Dname, E.Lname, E.Fname, P.Pname
From Department D, Employee E, Works_on W, Project P
Where D.dnumber = E.dno and
E.Id = W.EmpID and
W.pno = P.pnumber
order by D.Dname DESC, E.Lname, E.Fname
(오답)
SELECT B.Dname, A.Fname, A.Lname, C.Pname
FROM B.Department, A.Employee, C.Project
ORDER BY C.Pname, A.Lname, A.Fname
19. 직속 상사가 없는 사원의 이름을 검색하시오.
SELECT Fname, Lname
FROM Employee
WHERE Super_ID IS NULL
20. 부서번호 5에 근무하는 모든 사원보다 급여가 많은 사원의 이름을 검색하시오.
SELECT Fname, Lname
FROM Employee
WHERE Salary > all (Select Salary From Employee Where Dno = “5”)
21. 사원의 Fname과 같은 이름을 갖고 성별이 같은 부양가족을 가진 사원의 이름을 검색하시오.
(Case 3)
SELECT E.Fname, E.Lname
FROM Employee E, Dependent D
WHERE E.ID = D.EmpID and
E.Fname = D.DepName and
E.Sex = D.Sex;
(정답1)
Select E.Fname, E.Lname
From Employee E
Where E.ID in (Select D.EmpID
From Dependent D
Where E.Fname = D.Depname and
E.Sex = D.Sex
(정답2)
Select Fname, Lname
From Employee E
Where Exists (Select *
From Dependent
Where ID = empID and
E.sex = sex and
E.Fname = depName)
22. 부양가족이 없는 사원의 이름을 검색하시오.
SELECT Fname, Lname
FROM Employee A
WHERE NOT EXISTS
(SELECT * FROM Dependent B
WHERE A.ID = B.EmpID)
Select E.Fname, E.Lname
From Employee E
Where Not Exists (Select * From Dependent D Where E.ID = D.EmpID )
23. 부양가족이 한 명이라도 있는 관리자의 이름을 검색하시오. (Case 2)
SELECT Fname, Lname
FROM Employee
WHERE EXISTS (SELECT *
FROM Dependent
WHERE ID = EmpID) and
EXISTS (SELECT *
FROM Department
WHERE ID = Mgr_ID);
(정답1)
Select E.Fname, E.Lname
From Employee E
Where E.ID In (Select Distinct D.EmpID
From Dependent D, Department T
Where D.EmpID = T.Mgr_ID);
24. 프로젝트 번호 1, 2, 3에 참여하고 있는 모든 사원의 ID를 검색하시오.
(최근)
SELECT Distinct EmpID
FROM Works_On
WHERE PNO IN (1, 2, 3);
(기존)
SELECT EmpID
FROM Works_On
WHERE PNO IN (1, 2, 3);
25. 모든 사원에 대해서 직속 상관의 이름을 함께 검색하여 제시하시오. 만일 직속 상관이
없는 경우에는 사원의 이름과 직속 상관 이름 부분은 NULL로 표현
SELECT A.Fname, A.Lname, B.Fname, B.Lname
FROM Employee A
LEFT Outer JOIN Employee B
WHERE A.Super_ID = B.ID
26. 전체 사원의 급여 합, 최대 급여, 최소 급여, 평균 급여를 검색하시오.
SELECT Sum(Salary), MAX(Salary), MIN(Salary), AVG(Salary)
FROM Employee
27. ‘Research’ 부서 사원의 급여 합, 최대 급여, 최소 급여, 평균 급여를 검색하시오.
(정답)
SELECT Sum(Salary), MAX(Salary), MIN(Salary), AVG(Salary)
FROM (Employee E INNER JOIN Department D
ON E.Dno = D.Dnumber)
WHERE D.Dname = 'Research'
Select Sum(Salary), Max(Salary), Min(Salary), Avg(Salary)
From (Employee E INNER JOIN Department D ON E.Dno = D.Dnumber)
Where D.Dname = "Research"
- New SQL -
SELECT Sum(Salary), MAX(Salary), MIN(Salary), AVG(Salary)
FROM Employee E, Department D
WHERE E.Dno = D.Dnumber and D.Dname = 'Research'
28. 전체 사원의 수를 검색하시오.
SELECT COUNT(*)
FROM Employee
29. ‘Research’ 부서의 사원 수를 검색하시오.
(정답)
SELECT COUNT(*)
FROM Employee E, Department D
WHERE E.Dno = D.Dnumber and D.Dname = 'Research'
- New SQL -
SELECT COUNT(*)
FROM (Employee E INNER JOIN Department D ON E.Dno = D.Dnumber)
WHERE D.Dname = 'Research'
(오답)
SELECT COUNT(*)
FROM Employee
JOIN Department ON Dno = Dnumber
WHERE Dname = “Research”
30. 소속부서별로 부서번호, 사원의 수, 평균 급여를 검색하시오.
SELECT A.Dno, Count(*), AVG(Salary)
FROM Employee A
GROUP BY A.Dno;
31. 각 프로젝트별로 (프로젝트 번호, 프로젝트 이름), 그리고 참여 사원의 수를 검색하시오. (숨겨진 Works_on)
(정답)
SELECT P.Pnumber, P.Pname, Count(*)
FROM Project P, Works_On W
WHERE P.Pnumber = W.Pno
GROUP BY Pnumber, Pname
(오답)
SELECT P.Pnumber, P.Pname, Count(*)
FROM Project P, Works_On W, Employee E
Where P.Pnumber = W.Pno and
W.EmpID = E.ID
Group by P.Pnumber, P.Pname
SELECT P.Pnumber, P.Pname, COUNT(*)
FROM Project P
GROUP BY Pnumber, Pname
SELECT P.Pname, P.Pnumber, Count(W.Pno)
FROM Project P, Works_On W
WHERE P.Pname = W.Pno
GROUP BY P.Pnumber
32. 2명 이상의 사원이 참여하는 프로젝트에 대해서 프로젝트 번호, 프로젝트 이름 그리고
참여 사원의 수를 검색하시오.
SELECT Pname, Pnumber, Count(*)
FROM Project, Works_On
WHERE Pnumber = Pno
GROUP BY Pnumber, Pname
HAVING Count(*) > 2:
33. 각 프로젝트에 대해서 프로젝트 번호, 프로젝트 이름 그리고 부서번호 5번에서 참여하는
사원의 수를 검색하시오.
SELECT W.Pno, P.Pname, Count(*)
FROM Employee E, Works_on W, Project P
WHERE E.dno = 5 and W.EmpID = E.ID and P.Pnumber = W.Pno
GROUP BY W.Pno, P.Pname;
34. (부서별로 급여가 30000 이상인 사원의 수를) 부서번호와 그런 조건을 만족하는 사원의 수를 검색하시오.
(정답)
SELECT Dno, Count(*)
FROM Employee
Where Salary >= 30000
GROUP BY Dno;
(오답) - Where절에 들어가야하는 문항이 Having절에 들어감
SELECT E.Dno, Count(*)
FROM Employee E
GROUP BY Dno;
HAVING Sum(Salary) >= 30000
SELECT D.Dnumber, Count(*)
FROM Department AS D, Employee AS E
WHERE (E.Salary)>=30000
GROUP BY D.Dnumber;
35. (부서별로 급여가 30000 이상인 사원을 2명 이상 갖고 있는) 부서번호와 그런 사원의 수를 검색하시오.
(정답)
SELECT Dno, Count(*)
FROM Employee
Where Salary >= 30000
GROUP BY Dno
HAVING Count(*) >= 2
(오답) - Where절에 들어가야하는 문항이 Having절에 들어감
SELECT Dno, Count(*)
FROM Employee
WHERE Count(*) >= 2
GROUP BY Dno;
(HAVING Sum(Salary) >= 30000)
36. (사원의 수가 2명을 초과하는 부서에 대해서) 그 부서에서 (부서별로) 급여가 30000 이상인 사원의
수를 검색하시오. (어려움)
(정답)
Select Dno, Count(*)
From Employee
Where Salary >= 30000 and
Dno in (Select dno
From Employee
Group by Dno
Having Count(*) > 2)
Group By Dno;
(오답) Where절에는 집계함수 사용 불가
Select Dno, Count(*)
From Employee
Where Salary >= 30000 and
Dno in (Select dno From Employee Where Count(*) >= 2)
Group by Dno;
(오답)
SELECT Count(*)
FROM Employee
WHERE Count(*) > 2
GROUP BY Dno;
HAVING Sum(Salary) >= 30000
37. (사원의 수가 2명을 초과하는 부서에 대해서) (부서번호, 부서이름(별로)), 그리고 그 부서에서 급
여가 30000 이상인 사원의 수를 검색하시오. (어려움)
(정답)
Select Dnumber, Dname, Count(*)
From Department, Employee
Where Dnumber = Dno and
Salary >= 30000 and
Dno in (Select dno
From Employee
Group by Dno
Having Count(*) > 2)
Group by Dnumber, Dname
Select D.Dnumber, D.Dname, Count(*)
From Employee E, Department D
Where E.Salary >= 30000 and D.Dnumber = E.Dno and
Dno in (Select dno From Employee Group by Dno Having Count(*) >= 2)
Group by Dno;
SELECT D.DNUMBER, D.DNAME, COUNT(*)
FROM EMPLOYEE E, DEPARTMENT D
WHERE D.DNUMBER = E.DNO AND
E.SALARY >= 30000 AND
E.DNO IN (SELECT E.DNO FROM EMPLOYEE E GROUP BY E.DNO HAVING COUNT(*) > 2)
GROUP BY DNUMBER, DNAME
(오답)
Select D.Dnumber, D.Dname, Count(*)
From Employee E, Department D
Where E.Salary >= 30000 and D.Dnumber = E.Dno and
Dno in (Select dno From Employee Group by Dno Having Count(*) > 2)
Group by Dno;
(오답)
Select D.Dnumber, D.Dname, Count(*)
From Employee E, Department D
Where E.Salary >= 30000 and D.number = E.Dno
Exists (Select dno From Employee Group by Dno Having Count(*) > 2)
Group by Dno;
(오답)
SELECT A.Dno, B.Dname, Count(*)
FROM Employee A, Department B
WHERE Count(*) > 2 AND A.Dno = B.Dnumber
GROUP BY Dno;
HAVING Sum(Salary) >= 30000
38. (자신이 속한 부서의 사원들의 평균 급여보다) 많은 급여를 받는 사원들의 이름, 부서번호,
급여를 검색하시오.
(정답)
SELECT Fname, Lname, Dno, Salary
FROM Employee E
WHERE Salary > (SELECT AVG(A.Salary)
FROM Employee A
Where E.Dno = A.Dno)
(오답) E.Dno = A.Dno (계속 잊어버림)
SELECT Fname, Lname, Dno, Salary
FROM EMPLOYEE A
Where Salary > (SELECT AVG(Salary) From Employee B GROUP BY Dno)
SELECT Fname, Lname, Dno, Salary
FROM Employee
WHERE Salary > (SELECT AVG(Salary)
FROM Employee
GROUP BY Dno;
HAVING AVG(Salary) >= 30000)