[Database] SELECT문 연습

PSLeon ㅣ 2023. 10. 7. 13:29

반응형

1. BOSTON에 있는 부서의 이름은 무엇인가

1. SQL
SELECT dname
FROM dept
WHERE loc = 'BOSTON';

 

2. 담당 업무가 ANALYST인 사원의 이름, 입사일자를 보이시오

1. SQL
SELECT ename, hiredate
FROM emp
WHERE job = 'ANALYST';

 

3. 부서번호가 10인 사원의 이름과 입사일자를 보이시오

1. SQL
SELECT ename, hiredate
FROM emp
WHERE deptno = 10;

 

4. 매니저인 사원의 사원번호를 중복을 제거하고 보이시오

1. SQL
SELECT DISTINCT empno
FROM emp
WHERE job = 'MANAGER';

 

5. 담당업무가 ANALYST인 사원들의 모든 정보를 보이시오

1. SQL
SELECT *
FROM emp
WHERE job = 'ANALYST';

 

6. 연봉이 3000에서 4000 사이인 사원의 이름, 연봉을 보이시오

1. SQL
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 3000 AND 4000;

 

7. 입사일자가 19811~ 6월이 아닌 사원의 이름, 입사일자를 보이시오

1. SQL
SELECT ename, hiredate
FROM emp
WHERE hiredate NOT BETWEEN '1981-01-01' AND '1981-06-30';

 

8. 소속 부서 번호가 10 또는 20인 사원의 사원번호, 이름, 부서번호를 보이시오

1. SQL
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 10 OR deptno = 20;

 

9. 사장의 이름을 보이시오 (힌트: 사장의 담당업무는 PRESIDENT이다)

1. SQL
SELECT ename
FROM emp
WHERE job = 'PRESIDENT';

 

10. 담당업무가 CLERK 가 아닌 사원들의 이름, 담당업무를 보이시오

1. SQL
SELECT ename, job
FROM emp
WHERE job <> 'CLERK';

 

11. 연봉이 3000 에서 4000 사이이거나 담당업무가 CLERK인 사원의 이름, 연봉을 보이시오

1. SQL
SELECT ename, sal
FROM emp
WHERE (sal BETWEEN 3000 AND 4000) OR (job = 'CLERK');

 

12. 부서번호가 20인 사원 중에서 담당업무가 CLERK 이고 매니저의 사원번호가 7902인 사원의 이름을 보이시오

1. SQL
SELECT ename
FROM emp
WHERE (deptno = 20) AND (job = 'CLERK') AND (mgr = 7902);

 

13. 담당 업무가 ANALYST, CLERK, MANAGER 중의 하나인 사원의 이름, 담당업무, 급여를 보이시오 (IN 또는 NOT IN을 사용하시오)

1. SQL
SELECT ename, job, sal
FROM emp
WHERE job IN ('ANALYST', 'CLERK', 'MANAGER');

 

14. 담당 업무가 ANALYST, MANAGER, SALESMAN 중의 하나가 아닌 사원의 이름, 담당업무, 급여를 보이시오 (IN 또는 NOT IN을 사용하시오)

1. SQL
SELECT ename, job, sal
FROM emp
WHERE job NOT IN ('ANALYST', 'MANAGER', 'SALESMAN');

 

15. 담당 업무명에 'NA'를 포함하는 사원의 이름, 담당업무를 보이시오

1. SQL
SELECT ename, job
FROM emp
WHERE job LIKE '%NA%';

 

16. 담당 업무명의 두 번째 글자가 'A'인 사원의 이름, 담당업무를 보이시오

1. SQL
SELECT ename, job
FROM emp
WHERE job LIKE '_A%';

 

17. 담당 업무가 MANAGER인 사원은 몇 명인지 보이시오

1. SQL
SELECT COUNT(*) AS count_all
FROM emp
WHERE job = 'MANAGER';

 

18. 20번 부서에 근무하는 사원들의 평균 급여액을 보이시오

1. SQL
SELECT AVG(sal) AS avg_sal
FROM emp
WHERE deptno = 20;

 

19. 10번 부서에 근무하는 사원중 급여를 가장 많이 받는 사원의 급여를 보이시오

1. SQL
SELECT MAX(sal) AS max_sal
FROM emp
WHERE deptno = 10;

 

20. 담당업무가 MANAGER인 사원들중 급여를 가장 많이 받는 사원과 가장 적게 받는 사원의 급여액 차이를 보이시오

1. SQL
SELECT MAX(sal) - MIN(sal) AS difference_sal
FROM emp
WHERE job = 'MANAGER';

 

21. 담당업무가 SALESMAN 이거나 30번 부서에 근무하는 사원의 급여액 합계를 보이시오

1. SQL
SELECT SUM(sal) AS sum_sal
FROM emp
WHERE job = 'SALESMAN' OR deptno = 30;

 

