반응형

 

안녕들 하시죠!

이번 시간에도 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 복습해보겠습니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1. 직책이 SALESMAN, ANALYST인 사람의 모든 정보를 출력하시오. ( or, like, in, any, some )
1
2
3
4
select *
from emp
where job = 'SALESMAN' 
or job = 'ANALYST';
cs
 
1
2
3
4
select *
from emp
where job like 'S%' 
or job like 'A%';
cs

 

1
2
3
4
5
6
7
8
9
10
11
select *
from emp
where job in ('SALESMAN''ANALYST');
 
select *
from emp
where job = any ('SALESMAN''ANALYST');
 
select *
from emp
where job = some ('SALESMAN''ANALYST');
cs

 

2. 1981년 5월 1일 ~ 1982년 2월 사이에 입사한 사원들의 모든 정보를 부서번호순(오름차순)으로 검색하시오. ( TO_DATE )
1
2
3
4
5
select *
from emp
where hiredate >= TO_DATE('19810501''yyyymmdd'
and hiredate < TO_DATE('19820228''yyyymmdd')
order by deptno;
cs

 

3. 1981년에 입사한 사원의 이름과 사원번호를 출력하는데 사원번호가 내림차순으로 정렬하시오. ( TO_CHAR )
1
2
3
4
5
6
select ename
     , empno
from emp
where hiredate >= '19810101'
and hiredate <= '19811231'
order by empno desc;
cs
1
2
3
4
5
select ename
     , empno
from emp
where to_char(hiredate,'YYYY'= '1981'
order by empno desc;
cs

 

4. 직급이 SALESMAN 일 경우 급여 * 1.1, CLERK 일 경우 급여 * 1.3, MANAGER 일 경우 급여 * 1.5 를 하고 모든 정보를 출력하시오. ( DECODE )

DECODE 함수 = ( IF-ELSE )

ex) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2....)

1
2
3
4
5
6
7
select empno
     , job
     , ename
     , sal
     , decode(job, 'SALESMAN', sal*1.1'CLERK', sal*1.3'MANAGER', sal*1.5, sal) as 인상된급여 
from emp;
 
cs

 

 

 

 

 

 

 

5. 모든 사원들에게 커미션을 200씩 추가하여 사원이름, 커미션 값을 출력하시오. ( nvl )

NVL 함수 = 값이 NULL인 경우 지정값을 출력한다. NVL("값", "지정값")

NVL2 함수 = 값이 NULL이 아닌 경우 지정값1을 출력하고 NULL인 경우 지정값2를 출력한다. NVL2("값", "지정값1", "지정값2")

1
2
3
select ename
     , nvl(comm,0+ 200 
from emp;
cs

 

6.  커미션을 가지고 있는 사원은 Y, 커미션이 NULL값인 사원은 N을 포함하여 사원이름과 커미션 값을 출력하시오.( nvl2 )
1
2
3
select ename
     , nvl2(comm, 'Y''N'
from emp;
cs

 

7. 1981년 입사자들의 평균 임금을 출력하시오.
1
2
3
select AVG(sal)
from emp
where TO_CHAR(hiredate,'YYYY'= '1981';
cs

 

8. 사원번호, 사원이름, 총 급여(SAL+COMM)을 출력하시오. 
1
2
3
4
select empno
     , ename
     , sal+nvl(comm,0)
from emp;
cs

 

9. SALESMAN 의 커미션 평균을 출력하시오. ( group by )

 

GROUP BY 함수 = 특정 컬럼을 기준으로 집계를 내는데에 사용한다.

SELECT [그룹으로 묶은 컬럼명]
     , [집계할 컬럼명]
FROM [테이블명]
GROUP BY [그룹으로 묶을 컬럼명]
1
2
3
4
5
select job
     , AVG(nvl(comm,0))
from emp
where job='SALESMAN'
group by job;
cs

 

오늘은 여기까지입니다 감사합니다 !

+ Recent posts