본문 바로가기
개발/기타

SQL 쿼리문 예제모음 초급용 30개

by 아크투어 2023. 3. 28.
반응형

1. 개요

 

SQL 쿼리문 예제모음 30개 및 쿼리도구 추천

1. 개요 실전에서 자주 사용되는 유용한 SQL 예제 30개를 선별해 보았다. 오라클 기준이며, 대부분 내장함수를 제외하고는 기본문맥 및 개념은 동일하다. 2. dbeaver DB-TOOL 에서 한가지를 추천한다.

arckwon.tistory.com

  • 추가적으로 30개를 포스팅한다.

sql 예

 

2. 쿼리문 예제 30선

  • 아래 SQL을 참고하자.
31. 문제) 부서번호로 ASCENDING SORT한 후 급여가 많은 사람 순으로 출력하라.
SELECT * FROM EMP ORDER BY DEPTNO ASC , SAL DESC;
 

32. 문제) 부서번호가 DESCENDING SORT하고, 이름 순으로 ASCENDING SORT,급여 순으로 DESCENDING SORT 하라.
SELECT * FROM EMP ORDER BY DEPTNO DESC , ENAME ASC , SAL DESC;
 

33. 문제) EMP Table에서 이름, 급여, 커미션 금액, 총액(sal + comm)을 구하여 총액이 많은 순서로 출력하라.
단, 커미션이 NULL인 사람은 제외한다.
SELECT ENAME , SAL , COMM , (SAL + COMM) FROM EMP WHERE COMM IS NOT NULL ORDER BY (SAL + COMM) DESC;


34. 문제) 10번 부서의 모든 사람들이게 급여의 13%를 보너스로 지불하기로 하였다. 이름, 급여, 보너스 금액, 부서번호를 출력하라.
SELECT ENAME , (SAL*0.13 + SAL) , COMM , DEPTNO FROM EMP WHERE DEPTNO = 10;
 

35. 문제) 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라. 단, 연말에 급여의 150%를 보너스로 지급한다.
SELECT ENAME , DEPTNO , SAL , (SAL/12*1.5+SAL) FROM EMP WHERE DEPTNO = 30;
 

36. 문제 ) 부서번호가 20인 부서의 시간당 임금을 계산하여 출력하라.
단, 1달의 근무일수는 12일이고, 1일 근무시간은 5시간이다.
출력양식은 이름, 급여, 시간당 임금(소수이하 첫 번째 자리에서 반올림)을 출력하라
SELECT ENAME, SAL "연봉", ROUND(((SAL/12/12)/5),0) "시급" FROM EMP WHERE DEPTNO = 20;
 

36. 문제) 급여가 $1,500부터 $3,000 사이의 사람은 급여의 15%를 회비로 지불하기로 하였다. 이를 이름, 급여, 회비(소수점 두 자리에서
반올림)를 출력하라.
SELECT ENAME , SAL , ROUND(SAL*0.15,1) FROM EMP WHERE SAL >=1500 AND SAL < =3000;
 

37. 문제) 급여가 $2,000 이상인 모든 사람은 급여의 15%를 경조비로 내기로 하였다. 이름, 급여, 커미션(소수점 이하 절삭)를 출력하라.
SELECT ENAME, SAL, COMM ,TRUNC(SAL * 0.15, 0)FROM EMP WHERE SAL >= 2000;


38. 문제) 입사일부터 지금까지의 날짜수를 출력하라. 부서번호, 이름, 입사일, 현재일, 근무일수(소수점 이하 절삭), 근무년수, 근무월수
(30일 기준), 근무주수를 출력하라.
SELECT DEPTNO, ENAME, HIREDATE, SYSDATE,                      
TRUNC(SYSDATE-HIREDATE) 근무일,     
TRUNC((SYSDATE-HIREDATE) / 365) 근무년,
TRUNC((SYSDATE-HIREDATE) / 30) 근무월, 
TRUNC((SYSDATE-HIREDATE) / 7) 근무주  
FROM EMP;
 