22. 사원들에게 지급되는 보너스(comm)의 합계를 보이시오.

1. SQL
SELECT SUM(comm) AS sum_comm
FROM emp;

 

2. Result

 

23. 입사일이 198191일 이후인 사원의 평균 연봉을 보이시오

1. SQL
SELECT AVG(sal) AS avg_sal
FROM emp
WHERE hiredate > '1981-09-01';

 

24. 모든 사원들의 현재 급여액 합계와 급여를 20% 올렸을 때 급여액 합계를 보이시오.

1. SQL
SELECT SUM(sal) AS sum_sal, SUM(sal*1.2) AS sum_sal_20_percent
FROM emp;

 

25. 담당 업무가 SALESMAN인 사원들의 급여를 20% 인상하기 위해서는 현재보다 얼마의 비용이 더 필요한가를 보이시오.

1. SQL
SELECT SUM(sal*1.2) - SUM(sal) AS need_cost
FROM emp
WHERE job = 'SALESMAN';

 

26. 모든 담당업무명을 알파벳순으로 보이시오

1. SQL
SELECT DISTINCT job -- 중복 허용하려면 DISTINCT 부분 제거
FROM emp
ORDER BY job ASC;

 

27. 모든 사원의 이름과 업무, 급여를 급여액 내림차순으로 보이시오

1. SQL
SELECT ename, job, sal
FROM emp
ORDER BY sal DESC;

 

28. 담당 업무가 SALESMAN인 사원의 이름과 부서번호를 입사일자순으로 보이시오

1. SQL
SELECT ename, deptno
FROM emp
WHERE job = 'SALESMAN'
ORDER BY hiredate;

 

29. 급여가 1500 이상이고 담당업무가 MANAGER인 사원의 사원번호, 이름, 급여를 이름 알파벳순으로 보이시오

1. SQL
SELECT empno, ename, sal
FROM emp
WHERE sal >= 1500 AND job = 'MANAGER'
ORDER BY ename;

 

30. 담당업무별 평균연봉을 보이시오

1. SQL
SELECT job, AVG(sal) AS avg_sal
FROM emp
GROUP BY job;

 

31. 부서별 평균 연봉을 보이되 많은 연봉 우선으로 보이시오

1. SQL
SELECT deptno, AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
ORDER BY AVG(sal) DESC;

 

32. 각 부서별 최고 연봉을 보이시오

1. SQL
SELECT deptno, MAX(sal) AS max_sal
FROM emp
GROUP BY deptno;

 

33. 모든 사원의 정보를 담당업무에 대해 오름차순으로, 그리고 같은 업무내에서는 연봉 내림차순으로 정렬하여 보이시오

1. SQL
SELECT *
FROM emp
ORDER BY job ASC, sal DESC;

 

34. 각 매니저별 담당사원의 인원수, 평균 연봉을 보이시오. (매니저가 NULL인 경우는 제외하시오)

1. SQL
SELECT COUNT(*) AS count_emp, AVG(sal) AS avg_sal
FROM emp
WHERE mgr IS NOT NULL
GROUP BY mgr;

 

35. 각 담당 업무별로 최고 연봉과 최저 연봉을 보이시오

1. SQL
SELECT MAX(sal) AS max_sal, MIN(sal) AS min_sal
FROM emp
GROUP BY job;

 

36. 담당업무별 인원수, 평균 연봉을 보이되 업무별 인원수가 3명 이상인 경우에 대해서만 보이시오

1. SQL
SELECT COUNT(*) AS cnt, AVG(sal) AS avg_sal
FROM emp
GROUP BY job
HAVING COUNT(*) >= 3;

 

37. 각 부서별 부서번호, 사원 수, 연봉합계를 보이시오

1. SQL
SELECT deptno, MAX(sal) AS max_sal
FROM emp
GROUP BY deptno;

 

38. 각 부서별 부서번호, 사원 수, 연봉합계를 보이되 사원 수가 5명 이상인 부서의 정보만 보이시오.

1. SQL
SELECT deptno, COUNT(*) AS cnt, SUM(sal) AS sum_sal
FROM emp
GROUP BY deptno
HAVING COUNT(*) >= 5;

 

39. 부서번호, 부서별 사원 수, 연봉 합계를 보이되 급여합계가 9000~10000 사이인 경우만 보이시오. , 입사일자가 1981-01-01 이전 사원은 제외하고, 연봉 합계가 많은 순으로 출력하시오

1. SQL
SELECT deptno, COUNT(*) AS cnt, SUM(sal) AS sum
FROM emp
WHERE hiredate > '1981-01-01'
GROUP BY deptno
HAVING SUM(sal) BETWEEN 9000 AND 10000
ORDER BY SUM(sal) DESC;