※오탈자 있을 수 있습니다.
1) 사원번호가 7499인 사원의 이름, 입사일, 부서번호를 출력하여라.
SELECT ename, hiredate, deptno
FROM emp
WHERE empno = 7499;
2) 이름이 ALLEN인 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE ename = 'ALLEN';
3) 이름이 K보다 큰 글자로 시작하는 사원의 모든 정보를 출력하여라.
(글자 비교 가능 : A부터 Z순으로 커짐)
SELECT *
FROM emp
WHERE ename > 'K';
4) 입사일이 02-APR-81보다 늦고 09-DEC-82보다 빠른 사원의 이름, 급여, 부서번호를 출력하여라.
(날짜는 사용하는 컴퓨터의 표현 형식을 따라 표기해야 함)
SELECT ename, sal, deptno
FROM emp
WHERE hiredate > '81/04/02' AND hiredate < '82/11/09';
5) 급여가 1600보다 크고 3000보다 작은 사원의 이름, 직무, 급여를 출력하여라.
SELECT ename, job, sal
FROM emp
WHERE sal > 1600 AND sal < 3000;
6) 직업이 MANAGER이거나 SALESMAN인 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE job = 'MANAGER' OR job = 'SALESMAN';
7) 급여가 1500이상이고, 부서번호가 30번인 사원 중 직무가 MANAGER인 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE sal >= 1500 AND deptno = 30 AND job = 'MANAGER';
8) 직무가 MANAGER가 아닌 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE NOT job = 'MANAGER';
9) 1981년 4월 2일 이후에 입사한 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE hiredate > '81/04/02';
10) 사원번호가 7698보다 작거나 같은 사원들의 사원번호와 이름을 출력하여라.
SELECT empno, ename
FROM emp
WHERE empno <= 7698;
11) 사원번호가 7654와 7782 사이 이외의 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE NOT (empno > 7654 AND empno < 7782);
12) 부서가 30번이고 급여가 1500 이상인 사원의 이름, 부서, 급여를 출력하여라.
SELECT ename, deptno, sal
FROM emp
WHERE deptno = 30 AND sal >= 1500;
13) 입사일이 81년 이외에 입사한 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE NOT (hiredate LIKE '81%');
14) 부서 번호가 20, 30번을 제외한 모든 사원의 이름, 사원번호, 부서 번호를 출력하여라.
SELECT ename, empno, deptno
FROM emp
WHERE NOT (deptno = 20 OR deptno = 30);
15) 이름이 S로 시작하는 사원의 사원번호, 이름, 입사일, 부서번호를 출력하여라.
SELECT empno, ename, hiredate, depto
FROM emp
WHERE ename LIKE 'S%';
16) 입사일이 81년도인 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE hiredate LIKE '81%';
17) 이름 중 S자가 들어가 있는 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE ename LIKE '%S%';
18) 이름이 S자로 시작하고 마지막 글자가 T인 사원의 모든 정보를 출력하여라 (단, 이름은 전체 5자리이다.)
SELECT *
FROM emp
WHERE ename LIKE 'S___T';
혹은
SELECT *
FROM emp
WHERE ename LIKE 'S%T' AND LENGTH(ename) = 5;
19) 이름의 처음 글자는 관계없고 두 번째 글자가 A인 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE ename LIKE '_A%';
20) 커미션이 NULL이 아닌 사원의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE NOT (comm IS NULL);
혹은
SELECT *
FROM emp
WHERE comm is NOT NULL;
21) 부서번호가 30인 사원들의 모든 정보를 사원번호에 대해 오름차순으로 정렬하여라.
SELECT *
FROM emp
WHERE deptno = 30
ORDER BY empno ASC;
혹은
SELECT *
FROM emp
WHERE deptno = 30
ORDER BY empno;
22) 사원의 모든 정보를 부서번호에 대해 내림차순으로 정렬하고 이름에 대해 오름차순으로, 급여에 대해 내림차순으로 정렬하여라.
SELECT *
FROM emp
ORDER BY deptno DESC, ename ASC, sal DESC;
23) 부서번호가 10인 사원의 사원번호, 이름, 급여, 커미션을 커미션에 대해 오름차순으로 정렬한 후 사원번호에 대해 내림차순으로 정렬하여라.
SELECT empno, ename, sal, comm
FROM emp
WHERE deptno = 10
ORDER BY comm, empno DESC;
24) 사원의 모든 정보를 부서번호에 대해 오름차순으로 정렬한 후 급여가 많은 사원부터 차례로 출력하여라.
SELECT *
FROM emp
ORDER BY deptno, sal DESC;
25) 급여가 1500부터 3000 사이의 사원에 대해서만 급여의 15%를 회비로 지불하기로 하였다. 조건에 해당되는 사원의 이름, 급여, 회비(소수 이하 2자리까지 반올림)를 출력하여라.
SELECT ename, sal, ROUND(sal*0.15, 2) AS 회비
FROM emp
WHERE sal > 1500 AND sal < 3000;
26) 이름의 글자수가 6자 이상인 사원의 이름을 앞에서 3자만 구하여 소문자로 이름만 출력하여라.
SELECT LOWER(SUBSTR(ename, 1, 3)
FROM emp
WHERE LENGTH(ename) >= 6;
27) 직무가 'CLERK'인 사원들의 사원번호, 이름, 급여를 표시하여라.
(단, 급여는 1000 단위마다 콤마(,)를 찍고 앞에는 국가별 회폐 단위를 붙여 표시하여라)
SELECT empno, ename, TO_CHAR(sal, 'L999,999')
FROM emp
WHERE job='CLERK';
28) 모든 사원에 대해 사원의 이름은 앞에서 세 글자만 대문자로, 직무는 소문자로 하여 이름(세 글자), 직무, 부서 번호를 출력하여라.
SELECT UPPER(SUBSTR(ename, 1, 3)) "이름", LOWER(job) "직무", depton
FROM emp;
29) 모든 사원에 대해 사원의 이름과 부서번호를 합성시켜 "연결예제"라는 heading으로 출력하여라.
SELECT CONCAT(ename, deptno) "연결예제"
FROM emp;
혹은
SELECT ename || deptno "연결예제"
FROM emp;
30) 사원의 직무가 'SAL'로 시작하는 사원의 이름과 사원 이름의 길이를 출력하여라.
SELECT ename, length(ename) "이름 길이"
FROM emp
WHERE SUBSTR(job, 1, 3)='SAL';
31) 이름의 두 번째 글자가 'A'인 사원들의 이름과 직무를 출력하여라.
(단, 직무는 앞에서부터 세 글자만 표시하여라)
SELECT ename, SUBSTR(job, 1, 3) "job"
FROM emp
WHERE ename LIKE '_A%':
32) 모든 사원에 대해 입사일로부터 90일이 지난 후의 날짜를 계산해서 이름, 입사일, 90일 후의 날짜, 급여를 출력하여라.
SELECT ename, hiredate, hiredate+90, sal
FROM emp;
33) 모든 사원에 대해 입사한 달의 근무 일 수를 계산하여 부서번호, 이름, 근무 일 수를 출력하여라.
SELECT deptno, ename, LAST_DAY(hiredate)-hiredate "근무일수"
FROM emp;
34) 모든 사원에 대해 입사한 날로부터 60일이 지난 후의 '월요일'이 몇 년, 몇 월, 몇 일인지를 구하여 이름, 입사일, 60일 후의 '월요일' 날짜를 출력하여라.
SELECT ename, hiredate, NEXT_DAY(hiredate+60, '월') "월요일"
FROM emp;
35) 현재의 7일 전과 7일 후, 그리고 30일이 지난 후의 첫 번째 월요일을 출력하여라.
SELECT SYSDATE-7, SYSDATE+7, NEXT_DAY(SYSDATE+30, '월')
FROM dual;
36) 모든 사원에 대해 입사일로부터 6개월이 지난 후의 날짜를 계산해서 이름, 입사일, 6개월 후의 날짜를 출력하여라.
SELECT ename, hiredate, ADD_MONTHS(hiredate, 6) "6개월 후"
FROM emp;
37) 사원번호가 짝수인 사원들의 모든 정보를 출력하여라.
SELECT *
FROM emp
WHERE MOD(empno, 2) = 0;
38) 모든 사원의 이름, 급여, 커미션, 총액(급여+커미션)을 구하여 총액이 많은 순서로 출력하여라.
(단, 커미션이 null인 사원도 0으로 해서 포함하여라)
SELECT ename, sal, comm, sal+NVL(comm, 0) AS "총액"
FROM emp
ORDER BY 총액 DESC;
39) 급여가 1500부터 3000사이의 사원에 대해서만 급여의 15%를 회비로 지불하기로 하였다. 조건에 해당되는 사원의 이름, 급여, 회비(소수 이하 2자리까지 반올림)를 출력하여라.
SELECT ename, sal, ROUND(sal*0.15, 2) "회비"
FROM emp
WHERE sal > 1500 AND sal < 3000;
40) 사원들의 사원번호와 급여, 커미션, 연봉((comm+sal)*12)을 연봉이 많은 순서로 출력하여라.
(단, 커미션이 null인 사원도 0으로 계산하여라)
SELECT empno, sal, comm, (NVL(comm, 0)+sal)*12 AS "연봉"
FROM emp
ORDER BY 연봉 DESC;
41) 모든 사원에 대해 사원들의 이름, 급여, 커미션을 급여가 적은 것부터 출력하여라.
(단, 커미션이 없는 사원은 'No Commision'이라는 말이 출력되게 하여라.)
SELECT ename, sal, NVL(TO_CHAR(comm, '999999'), 'No Commission') "comm"
FROM emp
ORDER BY sal;
혹은
SELECT ename, sal, DECODE(comm, NULL, 'No Commision', comm, comm) "comm"
FROM emp
ORDER BY sal;
42) 'CLERK'은 20%, 'SALESMAN'은 15%, 'ANALYST'는 10%, 'MANAGER'는 5%, 'PRESIDENT'는 0%와 같이 업무에 따라 급여 인상을 다르게 할 경우, 모든 사원들의 이름, 직무, 급여, 인상 후의 급여를 출력하여라.
SELECT ename, job, sal, DECODE(job, 'CLERK', sal*1.20,
'SALESMAN', sal*1.15,
'ANALYST', sal*1.10,
'MANAGER', sal*1.05,
'PRESIDENT', sal) "Decode"
FROM emp;
43) 모든 사원들의 입사한 년도와 입사한 달을 출력하여라.
SELECT TO_CHAR(hiredate 'YY/MM') "hire"
FROM emp;
44) 10번 부서에 대해 급여의 평균 값, 최대 값, 최소 값, 인원수를 구하여 출력하여라.
SELECT AVG(sal), MAX(sal), MIN(sal), COUNT(ename) "인원수"
FROM emp
WHERE deptno=10;
45) 각 부서별 같은 직무를 갖는 사원의 인원수를 구하여 부서번호, 직무, 인원수를 출력하여라.
SELECT deptno, job, COUNT(ename)
FROM emp
GROUP BY deptno, job
ORDER BY deptno;
46) 사원들의 직무별 평균급여와 최고급여, 최저급여를 평균급여에 대해 오르차순으로 정렬하여라.
SELECT AVG(sal), MAX(sal), MIN(sal)
FROM emp
GROUP BY job
ORDER BY AVG(sal);
47) 사원이름의 두 번째 글자가 'A'인 사원들의 수를 출력하여라.
SELECT COUNT(ename)
FROM emp
WHERE SUBSTR(ename, 2, 1) = 'A';
48) 사원들의 평균급여, 총 급여, 최고 급여액, 최저 급여액을 구하여라.
SELECT AVG(sal), SUM(sal), MAX(sal), MIN(sal)
FROM emp;
49) 평균 급여가 1500이 넘는 직무와 평균급여를 구하여라.
SELECT job, AVG(sal)
FROM emp
GROUP BY job
HAVING AVG(sal) > 1500;
50) 부서별 평균 급여가 2000보다 적은 부서 사원들의 부서번호를 출력하여라.
SELECT deptno
FROM emp
GROUP BY deptno
HAVING AVG(sal) < 2000;
51) EMP와 DEPT 테이블을 조인하여 모든 사원에 대해 부서번호, 부서이름, 사원이름, 급여를 출력하여라.
SELECT e.deptno, d.dname, e.ename, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno;
52) 이름이 'ALLEN'인 사원의 부서이름을 출력하여라.
SELECT d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno AND e.ename='ALLEN';
53) 'ALLEN'과 직무가 같은 사원의 이름, 부서이름, 급여, 부서위치를 출력하여라.
SELECT e.ename, d.dname, e.sal, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno AND job = (SELECT job
FROM emp
WHERE ename='ALLEN');
54) 전체 사원의 평균 급여보다 급여가 많은 사원의 사원번호, 이름, 부서 이름, 입사일, 부서위치, 급여를 출력하여라.
SELECT e.empno, e.ename, d.dname, e.hiredate, d.loc, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno AND sal > (SELECT avg(sal)
FROM emp);
55) 10번 부서 사원들 중에서 20번 부서의 사원과 같은 직무를 갖는 사원의 사원번호, 이름, 부서이름, 입사일, 부서위치를 출력하여라.
SELECT e.empno, e.ename, d.dname, e.hiredate, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND e.deptno = 10
AND e.job IN(SELECT job
FROM emp
WHERE deptno = 20);
56) 'ALLEN'의 급여보다 많고 'SCOTT'의 급여보다 적은 사원의 사원번호, 이름, 부서이름, 부서위치, 급여를 급여가 많은 순으로 출력하여라.
WHERE e.empno, e.ename, d.dname, d.loc, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno
AND sal > (SELECT sal
FROM emp
WHERE ename = 'ALLEN')
AND sal < (SELECT sal
FROM emp
WHERE ename = 'SCOTT')
ORDER BY sal DESC;
57) 사원들의 이름, 부서이름, 급여를 출력하여라.
SELECT e.enaem, d.dname, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno;
58) 각 부서별 부서번호(모든 부서에 대해서), 부서이름, 부서위치, 사원의 수를 출력하여라.
SELECT d.deptno, d.dname, d.loc, COUNT(ename)
FROM emp e, dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno, d.dname, d.loc
ORDER BY d.deptno;
59) 'FORD'와 부서가 같은 사원들의 이름, 부서이름, 직무, 급여를 출력하여라.
SELECT e.ename, d.dname, e.job, e.sal
FROM emp e, dept d
WHERE e.deptno = d.deptno AND e.deptno = (SELECT deptno
FROM emp
WHERE ename='FORD');
60) 부서이름이 'SALES'인 사원들의 평균 급여보다 급여가 많고, 부서이름이 'RESEARCH'인 사원들의 평균 급여보다 급여가 적은 사원들의 이름, 부서번호, 급여, 직무를 출력하여라.
SELECT ename, deptno, sal, job
FROM emp
WHERE sal > (SELECT AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno AND d.dname = 'SALES')
AND sal > (SELECT AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno AND d.dname = 'RESEARCH');
61) 30번 부서의 최고 급여보다 급여가 많은 사원의 사원번호, 이름, 급여를 출력하여라.
SELECT empno, ename, sal
FROM emp
WHERE sal > (SELECT MAX(sal)
FROM emp
WHERE deptno=30);
62) 10번 부서 사원들의 사원이름과 상사의 이름을 출력하여라.
SELECT e1.ename, e2.ename AS "상사"
FROM emp e1, emp e2
WHERE e1.mgr = e2.empno AND e1.deptno = 10;