39. 문제) 모든 사원의 실수령액을 계산하여 출력하라. 단, 급여가 많은 순으로 이름, 급여, 실수령액을 출력하라.(실수령액은 금여에
대해 10%의 세금을 뺀 금액)
SELECT ENAME, SAL, (SAL - (SAL*0.10)) "실수령" FROM EMP ORDER BY SAL DESC;
 

40. 문제) 입사일로부터 90일이 지난 후의 사원이름, 입사일, 90일 후의 날, 급여를 출력하라.
SELECT ENAME , HIREDATE , HIREDATE+90 "90일후" , SAL FROM EMP;
 

41. 문제) 입사일로부터 6개월이 지난 후의 입사일, 6개월 후의 날짜, 급여를 출력하라
SELECT HIREDATE , HIREDATE+180 "입사+6개월", SYSDATE+180 "현재+6개월", SAL FROM EMP;
 

42. 문제) 입사한 달의 근무일수를 계산하여 부서번호, 이름, 근무일수를 출력하라.
SELECT DEPTNO, ENAME, LAST_DAY(HIREDATE) - HIREDATE "입사달근무일수" FROM EMP;
 

43. 문제) 모든 사원의 60일이 지난 후의 ‘MONDAY’는 몇 년, 몇 월, 몇 일 인가를 구하여 이름, 입사일,’MONDAY’를 출력하라
SELECT ENAME, HIREDATE, NEXT_DAY(HIREDATE+60, '월요일') FROM EMP;
 

44. 문제) 입사일로부터 오늘까지의 일수를 구하여 이름, 입사일, 근무일수를 출력하라.
SELECT ENAME, HIREDATE, (SYSDATE - HIREDATE) FROM EMP;
 

45. 문제) 입사일을 ‘1996년 5월 14일’의 형태로 이름, 입사일을 출력하라.
SELECT TO_CHAR(HIREDATE,'YY"년"MM"월"DD"일"') FROM EMP;


46. 문제) 이름의 글자수가 6자 이상인 사람의 이름을 앞에서 3자만 구하여 소문자로 이름만을 출력하라.
SELECT LOWER(SUBSTR(ENAME, 1, 3)) FROM EMP WHERE LENGTH(ENAME) >= 6;
 

47. 문제) 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.
SELECT AVG(SAL) , MAX(SAL) , MIN(SAL), COUNT(*) FROM EMP WHERE DEPTNO = 10 GROUP BY DEPTNO;
 

48. 문제) 각 부서별 급여의 평균, 최고, 최저, 인언수를 구하여 출력하라.
SELECT DEPTNO , AVG(SAL) , MAX(SAL) , MIN(SAL) , COUNT(*) FROM EMP GROUP BY DEPTNO;
 

49. 문제) 각 부서별 같은 업무를 하는 사람의 인원수를 구하여 부서번호, 업무명, 인원수를 출력하라.
SELECT DEPTNO , JOB , COUNT(*) FROM EMP GROUP BY DEPTNO , JOB;


50. 문제) 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.
SELECT JOB , COUNT(*) FROM EMP GROUP BY JOB HAVING COUNT(*) >= 4;
 

51. 문제) 각 부서별 평균 월급, 전체 월급, 최고 월급, 최저 월급을 구하여 평균 월급이 많은 순으로 출력하라.
SELECT DEPTNO , AVG(SAL),SUM(SAL),MAX(SAL),MIN(SAL) FROM EMP GROUP BY DEPTNO ORDER BY AVG(SAL) DESC;
 

52. 문제) EMP와 DEPT Table을 JOIN하여 부서번호, 부서명, 이름, 급여를 출력하라.
SELECT E.DEPTNO , D.DNAME , E.ENAME , E.SAL
FROM EMP E
JOIN DEPT D
ON(E.DEPTNO = D.DEPTNO);
 

53. 문제) 이름이 ‘ALLEN’인 사원의 부서명을 출력하라.
SELECT E.ENAME , D.DNAME
FROM EMP E
JOIN DEPT D
ON(E.DEPTNO = D.DEPTNO)
WHERE E.ENAME = 'ALLEN';


54. 문제) DEPT Table에 있는 모든 부서를 출력하고, EMP Table에 있는 DATA와 JOIN하여 모든 사원의 이름,
부서번호, 부서명, 급여를 출력하라.
 
SELECT D.DNAME , E.*
FROM EMP E
JOIN DEPT D
ON(E.DEPTNO = D.DEPTNO);


55. 문제) EMP Table에 있는 EMPNO와 MGR을 이용하여 서로의 관계를 다음과 같이 출력하라.
‘SMTH의 매니저는 FORD이다’
SELECT  E1.ENAME || '의 매니저는 ' || E2.ENAME || '이다'
FROM EMP E1 , EMP E2
WHERE E1.ENAME = 'SMITH'AND E1.MGR = E2.EMPNO;
 

56. 문제) ‘ALLEN:의 직무와 같은 사람의 이름, 부서명, 급여, 직무를 출력하라.
SELECT EMP.ENAME , EMP.SAL , DEPT.DNAME , EMP.JOB
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND JOB = (SELECT JOB FROM EMP WHERE ENAME = 'ALLEN');
 

57. 문제) ‘JONES’가 속해있는 부서의 모든 사람의 사원번호, 이름, 입사일, 급여를 출력하라.
SELECT EMP.EMPNO , EMP.ENAME , EMP.HIREDATE , EMP.SAL
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = (SELECT EMP.DEPTNO FROM EMP WHERE EMP.ENAME = 'JONES'); 
 

58. 문제) 전체 사원의 평균 임금보다 많은 사원의 사원번호, 이름, 부서명, 입사일, 지역, 급여를 출력하라.
SELECT EMP.EMPNO , EMP.ENAME , DEPT.DNAME , EMP.HIREDATE , EMP.SAL
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.SAL > (SELECT AVG(EMP.SAL) FROM EMP);
 

59. 문제) 10번 부서 사람들 중에서 20번 부서의 사원과 같은 업무를 하는 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.
SELECT EMP.EMPNO , EMP.ENAME , DEPT.DNAME , EMP.HIREDATE , DEPT.LOC
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = 10
AND JOB IN (SELECT JOB FROM EMP WHERE DEPTNO = 20);


60. 문제) 10번 부서 중에서 30번 부서에는 없는 업무를 하는 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.
SELECT EMP.EMPNO , EMP.ENAME , DEPT.DNAME , EMP.HIREDATE , DEPT.LOC
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = 10
AND JOB NOT IN(SELECT JOB FROM EMP WHERE DEPTNO = 30);
 

61. 문제) 10번 부서와 같은 일을 하는 사원의 사원번호, 이름, 부서명, 지역, 급여를 급여가 많은 순으로 출력하라.
SELECT EMP.EMPNO , EMP.ENAME , DEPT.DNAME , DEPT.LOC , EMP.SAL , EMP.DEPTNO, EMP.JOB
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND JOB IN (SELECT JOB FROM EMP WHERE DEPTNO = 10);


62. 문제) ‘MARTIN’이나 ‘SCOTT의 급여와 같은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT EMP.EMPNO ,EMP.ENAME , EMP.SAL
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND SAL IN(SELECT SAL FROM EMP WHERE ENAME ='MARTIN' OR ENAME = 'SCOTT');
 

63. 문제) 급여가 30번 부서의 최고 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT EMPNO , ENAME , SAL
FROM EMP
WHERE SAL > (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 30);
 

64. 문제) 급여가 30번 부서의 최저 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT EMPNO , ENAME , SAL
FROM EMP
WHERE SAL > (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 30);

 

반응형